Respuestas:
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 Location es el mismo origen que el origen de XMLHttpRequest y la redirección no viola las precauciones de bucle infinito, siga de manera transparente la redirección mientras observa las reglas de eventos de solicitud del mismo origen.
Lo estaban considerando para un lanzamiento futuro:
Esta especificación no incluye las siguientes características que se están considerando para una versión futura de esta especificación:
- Propiedad para deshabilitar las siguientes redirecciones;
pero la última especificación ya no menciona esto.
El nuevo Fetch API soportes diferentes modos de manejo de redirección: follow
, error
y manual
, pero no puedo encontrar una manera de ver la nueva dirección URL o el código de estado cuando el cambio de dirección ha sido cancelada. Simplemente puede detener la redirección en sí, y luego parece un error (respuesta vacía). Si eso es todo lo que necesita, ya está listo. Además, debe tener en cuenta que las solicitudes realizadas a través de esta API aún no se pueden cancelar . Ahora lo son .
En cuanto a XMLHttpRequest, puede acceder HEAD
al 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á el código de estado, pero encontrará la nueva URL sin descargar la página completa.
OPTIONS
puede ser una mejor opción, de todos modos solo funciona para fines no generales, etc. el administrador había configurado la redirección de todo el sitio / esquema, como HTTP -> HTTPS
Puede usar la responseURL
propiedad para obtener el destino de la redirección o verificar si la respuesta se obtuvo finalmente de una ubicación que acepta.
Esto, por supuesto, significa que el resultado se obtiene de todos modos, pero al menos puede obtener la información necesaria sobre el destino de la redirección y, por ejemplo, detectar las condiciones en las que le gustaría descartar la respuesta.
No, no hay ningún lugar en la API expuesto por XMLHttpRequest que le permita anular su comportamiento predeterminado de seguir un 301 o 302 automáticamente.
Si el cliente está ejecutando IE en Windows, puede usar WinHTTP en su lugar para configurar una opción para evitar ese comportamiento, pero esa es una solución muy limitante.