Blogger Information
Blog 25
fans 0
comment 0
visits 42130
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
HTTP之Content-Type小结
程先生的博客
Original
1280 people have browsed it

HTTP请求中的Content-Type是用来指定请求或者响应的内容类型,告诉浏览器或者相关设备如何显示或处理加载的数据,此属性的值可以查看MIME(Multipurpose Internet Mail Extensions,多用途互联网邮件扩展)的类型。


句法

Content-Type: text/html; charset=utf-8
Content-Type: multipart/form-data; boundary=something

上面列的两个Content-Type是通用的句法结构:
1)text/html,是指请求的media-type,他分为两个部分type和subtype,以“/”进行分割; 常见的type有:

Text:用于标准化地表示的文本信息,文本消息可以是多种字符集和或者多种格式的;
Multipart:用于连接消息体的多个部分构成一个消息,这些部分可以是不同类型的数据;
Application:用于传输应用程序数据或者二进制数据;
Message:用于包装一个E-mail消息;
Image:用于传输静态图片数据;
Audio:用于传输音频或者音声数据;
Video:用于传输动态影像数据,可以是与音频编辑在一起的视频数据格式。

常见的media-type有:

text/html
application/x-www-form-urlencoded
application/json
multipart/form-data
application/xml
text/plain
text/css
text/javascript

2)charset:是指定字符编码的标准,常见的有"ISO-8859-1"、"UTF-8"、"GB2312“,”ASCII“等;
3)boundary:多用于上传文件时使用,用于分割数据;


几种常见的Content-Type

application/x-www-form-urlencoded

application/x-www-form-urlencoded主要用于表单形式的POST请求中,如普通的表单提交,或者js发包,默认都是通过这种方式,可以使用Postman来发一个这种类型请求:



这是一个添加购物车的请求,如上图,在body部分我们传入form表单的Key/Value对,得到添加成功的JSON响应。
如果在如果对请求抓包可以看到request头部信息如下

Accept:*/*
Accept-Encoding:gzip, deflate, br
Accept-Language:zh-CN,zh;q=0.9
Connection:keep-alive
Content-Length:90
Content-Type:application/x-www-form-urlencoded

body的内容如下:

Form Data:number=1&goodsId=1405140&skuId=1405140-68a3e5516d7a7dc21fbe0e7ee13bfc1c&innerSource=DETAIL

application/json

application/json是POST请求以JSON的格式向服务请求发起请求或者请求返回JSON格式的响应内容,服务端接受到数据后对JSON进行解析拿到所需要的参数,同样适用Postman模拟一个请求:


上面发送一个修改购物车的请求,如上图,可以看到请求发送的body是一个JSON串,其实也就是一串字符串指定用JSON的方式去进行解析,application/json是用的比较多的请求body中的传参方式。
对上述请求抓包看到的request头部信息如下

Accept:application/json
Accept-Encoding:gzip, deflate, br
Accept-Language:zh-CN,zh;q=0.9
Connection:keep-alive
Content-Length:212
Content-Type:application/json

body的内容如下:

{"comboId":" ","goodsList":[{"goodsId":1372308,"skuId":"1372308-228f0bba1bd1b7241353429cebd7c88b","isHuanGou":0,"selected":1,"count":2,"cartGoodsType":0,"activitySchemeId":111873,"goodsActivityGiftListTemp":[]}]}

multipart/form-data

multipart/form-data是使用POST请求上传文件,如果上传照片,文件等,由于很多情况下都会有批量上传,为了区分不同的数据,multipart/form-data的类型有boundary参数进行分割,对上传文件请求抓包,request头部信息如下:

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding:gzip, deflate
Accept-Language:zh-CN,zh;q=0.9
Cache-Control:max-age=0
Content-Length:352
Content-Type:multipart/form-data; boundary=----WebKitFormBoundary6vbO2Ze9EuGIrtTA

body内容如下:

------WebKitFormBoundary18bktajg65CSIx4j
Content-Disposition: form-data; name="files"; filename="test1.txt"
Content-Type: text/plain

this is file1;
------WebKitFormBoundary18bktajg65CSIx4j
Content-Disposition: form-data; name="files"; filename="test2.txt"
Content-Type: text/plain

this is file2;
------WebKitFormBoundary18bktajg65CSIx4j--

上面请求是上传了两个文件,分别是test1.txt和test2.txt,文件内容分别是“this is file1;”和“this is file2;”可以看到两个文件由于是文本,Content-Type为text/plain,Content-Disposition中包含name和filename属性,name是form表单提交内容里的name属性,文件之间有“------WebKitFormBoundary18bktajg65CSIx4j”这样一串字符隔开,这串字符就是boundary分割符,字符串随机生成不会与文本内容重复。

上面介绍了几个常见的Content-Type,平时在测试过程中需要写脚本模拟HTTP请求,一定要注意填充headers信息时要保证Content-Type与请求抓包时保持一致,否则就有可能出现你发送的内容是form表单,但是以JSON的形式解析,这样结果肯定就会出错了。



Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post