基本认识
http的首部是http报文的一个非常重要的组成部分,客户端和服务端会根据报文的首部字段来做出一些相应行为
有时候我们可以在首部添加一些额外的信息给服务端(例如客户端证书的相关信息…)
而首部字段的组成方式就是
首部字段名:字段值1,字段值2,字段值3
// Content-Type:text/html
// 这个首部字段的意思是客户端希望范围的响应内容类型是text/html
// Keep-alive:timeout=15,max=100
// 超过15s客户端没有响应就断开链接
而根据作用和使用的报文对象不同可以分为以下几种首部字段
-
请求首部字段(针对于请求报文)
-
响应首部字段(针对于响应报文)
-
通用首部字段(请求报文和响应报文都会用到的)
-
实体首部字段
该首部字段的存在是对实体主体资源的一些额外说明,例如该实体主体什么时候会失效 我们可以在这类字段添加我们对于我们要返回内容的信息的一些额外说明
而在我们的实际过程中,我们客户端到服务端的报文有时候是需要经过代理的。而由于这个原来代理服务器就需要考虑究竟是哪些字段是需要反代理发送过去的,哪些字段是仅仅服务端一次接收报文该字段就废弃
因此,首部字段又可以分为以下两种
- 端到端首部字段(会被代理服务器转发过去)
- 逐跳首部字段(不会被代理服务器转发过去)
而除了以下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 | 优先的语言(自然语言) |
| Authorization | Web认证信息 |
| 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-Agent | HTTP 客户端程序的信息 |
响应首部字段
| 首部字段名 | 说明 |
|---|---|
| Accept-Ranges | 是否接受字节范围请求 |
| Age | 推算资源创建经过时间 |
| ETag | 资源的匹配信息 |
| Location | 令客户端重定向至指定URI |
| Proxy-Authenticate | 代理服务器对客户端的认证信息 |
| Retry-After | 对再次发起请求的时机要求 |
| Server | HTTP服务器的安装信息 |
| 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发送到服务端去
我们可以利用首部字段来实现一些功能
-
现在比较常见的用户认证方式jwt
jwt,全称 json web token,是一种用户认证方式,一般在单点登录系统中使用 jwt的基本流程 1. 客户端想服务器发送用户认证,用户认证成功服务端返回一个token令牌 2. 客户端缓存token令牌,然后在接下来的每次请求在报文的首部字段添加自定义字段 token:token令牌值 3. 服务端在收到客户端的请求时,先拦截查看报文首部字段是否有token字段,有就那其对应的值进行令牌校验,没有就报错 4. 自定义字段的名称需要客户端和服务端要协商好 -
比如我们现在使用比较广的https
在进行ssl连接阶段,会把客户端和服务端证书的相关信息放在报文首部字段中 -
我们也可以通过修改响应首部字段Location来使得我们的客户端进行重定向。当然,在具体的使用过程中我们可以直接利用语言或者框架已经封装好的接口来修改
首部字段的使用方式,最终还需要根据我们的实际情况来决定。
HTTP报文的首部字段至关重要,用于客户端和服务器间的交互控制。包括通用、请求、响应和实体首部字段,区分端到端和逐跳首部。常见应用涉及连接管理、缓存控制、内容类型、用户认证(如JWT)、HTTPS以及重定向等。首部字段如Cookie、Set-Cookie、Location等可实现特定功能。
1612

被折叠的 条评论
为什么被折叠?



