¿Qué sucede si el navegador recibe una respuesta de redireccionamiento a una solicitud ajax?
Si el servidor envía una redirección (también conocida como una respuesta 302 más una ubicación: encabezado), la redirección es seguida automáticamente por el navegador. La respuesta a la segunda solicitud (suponiendo que tampoco sea otra redirección) es lo que está expuesto a su programa.
De hecho, no tiene la capacidad de detectar si se ha producido una respuesta 302. Si la redirección 302 conduce a un 200, entonces su programa actúa de manera idéntica como si la solicitud original condujera directamente a un 200.
Curiosamente, llegué a esto porque estoy experimentando una situación en la que aparentemente no se sigue la redirección ... esto sucede cuando la redirección viola la misma política de origen.
Gus
44
@Gus que probablemente sea lógico
Dmitry
1
En el caso de una redirección a un 401 (o cualquier error 4xx o 5xx) asumiría que su programa se comportaría como si la solicitud condujera directamente a un 401. ¿No es eso lo que está viendo?
Actualización de 2019: fetch no funciona como esperábamos hace 3 años):
lcjury
7
El ajax-requestseguirán que yo sepa redirección. El contenido real ( .responseText,.responseXML ) será el contenido de la página a la que se le redirige.
Es posible que pueda interceptar la redirección ( status-code, location-header) en readyState2 o 3, pero no está seguro.
Respuestas:
¿Qué sucede si el navegador recibe una respuesta de redireccionamiento a una solicitud ajax?
Si el servidor envía una redirección (también conocida como una respuesta 302 más una ubicación: encabezado), la redirección es seguida automáticamente por el navegador. La respuesta a la segunda solicitud (suponiendo que tampoco sea otra redirección) es lo que está expuesto a su programa.
De hecho, no tiene la capacidad de detectar si se ha producido una respuesta 302. Si la redirección 302 conduce a un 200, entonces su programa actúa de manera idéntica como si la solicitud original condujera directamente a un 200.
Esta ha sido mi experiencia y el comportamiento mencionado en la especificación .
Actualización de 2016: ha pasado el tiempo y la buena noticia es que la nueva API fetch () está diseñada para ofrecer un control más detallado de cómo se manejan las redirecciones , con un comportamiento predeterminado similar al XHR. Dicho esto, solo funciona donde fetch () se implementa de forma nativa . Las versiones Polyfill de fetch (), que se basan en XHR, continúan teniendo las limitaciones de XHR . Por suerte, compatibilidad con el navegador nativo parece estar redondeando muy bien.
fuente
El
ajax-request
seguirán que yo sepa redirección. El contenido real (.responseText
,.responseXML
) será el contenido de la página a la que se le redirige.Es posible que pueda interceptar la redirección (
status-code
,location-header
) enreadyState
2 o 3, pero no está seguro.fuente
getAllResponseHeaders()
es igual.