HTTP协议解析协议结构和HTTP头Word文件下载.docx
《HTTP协议解析协议结构和HTTP头Word文件下载.docx》由会员分享,可在线阅读,更多相关《HTTP协议解析协议结构和HTTP头Word文件下载.docx(12页珍藏版)》请在冰豆网上搜索。
text\html,也就是首部字段:
首部字段值这样子的结构。
另外如果首部字段有多个值是则用都好隔开。
Keep-Alive:
timeout=15,max=100
2.首部字段的类型
HTTP首部字段根据实际用途被分为以下4种类型。
通用首部字段(GeneralHeaderFields)
请求报文和响应报文两方都会使用的首部。
请求首部字段(RequestHeaderFields)
从客户端向服务器端发送请求报文时使用的首部。
补充了请求的附加内容、客户端信息、响应内容相关优先级等信息。
响应首部字段(ResponseHeaderFields)
从服务器端向客户端返回响应报文时使用的首部。
补充了响应的附加内容,也会要求客户端附加额外的内容信息。
实体首部字段(EntityHeaderFields)
针对请求报文和响应报文的实体部分使用的首部。
补充了资源内容更新时间等与实体有关的信息。
通用首部字段
首部字段名称说明
Cache-Control控制缓存的行为
Connection逐跳首部、链接的管理
Date报文的创建日期时间
Pragma报文指令
Trailer报文末端的首部一览
Transfer-Encoding指定报文主体的传输编码方式
Upgrade升级为其他协议
Via代理服务器的相关信息
Warning错误通知
请求首部字段
首部字段名说明
Accept用户代理可处理的媒体类型
Accept-Charset优先的字符集
Accept-Encoding优先的内容编码
Accept-Language优先的语言(自然语言)
AuthorizationWeb认证信息
Expect期待服务器的特定行为
From用户的电子邮箱地址
Host请求资源所在服务器
If-Match比较实体标记(ETag)
If-Modified-Since比较资源的更新时间
If-None-Match比较实体标记(与If-Match相反)
If-Range资源未更新时发送实体Byte的范围请求
If-Unmodified-Since比较资源的更新时间(与If-Modified-Since相反)
Max-Forwards最大传输逐跳数
Proxy-Authorization代理服务器要求客户端的认证信息
Range实体的字节范围请求
Referer对请求中URI的原始获取方
TE传输编码的优先级
User-AgentHTTP客户端程序的信息
响应首部字段
Accept-Ranges是否接受字节范围请求
Age推算资源创建经过时间
ETag资源的匹配信息
Location令客户端重定向至指定URI
Proxy-Authenticate代理服务器对客户端的认证信息
Retry-After对再次发起请求的时机要求
ServerHTTP服务器的安装信息
Vary代理服务器缓存的管理信息
WWW-Authenticate服务器对客户端的认证信息
实体首部字段
Allow资源可支持的HTTP方法
Content-Encoding实体主体适用的编码方式
Content-Language实体主体的自然语言
Content-Length实体主体的大小(单位:
字节)
Content-Location替代对应资源的URI
Content-MD5实体主体的报文摘要
Content-Range实体主体的位置范围
Content-Type实体主体的媒体类型
Expires实体主体过期的日期时间
Last-Modified资源的最后修改日期时间
3.End-to-end首部和Hop-by-hop首部
端到端首部(End-to-endHeader)
分在此类别中的首部会转发给请求/响应对应的最终接收目标,且必须保存在由缓存生成的响应中,另外规定它必须被转发。
逐跳首部(Hop-by-hopHeader)
分在此类别中的首部只对单次转发有效,会因通过缓存或代理而不再转发。
HTTP/1.1和之后版本中,如果要使用hop-by-hop首部,需提供Connection首部字段。
下面列举了HTTP/1.1中的逐跳首部字段。
除这8个首部字段之外,其他所有字段都属于端到端首部。
•Connection
•Keep-Alive
•Proxy-Authenticate
•Proxy-Authorization
•Trailer
•TE
•Transfer-Encoding
•Upgrade
三、首部字段详解
1.通用首部字段
(1)Cache-Control缓存指令
通过指定首部字段Cache-Control的指令,就能操作缓存的工作机制,指令的参数是可选的,多个指令之间通过“,”分隔。
首部字段Cache-Control的指令可用于请求及响应时。
请求时的指令
响应时的指令
关于缓存的扩展阅读:
简单介绍了浏览器缓存、网关/代理服务器缓存、页面缓存、数据缓存、数据库缓存、反向代理缓存
(2)Connection
Connection的两个作用控制不再转发给代理的首部字段,管理持久连接。
1.控制不再转发给代理的首部字段:
在客户端发送请求和服务器返回响应内,使用Connection首部字段,可控制不再转发给代理的首部字段(即Hop-by-hop首部)。
Connection:
不再转发的首部字段名
2.管理持久连接:
HTTP/1.1版本的默认连接都是持久连接。
为此,客户端会在持久连接上连续发送请求。
当服务器端想明确断开连接时,则指定Connection首部字段的值为Close。
Connection:
Keep-Alive为持久化连接。
(3)Date
首部字段Date表明创建HTTP报文的日期和时间。
(4)Pragma
与Cache-Control字段差不多,在http1.1以后不推荐使用。
(5)Trailer
首部字段Trailer会事先说明在报文主体后记录了哪些首部字段。
该首部字段可应用在HTTP/1.1版本分块传输编码时。
指定首部字段Trailer的值为Expires,在报文主体之后(分块长度0之后)出现了首部字段Expires。
(6)Transfer-Encoding
首部字段Transfer-Encoding规定了传输报文主体时采用的编码方式。
HTTP/1.1的传输编码方式仅对分块传输编码有效。
(7)Upgrade
首部字段Upgrade用于检测HTTP协议及其他协议是否可使用更高的版本进行通信,其参数值可以用来指定一个完全不同的通信协议。
(8)Via
使用首部字段Via是为了追踪客户端与服务器之间的请求和响应报文的传输路径。
(9)Warning
告知用户一些与缓存相关的问题的警告。
Warning:
[警告码][警告的主机:
端口号]“[警告内容]”([日期时间])
HTTP/1.1定义了7种警告码:
2.请求首部字段
请求首部字段是从客户端往服务器端发送请求报文中所使用的字段,用于补充请求的附加信息、客户端信息、对响应内容相关的优先级等内容。
(1)Accept
Accept首部字段可通知服务器,用户代理能够处理的媒体类型及媒体类型的相对优先级。
可使用type/subtype这种形式,一次指定多种媒体类型。
•文本文件
text/html,text/plain,text/css...
application/xhtml+xml,application/xml...
•图片文件
image/jpeg,image/gif,image/png...
•视频文件
video/mpeg,video/quicktime...
•应用程序使用的二进制文件
application/octet-stream,application/zip...
(2)Accept-Charset
Accept-Charset首部字段可用来通知服务器用户代理支持的字符集及字符集的相对优先顺序。
另外,可一次性指定多种字符集。
与首部字段Accept相同的是可用权重q值来表示相对优先级。
(3)Accept-Encoding
Accept-Encoding首部字段用来告知服务器用户代理支持的内容编码及内容编码的优先级顺序。
一般的编码形式有:
gzip,compress,deflate,identity
(4)Accept-Language
首部字段Accept-Language用来告知服务器用户代理能够处理的自然语言集(指中文或英文等),以及自然语言集的相对优先级。
可一次指定多种自然语言集。
(5)Authorization
首部字段Authorization是用来告知服务器,用户代理的认证信息(证书值)。
通常,想要通过服务器认证的用户代理会在接收到返回的401状态码响应后,把首部字段Authorization加入请求中。
(6)Expect
客户端使用首部字段Expect来告知服务器,期望出现的某种特定行为。
(7)From
首部字段From用来告知服务器使用用户代理的用户的电子邮件地址。
(8)Host
首部字段Host会告知服务器,请求的资源所处的互联网主机名和端口号。
Host首部字段在HTTP/1.1规范内是唯一一个必须被包含在请求内的首部字段。
(9)If-Match
形如If-xxx这种样式的请求首部字段,都可称为条件请求。
服务器接收到附带条件的请求后,只有判断指定条件为真时,才会执行请求。
(10)If-Modified-Since
首部字段If-Modified-Since,属附带条件之一,它会告知服务器若If-Modified-Since字段值早于资源的更新时间,则希望能处理该请求。
而在指定If-Modified-Since字段值的日期时间之后,如果请求的资源都没有过更新,则返回状态码304NotModified的响应。