Я разрабатываю API, который позволяет пользователю аутентифицироваться (используя токены) и который содержит перенаправления в пределах одного домена. Теперь, для неавторизованного запроса к конечной точке, которая возвращает 303,
GET /documents/123 --> 303 redirect to `/documents/abc`
GET /documents/abc --> 200
все работает хорошо.
Проделайте аутентифицированный запрос к той же конечной точке, где отправляется заголовок Authorization
. Это делает запрос предполетным запросом, и браузер выполняет предпросмотр OPTIONS
, т.е.
OPTIONS /documents/123 --> 204 (everything okay, please proceed)
GET /documents/123 --> 303 redirect to `/documents/abc`
В этот момент вместо GET
ting фактического ресурса в /documents/abc
браузер дает
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.
Это соответствует стандарту:
7.1.5 Запрос на перекрестный запрос с предполетью
Если ответ имеет код состояния HTTP, который не находится в диапазоне 2xx
Примените шаги сетевой ошибки.
Это, по-видимому, означает, что нельзя перенаправлять для аутентифицированных ресурсов, даже если перенаправление находится в одном домене (localhost
).
Неужели это правда? Существует ли общее обходное решение?