Cómo resolver 'la verificación previa no es válida (redireccionamiento)' o 'la redirección no está permitida para una solicitud de verificación previa'

Resuelto n179911 asked hace 7 años • 6 respuestas

Seguí este paso para configurar mi servidor para habilitar CORS. https://learn.microsoft.com/en-us/aspnet/web-api/overview/security/enabling-cross-origin-requests-in-web-api

Pero ahora, en la consola de desarrollo de mi navegador, veo este mensaje de error:

XMLHttpRequest no puede cargar https://serveraddress/abc . La respuesta para la verificación previa no es válida (redireccionar)

¿Sabes qué puedo hacer para solucionarlo? Estoy realizando una solicitud CORS en HTTPS. Creo que eso está provocando el error "La verificación previa no es válida (redireccionamiento)". Pero no sé por qué ni qué está redirigiendo la solicitud de OPCIONES.

Gracias.

n179911 avatar Feb 11 '17 04:02 n179911
Aceptado

Respuesta corta: asegúrese de que a la URL de solicitud en su código no le falte una barra diagonal.

Un problema de falta de barra diagonal es la causa más común del error citado en la pregunta.

Pero esa no es la única causa, sólo la más común. Siga leyendo para obtener más detalles.

Cuando ve este error, significa que su código está haciendo que su navegador envíe una solicitud de verificación previa de CORSOPTIONS y el servidor responde con una 3xxredirección. Para evitar el error, su solicitud debe obtener una 2xxrespuesta exitosa.

Es posible que pueda ajustar su código para evitar que los navegadores envíen la OPTIONSsolicitud.

En cuanto a lo que sucede en este caso, es importante saber que los navegadores realizan una verificación previa de CORS si:

  • el método de solicitud es cualquier cosa que no sea GET, HEADoPOST
  • ha configurado encabezados de solicitud personalizados distintos de Accept, Accept-Language, Content-Language, Content-Type, DPR, Downlink, Save-Data, Viewport-WidthoWidth
  • el Content-Typeencabezado de la solicitud tiene un valor distinto de application/x-www-form-urlencoded, multipart/form-dataotext/plain

Si no puede cambiar su código para evitar la necesidad de que los navegadores realicen una verificación previa, otra opción es:

  1. Verifique la URL en el Locationencabezado de respuesta en la respuesta a la OPTIONSsolicitud.
  2. Cambie su código para realizar la solicitud directamente a esa otra URL.

La diferencia entre las URL puede ser algo tan simple como una barra diagonal al final de la ruta; por ejemplo, es posible que necesite cambiar la URL en su código para agregar una barra diagonal al final; por ejemplo, ( http://localhost/api/auth/login/observe la barra diagonal final) en lugar de http://localhost/api/auth/login(sin barra diagonal final ). barra diagonal), o es posible que necesites eliminar una barra diagonal final.

Puede utilizar el panel Red en las herramientas de desarrollo del navegador para examinar la respuesta a la OPTIONSsolicitud y encontrar la URL de redireccionamiento en el valor del Locationencabezado de respuesta.


Sin embargo, en algunos casos, todo lo siguiente será cierto:

  • no puedes evitar la verificación previaOPTIONS
  • no puedes realizar ningún ajuste en la URL de solicitud
  • no puedes reemplazar la URL de solicitud con una URL completamente diferente

Un caso común con esas condiciones es cuando intenta trabajar con algún punto final de terceros que requiere un flujo de trabajo OAuth o SSO que no está diseñado para usarse desde el código de interfaz.

En tales casos (en realidad, en todos los casos), lo que es esencial tener en cuenta es que la respuesta a la verificación previa debe provenir del mismo origen al que su código de interfaz envió la solicitud.

Entonces, incluso si creas un proxy del lado del servidor que controlas:

  1. Si su navegador envía una OPTIONSsolicitud de verificación previa a su proxy.
  2. Ha configurado el proxy de modo que simplemente redirija la solicitud a un punto final de terceros.
  3. Por lo tanto, su interfaz termina recibiendo una respuesta directamente desde ese punto final de terceros.

…entonces la verificación previa fallará.

En tal caso, en última instancia, su única alternativa es: asegurarse de que la verificación previa no solo se redirija al punto final de terceros, sino que su propio código del lado del servidor (proxy) reciba la respuesta de ese punto final, la consuma y luego envíe una respuesta. por sí solo de regreso a su código de interfaz.

sideshowbarker avatar Feb 11 '2017 05:02 sideshowbarker

Esto sucede a veces cuando intentas llamar a un servicio https como http , por ejemplo cuando realizas una solicitud en:

' http://ejemplo.com/api/v2/tickets '

Cuál debería ser:

'http s ://ejemplo.com/api/v2/tickets'

Adeojo Emmanuel IMM avatar Sep 27 '2019 08:09 Adeojo Emmanuel IMM