Sto progettando un'API che consente all'utente di autenticare (utilizzando token) e che contiene reindirizzamenti all'interno dello stesso dominio. Ora, per una richiesta non autenticata a un endpoint che restituisce 303,Richiesta CORS con Preflight e reindirizzamento: non consentito. Soluzioni alternative?
GET /documents/123 --> 303 redirect to `/documents/abc`
GET /documents/abc --> 200
tutto funziona bene.
Facciamo una richiesta autenticata allo stesso endpoint in cui viene inviata l'intestazione Authorization
. Questo rende la richiesta di un preflighted request e il browser fa un OPTIONS
richiesta di verifica preliminare, cioè
OPTIONS /documents/123 --> 204 (everything okay, please proceed)
GET /documents/123 --> 303 redirect to `/documents/abc`
A questo punto, invece di GET
ting risorsa reale al /documents/abc
, il browser ottiene
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.
Questo comportamento è in conformità con the standard:
7.1.5 Cross-origine R equest con verifica preliminare
Se la risposta ha un codice di stato HTTP che non è nel range 2xx
applicare i passaggi di errore di rete.
Questo sembra significare che uno non può fare reindirizza per le risorse autenticate, anche se il redirect è sullo stesso dominio (localhost
).
Questo può essere vero? C'è una soluzione comune?
Che aspetto hanno le intestazioni di risposta? Soprattutto Access-Control-Allow-Headers? – Sam
Per la richiesta di preflight 'OPTIONS', ho' Access-Control-Allow-Headers: Accept, Authorization, Content-Type, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since, Accept-Encoding'. –
Vuoi dire che questo è per l'URL/documenti/abc reindirizzato giusto? – Sam