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:
- Emitir redireccionamientos solo para solicitudes simples .
-
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. -
Haz una "redirección" falsa:
-
devuelve HTML con
meta refresh
y / o cambio deLocation
Javascript. -
devuelve HTML que tiene un
iframe
llena la ventanaiframe
con el destino de redireccionamiento como fuente del iframe. - muestra un enlace en el que el usuario debe hacer clic para acceder al contenido.
-
devuelve HTML con