80

我正在使用 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

谁能解释为什么我无法设置此属性?

4

2 回答 2

61

您需要创建一个 fetch headers 对象。

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);
}
于 2016-07-15T20:05:04.107 回答
36

看完下面这篇文章,我找到了答案:

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

警卫

由于 headers 可以在请求中发送并在响应中接收,并且对于哪些信息可以并且应该是可变的有各种限制,所以 headers 对象具有保护属性。这不会暴露给 Web,但它会影响 headers 对象上允许的突变操作。

可能的保护值是:

  • none: 默认。
  • requestRequest.headers: 保护从请求 ( ) 中获得的 headers 对象。
  • request-no-cors: 保护从使用创建的请求中获得的标头对象Request.mode no-cors
  • response: 保护从响应中获得的标头 ( Response.headers)。
  • immutable:主要用于ServiceWorkers;将 headers 对象呈现为只读。

注意:您不能附加或设置受request保护的标头的Content-Length标头。同样,不允许插入Set-Cookie响应标头:不允许 ServiceWorkers 通过合成响应设置 cookie。

当“选项模式”属性设置为无主机时,请求标头值是不可变的。

相反,我将 mode 属性设置为 cors。

于 2016-07-02T18:48:22.160 回答