【图解HTTP】——HTTP首部

1

HTTP报文的结构
①报文首部:在客户端和服务器处理时传递额外重要信息
②空行:(CR+LF)
③报文主体:所需要的用户和资源的信息

HTTP协议的请求和响应报文中必定包含HTTP首部。首部内容为客户端和服务器分别处理请求和响应提供所需要的信息。

报文首部由几个字段构成
在请求中,HTTP报文由方法、URI、HTTP版本、HTTP首部字段等部分构成
在响应中,HTTP报文由HTTP版本、状态码(数字和原因短语)、HTTP首部字段3部分构成

2

HTTP首部字段传递重要信息
使用首部字段是为了给浏览器和服务器提供报文主体大小、所使用的语言、认证信息等内容
HTTP首部字段结构
HTTP首部字段是由首部字段名和字段值构成的,中间用冒号":"分隔
首部字段名:字段值
若HTTP首部字段重复了会如何
当HTTP报文首部中出现了两个或两个以上具有相同首部字段名时,根据浏览器内部处理逻辑的不同,结果可能不一致。有些浏览器会优先处理第一次出现的首部字段,而有些则会优先处理最后出现的首部字段
4种HTTP首部字段类型
通用首部字段:请求报文和响应报文两方都会使用的首部
请求首部字段:从客户端向服务器端发送请求报文时使用的首部
响应首部字段:从服务器端向客户端返回响应报文时使用的首部
实用首部字段:针对请求报文和响应报文的实体部分使用的首部

3

