在获取请求中设置 Content-Type 不起作用

Posted

技术标签:

【中文标题】在获取请求中设置 Content-Type 不起作用【英文标题】:Setting Content-Type in fetch request not working 【发布时间】:2018-01-21 03:40:09 【问题描述】:

我正在向服务器发出远程获取请求。有效载荷是 JSON 格式,所以我想将 Content-Type 标头更改为 application/json。我使用以下代码来执行此操作:

let email = document.getElementById("email").value
let password = document.getElementById("password").value

const body = "email":email, "password":password
const headers = new Headers(
    "Content-Type": "application/json",
    "Content-Length": JSON.stringify(body).length
)
const options = 
    method: "POST",
    mode: "no-cors",
    headers: headers,
    body: JSON.stringify(body)

console.log(options)
const response = await fetch('http://xx.xx.xx.xxx/login', options)
const json = await response.json()
console.log(json)

但是,在 Chrome 开发者工具控制台中,请求的 Content-Type 标头仍然是 text/plain;charset=UTF-8。我做错了什么?

【问题讨论】:

Fetch: post json data, application/json change to text/plain的可能重复 【参考方案1】:

no-cors 请求不允许覆盖 Content-Type 请求标头。

将模式更改为cors

【讨论】:

当然,如果您有一个不支持 CORS 的端点,这完全没用。 :-( @Quentin 是的。只是意味着解决问题需要额外的东西。例如,代理端点,修改标头。或者更改端点以使其执行 CORS。我选择代理端点而不是接触旧的遗留代码。 :-) Here is the relevant section of the documentation for fetch,表示在使用no-cors 模式时,不能为Content-Type 标头设置application/json 的值。

以上是关于在获取请求中设置 Content-Type 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

在 Spring Reactive 中使用 application.properties 在请求标头中设置 Content-type

如何获得当前的纬度和经度?

在 volley 中设置查询字符串不起作用

如何在 Angular2 中设置全局自定义标头?

请求相关

是否需要在 Node.js 中设置 Content-Type?