2008-10-23 15 views

Respuesta

84

no de acuerdo con the W3C standard for the XMLHttpRequest object (énfasis añadido):

Si la respuesta es una redirección HTTP:

Si el origen de la URL transmitida por la cabecera ubicación es mismo origen con el El origen de XMLHttpRequest y el redireccionamiento no infringen las precauciones infinitas de bucle , transparente siguen el redireccionamiento mientras observa las reglas de evento de solicitud del mismo origen.

Eran considering para una versión futura:

Esta especificación no incluye las siguientes características que están siendo considerado para una versión futura de esta especificación:

  • Propiedad para deshabilitar los siguientes redireccionamientos;

pero la especificación latest ya no menciona esto.

+4

Lo que es ridículo es cuando la redirección transparente implica sobreescribir algunos encabezados HTTP que se establecieron en la solicitud original. Específicamente, si el encabezado "Aceptar" se estableció en un tipo de contenido específico, Firefox no puede incluir este encabezado al seguir el redireccionamiento (lo que hace que sea un poco más difícil desarrollar servicios web completamente basados ​​en REST que usen este encabezado ... queja). – ruquay

+1

Un poco más de búsqueda me trajo este informe de error bastante viejo: https://bugzilla.mozilla.org/show_bug.cgi?id=401564 – ruquay

+1

De acuerdo, defecto de diseño totalmente rediculus. – Rasive

11

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 ejecuta IE en Windows, entonces puede usar WinHTTP en su lugar para establecer una opción para evitar ese comportamiento, pero esa es una solución muy limitante.

12

Puede usar la propiedad responseURL para obtener el destino de la redirección o verificar si la respuesta finalmente fue extraída de una ubicación que usted 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 desea descartar la respuesta.

19

El nuevo Fetch API soporta 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, está listo para irse. También debe tener en cuenta que las solicitudes realizadas a través de esta API no son cancelables yet. Ellos are 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(); 

Usted no recibirá el código de estado, pero se encuentra la nueva URL sin necesidad de descargar toda la página de eso.

+0

A veces el uso de '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 –

Cuestiones relacionadas