TA的每日心情 | 无聊 昨天 09:34 |
---|
签到天数: 1052 天 连续签到: 2 天 [LV.10]测试总司令
|
在HTTP的请求头中,可以使用Content-type来指定不同格式的请求信息。
Content-type的类型
常见的媒体格式类型:
text/html:HTML格式
text/plain:纯文本格式
text/xml:XML格式
image/gif:gif图片格式
image/jpeg:jpg图片格式
image/png:png图片格式
以applicaton开头的没提类型:
application/json:JSON数据格式
application/xhtml+xml:XHTML格式
application/xml:XML数据格式
application/atom+xml:Atom XML聚合格式
application/pdf:pdf格式
application/javascript:js格式
application/msword:Word文档格式
application/octet-stream:二进制流数据(如常见的文件下载)
application/x-www-form-urlencoded:form表单默认的数据格式类型,form表单数据被编码为key/value格式发送到服务器。
另外一种常见的媒体格式是上传文件之时使用的:
multipart/form-data:需要在表单中进行文件上传时,就需要使用该格式。
除了原生的content-type,开发人员也可以完全自定义数据提交格式!
最常用的三种:
application/x-www-form-urlencoded,form表单默认的数据格式,提交的数据按照 key1=val1&key2=val2 的方式进行编码,key 和 val 都进行了 URL 转码。大部分服务端语言都对这种方式有很好的支持。比如下面的http请求格式:
- # Request Headers
- POST /adduser HTTP/1.1
- Host: localhost:8030
- Connection: keep-alive
- Content-Length: 16
- Pragma: no-cache
- Cache-Control: no-cache
- Origin: chrome-extension://fdmmgilgnpjigdojojpjoooidkmcomcm
- User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36
- Content-Type: application/x-www-form-urlencoded
- Accept: */*
- Accept-Encoding: gzip, deflate, br
- Accept-Language: zh-CN,zh;q=0.9
- # Form Data
- name=name&age=11
复制代码 application/json,现在越来越多的人把它作为请求头,用来告诉服务端消息主体是序列化后的 JSON 字符串。服务端语言也有很多函数去解析JSON,使用JSON可以支持更加复杂的结构化数据。比如下面的http请求格式:
- # Request Headers
- POST /adduser HTTP/1.1
- Host: localhost:8030
- Connection: keep-alive
- Content-Length: 24
- Pragma: no-cache
- Cache-Control: no-cache
- Origin: chrome-extension://fdmmgilgnpjigdojojpjoooidkmcomcm
- User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36
- Content-Type: application/json
- Accept: */*
- Accept-Encoding: gzip, deflate, br
- Accept-Language: zh-CN,zh;q=0.9
- # Request Payload
- {"name":"121","age":121}
复制代码 multipart/form-data,对用于在表单中上传文件时,也可以上传普通数据,只需要让from的ectyle等于multipart/form-data就可以了。比如下面的http请求格式:
- # Request Header
- POST /adduser HTTP/1.1
- Host: localhost:8030
- Connection: keep-alive
- Content-Length: 232
- Pragma: no-cache
- Cache-Control: no-cache
- Origin: chrome-extension://fdmmgilgnpjigdojojpjoooidkmcomcm
- User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36
- Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryBRi81vNtMyBL97Rb
- Accept: */*
- Accept-Encoding: gzip, deflate, br
- Accept-Language: zh-CN,zh;q=0.9
- # Request Payload
- ------WebKitFormBoundaryBRi81vNtMyBL97Rb
- Content-Disposition: form-data; name="name"
- name1
- ------WebKitFormBoundaryBRi81vNtMyBL97Rb
- Content-Disposition: form-data; name="age"
- 12
- ------WebKitFormBoundaryBRi81vNtMyBL97Rb--
复制代码 这种格式的数据会有一个边界线boundary(这里就是------WebKitFormBoundaryBRi81vNtMyBL97Rb)用于分割不同的字段,为了避免与正文内容重复,boundary很长很复杂。消息主体以boundary开始,紧接着就是内容描述信息,然后是回车,最后是字段具体的内容(文本或二进制)。如果传输的是文件,还要包含文件名和文件类型信息。消息主体以boundary结束。
Request Headers部分各个字段的功能
通过上面的例子,我们可以看到在Request Headers里面以后很多字段,比如Content-type,Host这些,那么这些字段又有什么意思呢,下面通过表格来介绍一下:
拓展知识:
User-Agent里面包含了浏览器客户端的信息,比如:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36
通过这个信息可以看到使用的是Chrome浏览器,内核是Apple的WebKit。
其实前世界上主要有来自四个不同机构的四种的Web浏览器内核。每一家机构都推出了至少一种使用自己的内核的浏览器产品。
这四家机构分别是Microsoft、Mozilla、Apple和Opera SAS,提供的内核则分别叫做Trident、Gecko、WebKit和Presto,推出的主打浏览器则分别叫做Internet Explorer、Firefox、Safari和Opera。我们最常使用的Chrome浏览器就是用的苹果公司的Webkit。国内的一些浏览器也是基于webkit内核的,其所谓的双核中的极速模式就是webkit内核,兼容模式就是ie的trident内核。
Response Headers部分各个字段的功能
Request Headers是请求头,Response Headers是响应头,同样,它也包含了一些字段信
|
|