origin habilitar control chrome allow http redirect cors preflight

http - habilitar - cors php



Solicitud CORS con Preflight y redireccionamiento: no permitido. Soluciones alternativas? (1)

Estoy diseñando una API que permite al usuario autenticarse (usando tokens) y que contiene redireccionamientos dentro del mismo dominio. Ahora, para una solicitud no autenticada a un punto final que devuelve 303,

GET /documents/123 --> 303 redirect to `/documents/abc` GET /documents/abc --> 200

todo funciona bien.

Hagamos una solicitud autenticada al mismo punto final donde se envía el encabezado de Authorization . Esto hace que la solicitud sea una solicitud de verificación previa y el navegador realiza una solicitud de OPTIONS verificación previa, es decir

OPTIONS /documents/123 --> 204 (everything okay, please proceed) GET /documents/123 --> 303 redirect to `/documents/abc`

En este punto, en lugar de GET el recurso real en /documents/abc , el navegador produce

XMLHttpRequest cannot load http://localhost:8000/people/username/nschloe. The request was redirected to ''http://localhost:8000/people/YDHa-B2FhMie'', which is disallowed for cross-origin requests that require preflight.

Este comportamiento está de acuerdo con el estándar :

7.1.5 Solicitud de origen cruzado con verificación previa

Si la respuesta tiene un código de estado HTTP que no está en el rango 2xx

Aplicar los pasos de error de red.

Esto parece significar que no se pueden hacer redireccionamientos para recursos autenticados, incluso si la redirección está en el mismo dominio ( localhost ).

¿En serio puede ser verdad? ¿Hay una solución común?


El estándar original impide la redirección después de una verificación previa CORS exitosa. Citando § 7.1.5.3 :

Esta es la solicitud real. Aplique los pasos para realizar una solicitud y observe las reglas de solicitud a continuación mientras realiza la solicitud.

  • Si la respuesta tiene un código de estado HTTP de 301, 302, 303, 307 o 308, aplique los pasos de error de red y caché.

Debido a sus esfuerzos (¡gracias!), El 4 de agosto, el estándar se updated para permitir la redirección después de una verificación previa a CORS exitosa.

Hasta que los navegadores se pongan al día, las únicas opciones posibles parecen ser una o una combinación de:

  1. Emitir redireccionamientos solo para solicitudes simples .
  2. Emita una redirección 305 , con su propia URL en el encabezado de la Location como "proxy". Esté preparado para un soporte de navegador limitado, ya que 305 está en desuso.
  3. Haz una "redirección" falsa:
    • devuelve HTML con meta refresh y / o cambio de Location Javascript.
    • devuelve HTML que tiene un iframe llena la ventana iframe con el destino de redireccionamiento como fuente del iframe.
    • muestra un enlace en el que el usuario debe hacer clic para acceder al contenido.