网络基础 http报文的首部字段

HTTP报文的首部字段至关重要,用于客户端和服务器间的交互控制。包括通用、请求、响应和实体首部字段,区分端到端和逐跳首部。常见应用涉及连接管理、缓存控制、内容类型、用户认证(如JWT)、HTTPS以及重定向等。首部字段如Cookie、Set-Cookie、Location等可实现特定功能。

基本认识

http的首部是http报文的一个非常重要的组成部分,客户端和服务端会根据报文的首部字段来做出一些相应行为

有时候我们可以在首部添加一些额外的信息给服务端(例如客户端证书的相关信息…)

而首部字段的组成方式就是

首部字段名:字段值1,字段值2,字段值3
// Content-Type:text/html
// 这个首部字段的意思是客户端希望范围的响应内容类型是text/html

// Keep-alive:timeout=15,max=100
// 超过15s客户端没有响应就断开链接

而根据作用和使用的报文对象不同可以分为以下几种首部字段

  1. 请求首部字段(针对于请求报文)

  2. 响应首部字段(针对于响应报文)

  3. 通用首部字段(请求报文和响应报文都会用到的)

  4. 实体首部字段

    该首部字段的存在是对实体主体资源的一些额外说明,例如该实体主体什么时候会失效
    我们可以在这类字段添加我们对于我们要返回内容的信息的一些额外说明
    

而在我们的实际过程中,我们客户端到服务端的报文有时候是需要经过代理的。而由于这个原来代理服务器就需要考虑究竟是哪些字段是需要反代理发送过去的,哪些字段是仅仅服务端一次接收报文该字段就废弃

因此,首部字段又可以分为以下两种

  1. 端到端首部字段(会被代理服务器转发过去)
  2. 逐跳首部字段(不会被代理服务器转发过去)

而除了以下8个字段之外,其他字段都属于端到端首部字段

1. Connectiom
2. Keep-Alive
3. Proxy-Authenticate
4. Proxy-Authorization
5. Trailer
6. TE
7. Transfer-Encoding
8. Upgrade

常见的首部字段(来自《图解HTTP》)

通用首部字段
首部字段名说明
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资源的最后修改日期时间

首部字段的应用

报文的首部字段是用于客户端与服务端一些行为的控制指令(例如连接时间,缓存的控制。服务端所要返回的类型)

当然,除了刚刚上面的字段,还有一些非属于HTTP首部字段报文‘规范规定的字段,例如Set-Cookies,Cookie,Content-Disposition

Cookie,Set-Cookies等字段用于将客户端的Cookies发送到服务端去

我们可以利用首部字段来实现一些功能

  1. 现在比较常见的用户认证方式jwt

    jwt,全称 json web token,是一种用户认证方式,一般在单点登录系统中使用
    jwt的基本流程
    1. 客户端想服务器发送用户认证,用户认证成功服务端返回一个token令牌
    2. 客户端缓存token令牌,然后在接下来的每次请求在报文的首部字段添加自定义字段 token:token令牌值
    3. 服务端在收到客户端的请求时,先拦截查看报文首部字段是否有token字段,有就那其对应的值进行令牌校验,没有就报错
    4. 自定义字段的名称需要客户端和服务端要协商好
    
  2. 比如我们现在使用比较广的https

    在进行ssl连接阶段,会把客户端和服务端证书的相关信息放在报文首部字段中
    
  3. 我们也可以通过修改响应首部字段Location来使得我们的客户端进行重定向。当然,在具体的使用过程中我们可以直接利用语言或者框架已经封装好的接口来修改

首部字段的使用方式,最终还需要根据我们的实际情况来决定。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值