Необходимо отправить запрос POST с помощью JSON body. Я должен использовать fetch.
Исходный фрагмент кода, который работал:
headers = {'Content-Type': 'application/json'};
body = {path: 'path1'};
fetch(url, {
method: 'post',
headers: headers,
body: JSON.stringify(body)
})
.then(response => {//do work});
Теперь мне нужно добавить Http-Only cookies для A&A.
У этого ссылка на сайт есть ответ на это. По сути, придется добавить еще один параметр.
Впоследствии обновленный код:
fetch(url, {
credentials: 'include',
method: 'post',
headers: headers,
body: JSON.stringify(body)
})
.then(response => {//do work});
Сервер не видит cookie в header.
Затем протестировал fetch, удалив все остальное:
fetch(url, {
credentials: 'include',
method: 'post',
})
.then(response => {//do work});
Часть A&A работает, то есть сервер теперь видит cookie в header. Итак, добавил тело обратно и не верил, что это сработает:
body = {path: 'path1'};
fetch(url, {
credentials: 'include',
method: 'post',
body: JSON.stringify(body)
})
.then(response => {//do work});
Как и ожидалось, это не сработало. Сервер Express с CookieParser показывает, что это тело {}.
После добавления заголовка Content-Type:
body = {path: 'path1'};
fetch(url, {
credentials: 'include',
method: 'post',
headers: {'Content-Type': 'application/json'}
body: JSON.stringify(body)
})
.then(response => {//do work});
Теперь cookie снова исчез. Предполагается, что это из-за добавления нового заголовка и замены заголовка, созданного fetch, который включает cookie. Я ошибся?
Пока я искал, я нашел аналогичный вопрос без ответа.
Как мне продолжить?
Я работаю в React, и я не нашел способа прочитать файлы cookie Http-Only. Поэтому я использую вариант withCredentials. Пожалуйста, дайте мне знать, если я ошибаюсь.
Собственно, только что тестировал с помощью другой библиотеки axios. Такая же ситуация. Если я добавлю body, cookie будет удален. Это стандарт? Если да, то каков обходной путь?
Получаете ли вы какие-либо сообщения в консоли инструментов разработчика браузера? Также подумайте об обновлении вопроса, чтобы отображать заголовки ответов, которые вы получаете от сервера в каждом случае (как показано на панели «Сеть» в devtools) - и, в идеале, также заголовки запросов для каждого случая.
Я понял. Это проблема запроса OPTIONSpreflight. Сервер должен с этим справиться. И браузер отправляет только в том случае, если есть тело или дополнительные заголовки. Если это пустой запрос на получение чего-либо с сервера, OPTIONS не отправляется.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


В
headersвы можете добавить'cookie' : '{cookie}'.