Как установить тип содержимого заголовка запроса при использовании Fetch APi

Я использую npm 'isomorphic-fetch' для отправки запросов. Проблема, с которой я столкнулся, заключается в том, что я не могу установить тип содержимого заголовка запроса.

Я установил тип содержимого application / json, однако заголовок запроса устанавливается на text / plain.

import 'isomorphic-fetch';

  sendRequest(url, method, body) {
    const options = {
      method: method,
      headers:{'content-type': 'application/json'},
      mode: 'no-cors'
    };

    options.body = JSON.stringify(body);

    return fetch(url, options);
  }

Когда я просматриваю запрос в своем браузере, тип контента - o:

content-type:text/plain;charset=UTF-8

Может ли кто-нибудь объяснить, почему я не могу установить это свойство?


person user1526912    schedule 02.07.2016    source источник


Ответы (2)


Вам необходимо создать объект заголовков выборки.

sendRequest(url, method, body) {
    const options = {
        method: method,
        headers: new Headers({'content-type': 'application/json'}),
        mode: 'no-cors'
    };

    options.body = JSON.stringify(body);

    return fetch(url, options);
}
person RTS    schedule 15.07.2016
comment
этот синтаксис работает нормально headers: { "Content-Type": "application/json" }, - person Stanislav Mayorov; 06.01.2018
comment
@RTS: похоже, это не работает, если вы укажете учетные данные. - person user2284570; 08.02.2018

Я нашел ответ после прочтения следующей статьи:

https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch#Headers

Guard

Поскольку заголовки могут быть отправлены в запросах и получены в ответах и ​​имеют различные ограничения на то, какая информация может и должна быть изменяемой, объекты заголовков имеют свойство защиты. Это не отображается в Интернете, но влияет на то, какие операции изменения разрешены для объекта заголовков.

Возможные защитные значения:

  • none: по умолчанию.
  • request: защита объекта заголовков, полученного из запроса (Request.headers).
  • request-no-cors: защита объекта заголовков, полученного в результате запроса, созданного с помощью Request.mode no-cors.
  • response: защита заголовков, полученных из ответа (Response.headers).
  • immutable: в основном используется для ServiceWorkers; делает объект заголовков доступным только для чтения.

Примечание. Вы не можете добавлять или устанавливать request защищенные заголовки Content-Length. Точно так же нельзя вставлять Set-Cookie в заголовок ответа: ServiceWorkers не могут устанавливать файлы cookie с помощью синтезированных ответов.

Когда для свойства режима параметров установлено значение no-cors, значения заголовка запроса неизменны.

Вместо этого я установил для свойства mode значение cors.

person user1526912    schedule 02.07.2016
comment
да, но когда вы хотите не-корс? Как сказать, что я хочу отправить данные json на конечную точку в другом домене? - person Thanasis Ioannidis; 11.05.2020