JavaScript fetch无法设置Content-Type为application/json问题求助
问题原因与解决方案
这是浏览器在mode: "no-cors"模式下的强制限制,和requestcatcher平台无关。
当你设置mode: "no-cors"发起请求时,浏览器会将该请求归类为简单请求,这类请求对自定义请求头有严格限制:
- 仅允许设置少数安全的请求头,比如
Accept、Accept-Language等 Content-Type仅允许三个值:application/x-www-form-urlencoded、multipart/form-data、text/plain
你设置的application/json不在允许的Content-Type列表里,所以浏览器会自动将其替换为默认的text/plain;charset=UTF-8;而Accept头不在限制范围内,因此能正常被接收。
解决办法
- 优先方案:如果目标API支持CORS,直接移除
mode: "no-cors"配置,这样浏览器就不会限制你设置application/json请求头,示例代码修改后如下:
fetch("https://example.requestcatcher.com", { method: "POST", headers: new Headers({ "Accept":"application/json", "Content-Type":"application/json" }), body: "{}" });
- 替代方案:如果必须使用
no-cors模式,只能改用浏览器允许的Content-Type值,或者通过后端代理转发请求(后端不受浏览器的CORS规则限制)。
内容的提问来源于stack exchange,提问作者user9214088
相关产品推荐
相关产品推荐

