Как получить токен из заголовков ответа в js?

Здравствуйте! Делаю fetch запрос на сервер для получения токена, запрос проходит успешно со статусом 200, но выдает ошибку корс. Далее сделал запрос отключив корс на стороне клиента mode: no-cors (так как на стороне сервера корс отключен и другие запросы успешно отправляются на сервер без каких либо проблем, проблемы были только с этим запросом), теперь уже ошибки корс нету, запрос прошел успешно, статус такой же (200) в браузере, если посмотреть на запрос, то виден и сам токен, который находится в заголовках, данный запрос не содержит ответа только заголовки, но когда пытаюсь получить заголовки в js (response) то там нету ни одного заголовка (все со значением null) и статус запроса 0 и поле ok со значением false.

const res = await fetch('url/Token', {
           method: "POST",
           mode: 'no-cors',
           headers: {
              'Content-Type': 'application/x-www-form-urlencoded'
           },
           body: new URLSearchParams(obj)
})

console.log(res);

64ec4e881bde1714806919.png
64ec4e995e9c3551711194.png
  • Вопрос задан
  • 167 просмотров
Решения вопроса 1
Aetae
@Aetae Куратор тега JavaScript
Тлен
1. no-cors на клиенте это не "отключение cors", иначе не было никакого смысла в cors, это метка "мне похрен на ответ, я просто отправляю". Соответственно с такой меткой ты не можешь читать ответ никак.
2. Если при обычном запросе возникакет ошибка cors - значет сервер не посылает allow-* заголовков и cors не разрешён.
3. Заголовок Set-Cookie ставит, очевидно, cookie. Напрямую его читать в любом случае нельзя.
3.1. Но можно читать поставленную cookie
3.1.1. Но читать её можно только на том домене доя которого она поставлена.
3.1.2. Читать её можно только если она не (как в данном случае) HTTP-only.
5. Возможно вам и не нужно ничего ни откуда доставать: HTTP-only куки передаются браузером в запросе самостоятельно, из скрипта к ним доступа нет. Однако он и не нужен. Отправляйте все запросы с credentials: "include" и значение автоматически будет присутствовать в заголовке Cookie..
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Paul14
Здравствуйте! Вы столкнулись с некоторыми проблемами, связанными с запросами между разными доменами.

В первом случае, когда вы не отключили CORS на стороне клиента, браузер блокирует получение ответа из-за политики безопасности Same-Origin Policy.

Во втором случае, когда вы отключили CORS на стороне клиента с помощью 'no-cors' режима, запрос можно отправить успешно, но вы не сможете получить доступ к ответу из-за ограничений этого режима.

При использовании 'no-cors' режима, доступны только определенные типы ответов, например, получение заголовков ответа (headers) и статуса (status), но вы не сможете получить доступ к содержимому ответа.

В вашем случае, вы сможете получить только заголовки ответа с помощью res.headers, но содержимое ответа (токен) будет недоступно.

Чтобы решить эту проблему, вам необходимо разрешить CORS запросы на стороне сервера для этого маршрута (url/Token), чтобы получить доступ к ответу в соответствии с политикой безопасности браузера.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы