报文首部
首部字段组成
请求行
方法 URI 协议版本例:POST /form/entry HTTP/1.1状态行
协议版本 状态码 状态码的原因短语例:HTTP/1.1 200 OK请求首部字段
Host
- 域(主机名+端口号)
- 唯一一个必选包含的字段。没主机名则为空。
- User-Agent
- 创建请求的浏览器和用户代理名称等信息
- Referer
- 发起请求的URI
- Accept相关
- Accept
- 用户能够处理的媒体类型及媒体类型的相对优先级。
- Accept-Charset
- Accept-Encoding
- Accept-Language
- Accept
- 条件判断相关
- If-Match, If-None-Match
- 判断请求资源的ETag是否匹配。
- 实体标记(ETag)是与特定资源关联的确定值。资源更新后,ETag也会随之更新。
- If-Modified-Since, If-Unmodified-Since
- 根据指定日期后,资源是否发生更新,来决定是否返回资源
- 响应状态码为200 OK 或304 Not Modified
- If-Range,Range
- If-Range的值可以为ETag或日期
- 若满足条件,根据Range进行范围查询(206 Partial Content)。否则返回整个网页
- If-Match, If-None-Match
- Authorization
- 客户端与服务器间的认证信息
- Proxy-Authorization
- 客户端与代理之间的认证信息。
- Expect
- 告诉服务器,期望做出某种特定的行为
- 可以利用该首部字段,写明期望的扩展。规定只定义了100-continue这一个值
- 接收 100 Continue 状态码
- From
- 告知服务器 使用用户代理的用户的email
- Max-Forwards
- 最大转发次数
- 配合TRACE 或 OPTIONS使用
-
响应首部字段
Location
- 提供重定向的URI
- Accept-Ranges
- 告知客户端能否处理范围请求
- 值为bytes或none
- Age
- 代表对象在缓存代理中存储的时长,以秒为单位。
- 值通常接近于0。表示此对象刚刚从原始服务器获取不久。
- ETag
- 资源被缓存时,可以得到唯一性标识。
- 仅靠URI判断资源是否相同不够(如URI相同,但文件可能修改过,与之前不一样了)。
- 生成方式没有统一的算法规则,由服务器决定
- 分为强ETag值与弱ETag值。
- 强:不论实体发生多么细微的变化都会改变其值
- 弱:只有资源发生了根本变才会改变其值。会在字段值最开始处附加
W/
- Proxy-Authenticate
- 把由Proxy Server所要求的认证信息发送个客户端。
- WWW-Authenticate
- 401 Unauthorized之后的HTTP认证
- Retry-After
- 告知应该多久之后再次发送请求
- 配合503 Service Unavailable或3XX redirect使用。
- Server
- 告知HTTP服务器应用程序的信息
Vary
相同指令,根据发出方(客户端还是服务端)的不同,可能有不同语义
- Cache-Control
- no-store是不缓存,no-cache是不缓存过期的资源
- Connection
- 作用
- 控制不再转发给代理的首部字段(hop-by-hop首部),值为要删除的首部名
- 管理持久连接。默认Keep-Alive,关闭时值为close。配合Keep-Alive首部使用
- 作用
- Date
- 创建HTTP报文的时间
- Pragma
- 历史遗留字段
- Trailer
- 说明在报文主体后记录了哪些字段。值为字段名
- 可应用在HTTP/1.1分块传输编码。
- Transfer Encoding
- 传输报文主体时采用的编码方式。
- Upgrade
- 检测HTTP协议及其他协议,是否可以使用更高的版本进行通信
- 其参数值用来指定一个完全不同的通信协议(如TLS/1.0)
- Via
- 追踪客户端与服务器之间的请求和响应报文的传输路径。
- 通常和Trace方法一起用。
- Warning
- 告知用户一些缓存相关问题的警告。
- 从HTTP/1.0的响应首部(Retry-After)演变过来的。
实体首部字段:
- Allow
- 通知客户端能够支持Request-URI指定资源的所有HTTP方法。
- 接收到不支持的HTTP方法时,会以状态码 405 Method Not Allowed 作为响应返回。与此同时,还会把所有能支持的HTTP方法写入首部字段Allow后返回。
- Content-Encoding
- Content-Language
- Content-Length
- Content-Location
- Content-MD5
- Content-Range
- Content-Type
- Expires
- Last-Modified
为Cookie服务的首部字段
未标准化,但得到了广泛应用
- Set-Cookie
-
其他首部字段
Http首部字段是可以自行扩展的
X-Frame-Options
- X-XSS-Protection
- DNT
-
端到端首部与逐条首部
端到端首部:
- 此类别中的首部会转发给请求、响应对应的最终接收目标
- 必须被转发
- 必须保存在由缓存生成的响应中
- 逐跳首部
- 只对单次转发有效
- 会因通过缓存或代理而不再转发
- 在HTTP/1.1和之后的版本中,需要提供Connection首部字段
- HTTP/1.1全部逐条字段如下:
- Connection
- Keep-Alive
- Proxy-Authenticate
- Proxy-Authorization
- Trailer
- TE
- Transfer-Encoding
- Upgrade
报文主体
报文主体 VS 实体主体
MIME允许邮件处理文本,图片,视频等多个不同类型的数据。在MIME扩展中会使用一种称为多部分对象集合(Multipart)的方法,来容纳多种不同类型的数据。
相关报文头?
请求部分内容
- 请求报文首部里设置Range字段。
响应报文首部里有Content-Range字段。若返回成功,则返回206状态码
内容协商
内容协商机制是指,客户端和服务端就响应的资源内容进行交涉,然后提供给客户端最为合适的资源。
- 内容协商会以语言、字符集、编码方式等为基准判断响应的资源。
- 相关首部字段:
- Accept
- Accept-Charset
- Accept-Encoding
- Accept-Language
- Content-Language
- 内容协商有以下3种类型:
- 服务器驱动协商:由服务器端进行内容协商。以请求的首部字段为参考,在服务器端自动处理。
- 客户端驱动协商:由客户端进行内容协商。用户从网页的一个可选列表中手动选择。也包括利用js脚本在Web页面上自动进行上述选择:比如按OS的类型或浏览器类型,自行切换成PC版页面或手机版页面。
- 透明协商:前两者的结合体,各自进行内容协商。
