目录
一、概述
二、介绍一些常用字段
三、传输实体的一些属性
1、传输的数据类型
2、实体的语言类型和编码
3、编码类型
四、文件类型和压缩编码字段
1、Accept
2、Content-Type
3、Accept-Encoding
4、Content-Encoding
五、语言类型和编码字段
1、Accept-Language
2、Content-Language
3、Accept-Charset
4、charset="xxx"
六、q表示的优先级
七、Vary协商字段
八、HTTP传输大文件的方法和相关字段
1、压缩
2、分块传输
3、范围请求
4、多段数据传输
一、概述:
对HTTP报文的处理就是对首部字段的处理,理解了头部字段就是理解了HTTP。
二、介绍一些常用字段:
- Host:请求字段,给出了接收请求的服务器的主机名和端口号;
- User-Agent:请求字段,将发起请求的应用程序名称告知服务器;
- Date:通用字段,通常出现在响应报文里;
- Server:响应字段,服务器应用程序的名称和版本;
- Content-Length:报文里body的长度;
三、传输实体的一些属性:
1、传输的数据类型:
MIME type:被传输的基本媒体类型;
相关字段:Accept, Content-Type;
常用类型:
text (纯文本类型):
- text/html:html类型
- text/plain:纯文本类型
- text/css:样式表
image (图像文件):
- image/gif: gif格式的图像
- image/jpeg:jpeg格式的图像
- image/png:png格式的图像
application(数据格式不固定,可能是文本也可能是二进制,必须由上层应用程序来解释):
- application/json:json格式的数据
- application/javascript:js文件
- application/pdf:pdf格式的文件
- application/octet-stream:不透明的二进制数据
注意:Content-Type 说明的是原始实体的媒体类型,即未被编码之前的实体主体类型。
2、实体的语言类型和编码:
相关字段:Accept-Language,Content-Language
语言类型(人类使用的自然语言):
- en : 英语
- en-US : 美式英语
- en-GB : 英式英语
- zh-CN : 常用汉语
编码(字符编码,用于处理文字):
3、编码类型:
为了节约带宽,常会将大型数据进行压缩传输。
相关字段:Content-Encoding,Accept-Encoding
常用压缩格式:
- gzip: GUN zip 压缩格式
- deflate: zlib(deflate)
- br:专为HTTP优化的新压缩算法
四、文件类型和压缩编码字段:
两个Accept 和 Content 字段
Accept:客户端表示要接受的数据相关的属性;
Content: 服务端表示传输给客户端的数据类型;
1、Accept:
标记的是客户端可理解的MIME type,可以用","做分隔符,
例如:
Accept: text/html,application/xml,image/webp,image/png
表示可以接受:HTML、xml的文件,还有webp和png的图片。
2、Content-Type:
服务器在响应头里告知客户端数据的真实类型。
例如:
Content-Type:text/html
Content-Type:image/png
3、Accept-Encoding:
标记客户端支持的压缩格式,格式同Accept字段。
4、Content-Encoding:
服务端告知客户端实体数据实际的压缩编码类型。
注意:在客户端POST请求中,Accept都为Content字段
五、语言类型和编码字段:
两个Accept,一个Content,一个charset=”xxx“
1、Accept-Language:
客户端可理解的自然语言。
例如:
Accept-Language: zh-CN,zh-en
2、Content-Language:
服务端告知客户端实体数据的实际语言。
例如:
Content-Language:zh-CN
3、Accept-Charset:
客户端接收的编码类型
例如:
Accept-Charset:gbk,utf-8
4、charset="xxx":
注意:响应字段必须为:Content-Type中用charset=”xxx“表示。
例如:
Content-Type : text/html;charset=utf-
六、q表示的优先级:
HTTP中,可在Accept,Accept-Encoding,Accept-Language 等请求字段加一个 q (质量)参数说明编码的优先级。
- q 从0.0 到 1.0
- 0.0:表示客户端不想接受所说明的编码
- 1.0:表示客户端最想接受的编码类型。
例如:
Accept:text/html,application/xml;q=0.9,*/*;q=0.8
七、Vary协商字段:
响应报文,记录服务器在内容时参考的请求字段:
例如:
Vary:Accept-Encoding,User-Agent,Accept
表示服务器依据了Accept-Encoding,User-Agent和Accept这三个字段,然后决定了发回的响应报文。
八、HTTP传输大文件的方法和相关字段:
1、压缩:
见前文。
2、分块传输:
将大文件拆开分解成多个小块
相关字段:Transfer-Encoding
告知接收方为了可靠地传输报文,已经对其进行了编码。
例如:
Transfer-Encoding:chunked
表示报文中地body是分块逐步发送。
注意:Transfer-Encoding 和 Content-Length 是互斥地(不能同时出现)。
3、范围请求:
表示可以获取一个文件中的某一些分段的数据。
相关字段:
Range:客户端字段,属性:bytes=x-y
(x-y表示数据的范围)
Accept-Ranges:bytes
对于服务器来说,范围请求的功能不是必须的,所以服务器需要在响应报文中包含此字段告知客户端。
当服务器接收到Rnge字段后,它的动作是:
- 检查是否越界;
- 若范围正确,就根据Range中的属性计算偏移段,返回状态码:”206 Partial Content“
- 服务器里添加一个响应头字段:Content-Range(告知片段的实际偏移量和资源的总量),格式:bytes x-y/length
- 通过TCP将数据发送给客户端
4、多段数据传输:
在一次传输中,可以传输多段分段的数据。
相关字段:
请求:
Range字段,用逗号分隔;
例如:
Range: bytes=0-9, 20-29
响应:
Content-Type字段
属性:
multipart/byteranges:表示报文的 body 是由多段字节序列组成的
boundary: 给出段之间的分隔标记
例如:
Content-Type: multipart/byteranges; boundary=00000000001
“- -00000000001”就是多段的分隔符
参考资料:
1.《HTTP权威指南》
2.极客时间专栏-透视HTTP协议
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)