图解HTTP -- HTTP首部
6 章 HTTP 首部
HTTP 协议的请求和响应报文中必定包含 HTTP 首部。
HTTP 请求报文是由方法,URI,HTTP 版本和首部字段
HTTP 响应是由 HTTP 版本,状态码和首部字段组成
首部内容
首部字段给浏览器和服务器提供报文主体大小,使用的语言,认证信息等内容。
一般就是首部字段名:字段值。
注意字段值可以有多个值,由逗号分隔。
若是重复了话规范没有明确,得看浏览器内部处理逻辑的不同。
分为 4 种类型:
- 通用首部字段:请求和响应报文都会使用的首部,9 个
- 请求首部字段:请求使用的首部,补充了请求的增加内容,客户端信息,响应内容优先级等信息
- 响应首部字段:补充了响应的附加内容,也会要求客户端附加额外的内容信息
- 实体首部字段:针对实体部分使用的首部,补充了资源内容的更新时间
HTTP1.1 定义了 47 种首部字段。先不直接列举了。
注意,除了规范中的这些个首部字段,还有定义在其他 RFC 的首部字段,比如 Cookie,Set-Cookie 等使用频率也很高。
HTTP 首部将定义成缓存代理和非缓存代理的行为,分成了 2 种。
- 端到端首部:此类别的首部会发送到最终的接收目标,且必须保存在缓存生成的响应中,必须被转发。
- 逐跳首部:只对单次转发有效,会因为缓存和代理而不再转发。如果要使用 hop-by-hop 首部,需要提供 Connection 首部。有 8 个
通用首部字段
- Cache-control:操作缓存的工作机制。比如 max-age 是几秒内不会重新请求服务器,s-maxage 是对多位用户使用的公共缓存服务器;no-cache 是不缓存过期的,就是说缓存服务器还是会缓存,只是每次都会从服务器确认下。no-store 才是不能存储;public 指可以向任意用户提供缓冲,而 private 则是特定用户;min-fresh 要求缓存服务器返回至少还未过指定时间的缓存资源;max-stale 如果不设置值的话,那么多了多久都照常接收,如果设置了值,那么哪怕过期,只要在值的时间范围内,就接收;only-if-cached 这个要求只有缓存服务器本地有缓存的时候才会要求返回,否则返回状态码 504;must-revalidate 要求代理向源服务器验证时间,会忽略 max-stale;no-transform 规定在请求还是响应中,缓存不能改变主题的媒体类型,可以防止压缩图片等类似操作;他还可以扩展字段,比如 community,不过这些个扩展只对能理解他的缓存服务器来说才是有意义的。
- Connection:控制不再转发给代理的字段;管理持久化连接。就是说他能通知代理把一些头部删掉然后发给服务器。然后为了旧版本的 HTTP 也持久化连接,设置 Connection:keep-alive,当想断开连接的时候,就返回 close 就好了。
- Date:表示创建报文的日期和时间。
- Pragma:no-cache 这个字段主要是历史遗留字段,和 Cache-Control:no-cache 一样。为了兼容 HTTP1.0.
- Trailer:这个字段告诉服务器在报文的后面还会出现的首部字段,用在分块传输的时候
- Transfer-Encoding:这个字段规定了传输报文主体采用的编码方式,只在分块传输编码的时候有效
- Upgrade:这个字段用来检测是否可以使用更高版本的协议进行通信。他只能作用于邻近的服务器,而且要连着 Connection 字段使用。
- Via:追踪客户端与服务器之间的请求和响应报文的传输途径,这个经常与 trace 方法一起使用
- Warning:该首部通常会告知用户一些与缓存相关的问题的警告
请求首部字段
是从客户端往服务器端发送请求报文里使用的字段,用于补充请求的附加信息,客户端信息,对响应内容的优先级
- Accept:通知服务器用户代理能够处理的媒体类型及媒体类型的优先级,可用 q 的值来表示权重
- Accept-Charset:可用来通知服务器用户代理支持的字符集以及字符集的相对优先顺序,也可用 q 来表示权重
- Accept-Encoding:告知服务器用户代理支持的内容编码以及优先级,比如 gzip,compress,deflate,也是使用 q 来表示权重
- Accept-Language:就是告诉服务器能够代理处理的自然语言集
- Authorization:就是告知服务器用户代理的认证信息
- Expect:告知服务器期望出现的结果
- From:告知服务器使用用户代理的用户的电子邮件地址
- Host:虚拟主机运行在一个 IP 上,使用首部字段 Host 来加以区分(这个是唯一一个必须被包含的请求首部字段)
- If-match:if 开头的样式的请求首部字段,都可以称之为条件请求,只有指定条件为真时才执行请求;if-match 的效果就是比对 e-tag 的值,如果是*的话,就会忽略
- If-Modified-Since:这个是如果更新时间晚于提供的时间,才会返回 200,以及添加一个首部字段 last-modified,否则就是 304
- If-None-Match:只有当字段值与 ETag 的值不相等的时候才会接受请求,往往用来获取最新的资源。
- If-Range:如果匹配的话,就是范围请求,如果不一致的话,就是返回全部资源
- If-Unmodified-Since:只有指定的资源在制定的日期之后没有发生更新的情况下,才能处理请求,否则状态码 412
- Max-Forwards:通过 TRACE 或者 OPTIONS 方法,主要是用来检测一些网络错误使用的,比如多个代理服务器,不知道问题出在哪里的时候,可以改变转发次数来测试
- Proxy-Authorization:就是代理服务器发出的认证咨询。客户端返回认证信息
- Range:就是拿取范围内的数据,如果成功的话,返回 206,不成功的话,返回 200
- Referer:referer 能够知道这个请求是从哪个页面发出的。
- TE:这个字段是告知可以处理的传输编码方式及相对优先级,还可以指定伴随 trailers 字段的分块传输编码方式。
- User-Agent:会将创建请求的浏览器和用户代理名称等信息传达给服务器
响应首部字段
是从服务器端向客户端返回的响应报文的使用的字段
- Accept-Ranges:告知客户端能够处理范围请求。可处理时指定为 bytes,反之则为 none
- Age:告知客户端,资源是多久前向源服务器创建的,单位为秒
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 981909093@qq.com
文章标题:图解HTTP -- HTTP首部
文章字数:1.8k
本文作者:泽鹿
发布时间:2019-08-28, 16:45:23
最后更新:2019-08-28, 16:45:23
原始链接:http://panyifei.github.io/2019/08/28/读书笔记/图解HTTP/6章HTTP首部/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。