Заголовок «Авторизация» не отправляется браузером при вызове OPTIONS - PullRequest
0 голосов
/ 29 августа 2018

У меня очень простой HTTP-вызов:

fetch('http://127.0.0.1:5500/v1/homes/', {
  method: "GET", 
  mode: "cors", 
  credentials: "same-origin", 
  headers: {
     Authorization: "TEST"
  }})
  .then(function(response) {
    console.log(response);
  });

Но когда я просматриваю вкладку «Сети» в Google Chrome DevTools, в запросе OPTIONS отсутствует заголовок «Авторизация». Это приводит к тому, что сервер отвечает 401 Unauthorized.

Браузерный эквивалент запроса:

curl 'http://127.0.0.1:5500/v1/homes/' \
-X OPTIONS -H 'Access-Control-Request-Method: GET' \
-H 'Origin: http://localhost:8100'
-H 'Referer: http://localhost:8100/'
-H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
-H 'Access-Control-Request-Headers: authorization'
--compressed

Я делаю что-то не так на стороне клиента или довольно часто браузеры не отправляют заголовок авторизации в запросе OPTIONS, и поэтому мне нужно изменить сервер таким образом, чтобы он отвечал на вызов OPTIONS без заголовка авторизации

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Клиент запрашивает Options вызов, в вашем случае браузер Chrome неявно до фактического вызова GET.

От MDN

Метод HTTP OPTIONS используется для описания параметров связи для целевого ресурса. Клиент может указать URL для ОПЦИИ метод или звездочка (*) для обозначения всего сервера.

На стороне сервера вам придется перехватить этот запрос параметров и ответить кодом состояния HTTP 200 и заголовком Allow, указывающим операции, разрешенные для этого ресурса. например: Allow: HEAD,GET,PUT,DELETE,OPTIONS

Браузер при получении этих данных затем продолжит вызов Get.

0 голосов
/ 29 августа 2018

довольно часто браузеры не отправляют заголовок авторизации в запросе OPTIONS

Больше, чем обычно. Для требуется спецификация CORS , которая гласит: " для перекрестного запроса с предварительной проверкой ... сделать предварительный запрос ... Исключить учетные данные пользователя ".

Мне нужно изменить сервер таким образом, чтобы он отвечал на вызов OPTIONS без заголовка авторизации?

Да

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...