13

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

Я установил тип содержимого приложения/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); 
    } 

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

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

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

ответ

10

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

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

Guard

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

Возможные значения охраны являются:

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

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

Если свойство режима опции установлено значение не-CORS значения заголовка запроса неизменны.

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

4

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

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); 
} 
+0

этот синтаксис работает в порядке 'заголовки: { "Content-Type": "применение/JSON" }' –

+0

@RTS: это не похоже на работу, если включить учетные данные. – user2284570