javascript - AngularJS $http:hur man undviker att följa omdirigering
I en AngularJS-applikation gör jag ett $http.post-anrop till en server-URL. Svarskoden för detta URL-anrop är en 30x-omdirigering, mitt problem är att $http.post strikt följer denna omdirigering och returnerar i succes-callbacken resultatet av det slutliga anropet. Jag skulle vilja kunna avbryta denna omdirigering och manuellt omdirigera användaren (ändra webbläsarens URL) till den slutliga sidan. Är det möjligt?
Svar #1
Enligt dokumentationen är $http-tjänsten en kärntjänst i Angular som underlättar kommunikation med fjärrserverar via webbläsarens XMLHttpRequest-objekt eller via JSONP.
Med vetskap om det, och med vetskap om specifikationerna för XMLHttpRequest, är det förmodligen inte möjligt att avlyssna en omdirigering.
W3C-specifikationen för XMLHttpRequest säger
Om svaret har en HTTP-statuskod på 301, 302, 303, 307 eller 308
Om omdirigeringen bryter mot försiktighetsåtgärder mot oändliga loopar är detta ett nätverksfel.
Annars, kör dessa steg:
Ställ in begärans URL till URL:en som anges i Location-headern.
Om källans ursprung och ursprungs-URL för begäran är samma ursprung, följ omdirigeringen transparent samtidigt som reglerna för begäran av samma ursprung observeras.
Annars, följ stegen för cross-origin-förfrågningar och avsluta stegen för denna algoritm.
HTTP ställer krav på användaragenten vad gäller bevarandet av begäranmetoden och begärans enhetskropp under omdirigeringar, och kräver också att slutanvändare meddelas om vissa typer av automatiska omdirigeringar.
Så omdirigeringen sker långt innan Angular kan göra något åt det, och den kan inte stoppas.
Ett annat alternativ skulle vara att göra $http-anropet till din egen server, och sedan använda något som cURL på serversidan (beroende på vilket språk som används på serversidan) som kan ställas in att inte följa omdirigeringar, för att hämta resursen.