content-type: application/json

标题的解释

用了这么一个字符串当标题,是希望能后帮助到遇到相关问题的人.

问题描述

有这么一个接口,postman(或其他API测试工具)能够跑通,但是从浏览器的前端代码里发出去就错了,服务器报500,那么很有可能遇到了这个问题:content-type的设置和服务器期望的不一样.

现在后端通常会希望获取到json格式的数据,所以通常请求的headers里要设置content-type:application/json

headers: {
    "Content-Type": "application/json",
}

一般来说这么做是没有问题的,但是就怕忘了设置header,又多此一举的改变了body中数据的类型:

fetch('url', {
    method: 'POST',
    body: JSON.stringify({
        xxx:xxx,
    }),
})

就是这么多此一举,

后端希望得到json, 于是我自己将post数据的body变成了一个json字符串,同时我又忘记设置了header的content-type,会出现什么呢?从开发者工具看到请求的header里的content-type变成了text/plain,所以服务器拿不到数据json,和期望的数据不同,自然就很有可能跑挂了,报500的可能性就很大了.

其实浏览器是很智能的.

如果没有设置header的conten-type, 在body中传递了对象

fetch('url', {
    method: 'POST',
    body: {
        xxx:xxx,
    },
})

浏览器会自动将content-type改成application/json,

如果是用了formdata

const body = new FormData()
body.append('xxx', 'xxx')
fetch('url', {
    method: 'POST',
    body,
})

浏览器也可以很好的识别出请求的content-type,

所以如果可以的话, 尽量不要自己设置这个字段了,用正确的数据类型去告诉浏览器要用什么content-type就可以了

  • 25
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Content-Type: application/json是用于设置请求头的内容类型,它指示服务端请求或响应中的消息主体是序列化的JSON字符串。 在后端通常会希望获取到JSON格式的数据时,需要设置该Content-Type头部,例如:headers: { "Content-Type": "application/json" }。 通过设置Content-Type: application/json,可以方便地传递复杂多层次的对象,并将其序列化为JSON字符串。 需要注意的是,Content-Type头部不仅在请求中用于指示请求的消息主体类型,也在响应中用于指示响应的消息主体类型。当从服务端下载文件时,可以通过检查响应头中的Content-Type来确定返回的文件类型。 总结来说,Content-Type: application/json是一种常用的标识,用于指示请求或响应的消息主体是JSON格式的数据。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [content-type: application/json](https://blog.csdn.net/aa3115386/article/details/79616794)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [三种常见Content-Type格式,最后一种你肯定用过](https://blog.csdn.net/weixin_45809580/article/details/123671085)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值