HTTP报文首部按类型分为 请求报文响应首部

报文首部按组成分为 请求/响应首部字段 通用首部字段 实体首部字段

使用首部字段是为了给浏览器和服务器提供报文主体大小,所使用的语言,认证信息等内容

首部字段有HTTP/1.1和非HTTP/1.1的区别,后者主要是为了补充,使用频率高,例如cookie

首部字段结构

首部字段名 : 字段值

例如: Content-Type : text/html

HTTP通用首部报文


Cache-Control

缓存控制

指令 参数 说明
no-cache 防止从缓存中获取过期的资源,客户端不接受缓存过的响应,缓存服务器不能对资源进行缓存
no-store 一般报文中含有机密信息,规定不能在本地存储请求或响应的任何一部分
max-age = [秒] 必需 指定缓存的期限,要与min-fresh区分,这个是在指定时间内都使用有效的缓存资源,超出指定时间就是过期了
max-stale (= [秒] ) 可省略 指定客户端愿意接受过期资源的最长时间哪怕是max-age中过期,但是没有超过max=stale的时间,依旧可以接受具体数字,如果忽略了参数,则无论多久都能接受响应
min-fresh = [秒] 必须 指令缓存服务器返回至少未过指定时间的缓存资源,说人话就是希望资源保持新鲜度,在指定时间内希望获得服务器发送的资源,而不是缓存资源
no-transform 表示代理服务器在传输过程中不得修改响应的内容,一般会进行编码等操作
only-if-cached 指定客户端只能使用缓存中的响应,而不能向服务器发起请求
cache-extension - 自定义

Connection

  1. 控制不再转发给代理的首部字段

    Connection : 不再转化的首部字段名

    1. 控制首部字段的传递:通过 Connection 首部字段,客户端或服务器可以控制哪些首部字段不应该被代理服务器转发。这样可以确保某些敏感信息或特定于原始客户端和服务器之间通信的字段不会被中间代理篡改或修改。
    2. 优化传输:通过控制传递的首部字段,可以在一定程度上优化传输,避免传输不必要的信息,减少通信开销。
  2. 管理持久连接

    Connection : close

    Connection : Keep-Alive

Date

表名创建HTTP报文的日期和时间

Date: Tue , 03 Jul 2012 04:40:59 GMT

Trailer

用于指定 在响应的尾部(trailer)中包含的额外元数据

  1. 服务器在发送响应时,在响应头部字段中包含”Trailer”字段,并指定包含在尾部的额外头部字段名称。
  2. 响应主体传输完毕后,服务器在响应尾部添加额外头部字段,并使用”Trailer”字段指定的字段名称。
  3. 客户端在接收到响应后,可以通过读取”Trailer”字段来获取额外头部字段的名称。
  4. 客户端可以根据需要处理这些额外头部字段。

类似于一个补充的作用

HTTP/1.1 200 OK

Content-Type: text / plain

Trailer : My-Header

Hello world

My-Header: Some value

作为一个额外的头部字段,放在实体的后面补充说明

Transfer-Ecoding

规定编码方式

Upgrade

检测HTTP协议以及其他协议是否有更高的版本进行通信

如果Connection的值未Upgrade

产生作用的对象仅限于客户端和邻接服务器之间

Via

最终客户端于服务器之间的传输路径(模糊),一般与Trace一起用

经过代理或网关时会附加该服务器的信息

Warning

警告,具体值查BING吧

请求首部字段


Accept

指定媒体类型和类型的相对优先级用q=value来表示,中间用 ; 分隔,例如 xml;q=value

q范围是0~1,默认权重为q=1.0

Accept: text/html,application/xtml+xml,application/xml;q=0.9,/;q=0.8

Accept-Charset

字符集支持 以及 字符集的相对优先顺序

Accept-Charset: iso-8859-5 ,unicode-1-1; q=0.8

Accept-Ecoding

内容编码以及优先级顺序

Accept-language

语言支持 以及 优先级顺序

Accept-Language : zh-cn,zh;q=0.7 , en-us,en; q=0.3

User-Agent

创建请求的浏览器和用户代理名称等信息传达给服务器

User-Agent: Mozilla/5.0(Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101 Firefox/13.0.1

From

客户端告知服务器用户的电子邮箱地址

Host

客户端的主机名和端口号

请求发送服务器的时候,主机名会用IP地址代替域名,但是相同IP可能有多个域名,所以要发主机名

Authorization

用户代理的认证信息(证书值)

Expect

期待值,客户端期望服务器做出行为

IF-… 条件请求

Etag是HTTP协议中的一个实体标签,用于标识资源的特定版本

它通常由服务器分配,随着资源的变化而变化

  1. If-Match 请求字段值字段Etag值 进行匹配
  2. If-Modified-Since 如果在指定日期时间后,资源更新,则服务器会接受
  3. If-None-Match 与1. 相反
  4. If-Range 请求字段值与 Etag值 进行匹配
  5. If-Unmodified-Since 与2. 相反

Range

获取部分资源的请求

Range: bytes = 500 - 501

获取第500个字节可是到501个字节的资源

Referer

Referer : URI

查看Referer可以知道请求发起的URI是哪个Web页面

TE

告知服务器:客户端能够处理的编码方式相对优先级

TE : gzip , deflate;q=0.5

响应首部字段


Accept-Ranges

告知客户端:服务器能允许范围请求,即可以传输部分资源,而不是全部资源

Accept-Ranges : bytes

Age

通常标识 资源在缓存服务器中存储了多长时间

Etag

实体标识

标识资源的版本,随着资源的改变而改变,要与URI区分

  1. 强 Etag

    无论实体发生什么变化都会改变这个值

  2. 弱 Etag

    只有发生了根本性变化时才会改变

Location

来提醒客户端页面转移的信息,同上一章见过的3XX结合使用

Proxy-Authenticate

代理服务器所要求的认证信息发送给客户端

Retry-After

告知客户端应该在多久之后再次发送请求

实体首部字段


实体首部字段用于补充内容的更新时间等与实体相关的信息(重点)

Allow

能够支持的方法

Allow : GET, HEAD

Content-Encoding

编码方式

Content-language

资源语言

Content-Length

资源大小

Content-Location

报文主体返回资源对应的URI

Content-MD5

一坨用MD5算法生成的值,用来确认报文主体在传输过程中是否保持完整

Content-Range

范围响应

Content-Type

资源类型

Expires

资源有效期

Last-Modified

最终修改时间

Cookie相关的首部字段


响应首部字段

开始状态管理所使用的Cookie信息

属性 说明
NAME=VALUE Cookie的名称和值
expires=DATE 有效期(不明确就默认浏览器关闭
path=PATH 服务器的文件目录
domain=域名 适用对象的域名
Secure 仅在HTTPS安全通信时才会发送Cookie
HttpOnly 使Cookie不能被JavaScript脚本访问

Set-Cookie : status=enable ; expires = Tue,05 Jul 2011 07:26:31 GMT; path=/; domain=google.com

请求首部字段

客户端发送给服务端

服务器接收到的Cookie信息

Cookie: status = enable

其他首部字段


保证安全

  1. X-Frame-Options
  2. X-XSS-Protection
  3. DNT
  4. P3P