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)?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top