Cors request with Preflight and redirect: disallowed. Obejścia?
Projektuję API, które pozwala użytkownikowi na uwierzytelnianie (za pomocą tokenów) i które zawiera przekierowania w tej samej domenie. Teraz, dla nieautoryzowanego żądania do punktu końcowego, który zwraca 303,
GET /documents/123 --> 303 redirect to `/documents/abc`
GET /documents/abc --> 200
Wszystko ładnie się układa.
Wykonajmy uwierzytelnione żądanie do tego samego punktu końcowego, do którego wysyłany jest nagłówek Authorization
. To sprawia, że żądanie jest preflighted request, a przeglądarka wykonuje preflight OPTIONS
request, czyli
OPTIONS /documents/123 --> 204 (everything okay, please proceed)
GET /documents/123 --> 303 redirect to `/documents/abc`
W tym momencie, zamiast z GET
ting rzeczywistego zasobu w /documents/abc
, przeglądarka daje
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.
To zachowanie jest zgodne z standardem :
7.1.5 zapytanie krzyżowe z inspekcją wstępną
Jeśli odpowiedź ma kod statusu HTTP, który nie znajduje się w zakresie 2xx
Zastosuj kroki błędu sieci.
Wydaje się to oznaczać, że jeden nie może robić przekierowań dla uwierzytelnionych zasobów, nawet jeśli przekierowanie znajduje się w tej samej domenie (localhost
).
1 answers
Oryginalny standard nie wyklucza przekierowania po udanej inspekcji wstępnej CORS. cytowanie § 7.1.5.3:
To jest rzeczywiste żądanie. Zastosuj kroki zgłoś żądanie i przestrzegaj poniższych zasad podczas składania żądania.
Jeśli odpowiedź ma kod statusu HTTP 301, 302, 303, 307 lub 308 Zastosuj kroki błędu pamięci podręcznej i sieci.
Dzięki twoim wysiłkom (dzięki!), 4 sierpnia standard został zaktualizowany aby umożliwić przekierowanie po pomyślnym sprawdzeniu wstępnym Kors.
Dopóki przeglądarki nie nadrobią zaległości, jedyną możliwą opcją wydaje się być jedna lub kombinacja:
- problem przekierowuje tylko dla prostych żądań.
- Wydaj 305 przekierowanie , z własnym adresem URL w nagłówku
Location
jako "proxy". Przygotuj się na ograniczoną obsługę przeglądarki, ponieważ 305 jest przestarzały. - zrób fałszywe "przekierowanie":
- return HTML with
meta refresh
and / or JavascriptLocation
zmiana. - zwraca HTML, który ma viewport-filling {[3] } z celem redirect jako źródłem iframe.
- wyświetla link, który użytkownik musi kliknąć, aby uzyskać dostęp do treści.
- return HTML with
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-27 15:10:13