Evitar la redirección de Xmlhttprequest
-
03-07-2019 - |
Pregunta
¿Es posible evitar que el navegador siga los redireccionamientos al enviar XMLHttpRequest-s (es decir, para recuperar el código de estado de redirección y manejarlo yo mismo)?
Solución
No de acuerdo con el estándar W3C para el objeto XMLHttpRequest (énfasis agregado):
Si la respuesta es una redirección HTTP:
Si el origen de la URL transmitida por el encabezado de la ubicación es el mismo origen con el origen XMLHttpRequest y la redirigir no viola infinito precauciones de bucle, de forma transparente siga la redirección mientras observa las reglas de evento de solicitud del mismo origen.
Estaban considerando para una futura versión:
Esta especificación no incluye Las siguientes características que están siendo considerado para una futura versión de esta especificación:
- Propiedad para deshabilitar las siguientes redirecciones;
pero la última especificación ya no menciona esto.
Otros consejos
El nuevo Fetch API admite diferentes modos de manejo de redireccionamiento : siga
, error
y manual
, pero no puedo encontrar una manera de ver la nueva URL o el código de estado cuando la redirección tiene sido cancelado Solo puede detener la redirección en sí misma, y ??luego parecerá un error (respuesta vacía). Si eso es todo lo que necesitas, eres bueno para irte. También debe tener en cuenta que las solicitudes realizadas a través de esta API no se pueden cancelar todavía . Ellos son ahora.
En cuanto a XMLHttpRequest, puede HEAD
el servidor e inspeccionar si la URL ha cambiado:
var http = new XMLHttpRequest();
http.open('HEAD', '/the/url');
http.onreadystatechange = function() {
if (this.readyState === this.DONE) {
console.log(this.responseURL);
}
};
http.send();
No obtendrás el código de estado, pero encontrarás la nueva URL sin descargar toda la página.
Puede utilizar la propiedad responseURL
para obtener el destino de redireccionamiento o verificar si la respuesta se obtuvo en última instancia desde una ubicación que acepta.
Por supuesto, esto significa que el resultado se obtiene de todos modos, pero al menos puede obtener la información necesaria sobre el destino de redireccionamiento y, por ejemplo, detectar condiciones en las que desea descartar la respuesta.
No, no hay ningún lugar en la API expuesta por XMLHttpRequest que le permita anular su comportamiento predeterminado de seguir un 301 o 302 automáticamente.
Si el cliente ejecuta IE en Windows, puede usar WinHTTP en lugar de establecer una opción para evitar ese comportamiento, pero esa es una solución muy limitante.