通用首部字段
Cache-Control:控制缓存的行为
Connection:逐跳首部、连接的管理(①控制不再转发给代理的首部字段;②管理持久连接)
Date:创建报文的日期时间
Pragma:报文指令
Trailer:报文末端的首部一览(会事先说明在报文主体后记录了哪些首部字段。该首部字段可应用在HTTP/1.1版本分块传输编码时)
Transfer-Encoding:指定报文主体的传输编码方式(HTTP/1.1的传输编码方式仅对分块传输编码有效)
Upgrade:升级为其他协议(Upgrade首部字段产生作用的Upgrade对象仅限于客户端和邻接服务器之间)
Via:代理服务器的相关信息(追踪客户端与服务器之间的请求和响应报文的传输路径)(报文经过代理或网关时,会先在首部字段Via中附加该服务器的信息,然后再进行转发。首部字段Via不仅用于追踪报文的转发,还可避免请求回环的发生,所以必须在经过代理时附加该首部字段内容)(Via首部是为了追踪传输路径,所以经常会和TRACE方法一起使用
Warning:错误通知,该首部通常会告知用户一些与缓存相关的问题的警告
Warning首部的格式如下:Warning: [警告码] [警告的主机:端口号] "[警告内容]" ([日期时间])
请求首部字段
请求首部字段是从客户端往服务器端发送请求报文中所使用的字段,用于补充请求的附加信息、客户端信息、对响应内容相关的优先级等内容
Accpet:用户代理可处理的媒体类型
Accpet-Charset:优先的字符集(可用来通知服务器用户代理支持的字符集及字符集的相对优先顺序)
Accept-Encoding:优先的内容编码(告知服务器用户代理支持的内容编码及内容编码的优先级顺序)
Accpet-Language:优先的语言(自然语言)(告知服务器用户代理能够处理的自然语言集,以及自然语言集的相对优先级)
Authorization:Web认证信息(告知服务器,用户代理的认证信息(证书值))(通常,想要通过服务器认证的用户代理会在接收到返回的401状态码响应后,把首部字段Authorization加入请求中
Except:期待服务器的特定行为(告知服务器,期望出现的某种特定行为。因服务器无法理解客户端的期望作出回应而发生错误时,会返回状态码417 Expectation Failed
From:用户的电子邮箱地址(告知服务器使用用户代理的用户的电子邮件地址。通常,其使用目的就是为了显示搜索引擎等用户代理的负责人的电子邮件联系方式
Host:请求资源所在服务器(虚拟主机运行在同一个IP上,因此使用首部字段Host加以区分)(首部字段Host会告知服务器,请求的资源所处的互联网主机名和端口号。Host首部字段在HTTP/1.1规范内是唯一一个必须被包含在请求内的首部字段)(首部字段Host和以单台服务器分配多个域名的虚拟主机的工作机制有很密切的关联,这是首部字段Host必须存在的意义)(请求被发送至服务器时,请求中的主机名会用IP地址直接替换解决。但如果这时,相同的IP地址下部署运行着多个域名,那么服务器就会无法理解究竟是哪个域名对应的请求。因此,就需要使用首部字段Host来明确指出请求的主机名。若服务器未设定主机名,那直接发送一个空值即可)
If-Match:比较实体标记(ETag)(形如If-xxx这种样式的请求首部字段,都可称为条件请求。服务器接收到附加条件的请求后,只有判断指定条件为真时,才会执行请求)(实体标记(ETag)是与特定资源关联的确定值,资源更新后ETag也会随之更新)(只有当If-Match的字段值跟ETag值匹配一致时,服务器才会接受请求)
If-Modified-Since:比较资源的更新时间(如果在If-Modified-Since字段指定的日期时间后,资源发生了更新,服务器会接受请求)
If-None-Match:比较实体标记(与If-Match相反)(只有在If-None-Match属于附带条件之一。它和首部字段If-Match作用相反。用于指定If-None-Match字段值的实体标记(ETag)值与请求资源的ETag不一致时,它就告知服务器处理该请求)
If-Range:资源未更新时发送实体Byte的范围请求(告知服务器若指定的If-Range字段值(ETag值或者时间)和请求资源的ETag值或时间相一致时,则作为范围请求处理。反之,则返回全体资源)
If-Unmodified-Since:比较资源的更新时间(与If-Modified-Since相反)(告知服务器,指定的请求资源只有在字段值内指定的日期时间之后,未发生更新的情况下,才能处理请求。如果在指定日期时间后发生了更新,则以状态码412 Precondition Failed作为响应返回)
Max-Forwards:最大传输逐跳数(通过TRACE方法或OPTIONS方法,发送包含首部字段Max-Forwards的请求时,该字段以十进制整数形式指定可经过的服务器最大数目,可以对以那台服务器为终点的传输路径的通信状况有所把握。)
Proxy-Authorization:代理服务器要求客户端的认证信息(接收到从代理服务器发来的认证质询时,客户端会发送包含首部字段Proxy-Authorization的请求,以告知服务器认证所需要的信息
Range:实体的字节范围请求(对于只需获取部分资源的范围请求,包含首部字段Range即可告知服务器资源的指定范围
Referer:对请求中URI的原始获取方(告知服务器请求的原始资源的URI)
TE:传输编码的优先级(告知服务器客户端能够处理响应的传输编码方式及相对优先级)
User-Agent:HTTP客户端程序的信息(会将创建请求的浏览器和用户代理名称等信息传达给服务器)
响应首部字段
响应首部字段是由服务器端向客户端返回响应报文中所使用的字段,用于补充响应的附加信息、服务器信息,以及对客户端的附加要求等信息
Accept-Ranges:是否接受字节范围请求(告知客户端服务器是否能处理范围请求,以指定获取服务器端某个部分的资源;可指定的字段值有两种,可处理范围请求时指定其为bytes,反之则指定其为none)
Age:推算资源创建经过时间(告知客户端,源服务器在多久前创建了响应。字段值的单位为秒;若创建该响应的服务器是缓存服务器,Age值是指缓存后的响应再次发起认证到认证的完成时间值。)
ETag:资源的匹配信息(可以告知客户端实体标识。它是一种可将资源以字符串形式做唯一性标识的方式。服务器会为每份资源分配对应的ETag值;当资源更新时,ETag值也需要更新。生成ETag时,并没有统一的算法规则,而仅仅是由服务器来分配。资源被缓存时,就会被分配唯一性标识;强ETag值和弱ETag值:强ETag值,不论实体发生多么细微的变化都会改变其值;弱ETag值,只用于提示资源是否相同。只有资源发生了根本改变,产生差异时,才会改变ETag值。这时,会在字段值最开始处附加W/)
Location:令客户端重定向至指定URI(使用首部字段Location可以将响应接收方引导至某个与请求URI位置不同的资源)
Proxy-Authenticate:代理服务器对客户端的认证信息(会把由代理服务器所要求的认证信息发送给客户端)
Retry-After:对再次发起请求的时机要求(告知客户端应该在多久之后再次发送请求)
Server:HTTP服务器的安装信息(告知客户端当前服务器上安装的HTTP服务器应用程序的信息)
Vary:代理服务器缓存的管理信息(首部字段Vary可对缓存进行控制。源服务器会向代理服务器传达关于本地缓存使用方法的命令;从代理服务器接收到源服务器返回包含Vary指定项的响应之后,若再要进行缓存,仅对请求中含有相同Vary指定首部字段的请求返回缓存。即使对相同资源发起请求,但由于Vary指定的首部字段不相同,因此必须要从源服务器重新获取资源
WWW-Authenticate:服务器对客户端的认证信息(告知客户端适用于访问请求URI所指定资源的认证方案(Basic或是Digest)和带参数提示的质询(challenge)。状态码401 Unauthorized响应中,肯定带有首部字段WWW-Authenticate
实体首部字段
实体首部字段是包含在请求报文和响应报文中的实体部分所使用的首部,用于补充内容的更新时间等与实体相关的信息
Allow:资源可支持的HTTP方法(通知客户端能够支持Request-URI指定资源的所有HTTP方法)
Content-Encoding:实体主体适用的编码方式
Content-Language:实体主体的自然语言
Content-Length:实体主体的大小(单位:字节)
Content-Location:替代对应资源的URI(报文主体返回资源对应的URI)
Content-MD5:实体主体的报文摘要(一串由MD5算法生成的值,其目的在于检查报文主体在传输过程中是否保持完整,以及确认传输到达)
Content-Range:实体主体的位置范围(返回响应时使用的首部字段Content-Range,能告知客户端作为响应返回的实体的哪个部分符合范围请求)
Content-Type:实体主体的媒体类型
Expires:实体主体过期的日期时间(会将资源失效的日期告知客户端。当超过指定的时间后,缓存服务器在请求发送过来时,会转向源服务器请求资源
Last-Modified:资源的最后修改日期时间
End-to-end首部和Hop-by-hop首部
HTTP首部字段将定义成缓存代理和非缓存代理的行为,分成2种类型
端到端首部:分在此类别中的首部会转发给请求/响应对应的最终接收目标,且必须保存在由缓存生成的响应中,另外规定它必须被转发
逐跳首部:分在此类别中的首部只对单次转发有效,会因通过缓存或代理而不再转发。HTTP/1.1和之后版本中,如果要使用hop-by-hop首部,需提供Connection首部字段
HTTP/1.1中的逐跳首部字段:除这8个首部字段之外,其他所有字段都属于端到端首部
Connection
Keep-Alive
Proxy-Authenticate
Proxy-Authorization
Trailer
TE
Transfer-Encoding
Upgrade
为Cookie服务的首部字段
Cookie的工作机制是用户识别及状态管理。Web网站为了管理用户的状态会通过Web浏览器,把一些数据临时写入用户的计算机内。接着当用户访问该Web网站时,可通过通信方式取回之前存放的Cookie。
调用Cookie时,由于可校验Cookie的有效期,以及发送方的域、路径、协议等信息,所以正规发布的Cookie内的数据不会因来自其他Web站点和攻击者的攻击而泄漏
Set-Cookie:开始状态管理所使用的Cookie信息(响应首部字段)
Cookie:服务器接收到的Cookie信息(请求首部字段)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值