总结了一下常见的Http首部字段

208 阅读6分钟

HTTP通用首部字段

Cache-Control

Cache-Control通用消息头字段,被用于在 http 请求和响应中,通过指定指令来实现缓存机制

eg: Cache-Control: private, max-age=0, no-cache[, 指令...]

常见请求指令

指令参数说明
no-cache-缓存服务器必须先进行有效性确认
no-store-不缓存请求或响应的任何内容
max-age=[秒]必有缓存存储的最大周期

常见响应指令

指令参数说明
public-可向任意方提供响应的缓存
private可省略向特定用户返回响应缓存
no-cache可省略缓存服务器不能对资源进行缓存
no-store-不缓存请求或响应的任何内容
max-age=[秒]必有缓存存储的最大周期
must-revalidate-可以缓存但必须要向源服务器进行确认

no-cache 与 no-store 的区别:

  • no-cache并不是真正意义上的不缓存,缓存服务器会先对资源进行有效性确认再处理资源。
  • no-store是真正意义上的不缓存,一般应用于请求或者响应含有机密内容

must-revalidate 和 no-cache 的区别:

  • must-revalidate表示当资源没有过期(max-age)的时候,可以直接用缓存,但是过期了之后就一定要进行有效性确认
  • no-cache表示一定要进行有效性确认,不管有没有过期

image-20220602163311139.png

Connection

Connection作用:

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

image-20220602163533153.png

  • 管理持久连接(Connection: Keep-AliveConnection: Close

HTTP/1.1版本默认都是持久连接,因此客户端会在持久连接上连续发送请求,当服务器想明确断开连接时,则指定Connection首部字段为Close。

  • 升级协议

使用Upgrade字段进行协议查询升级的时候,Connection: Upgrade

Upgrade

Upgrade字段用于检测协议是否可使用更高版本进行通信。

当报文中有Upgrade字段的时候,Connection字段的值为Upgrade。

对于有Upgrade字段的请求,服务器可用101 Switching Protocols状态码进行返回。

image-20220602164825995.png

Via

Via字段用于追踪客户端于服务器之间的请求和响应报文的传输路径,还可避免请求回环。

报文经过代理或者网关的时候,会先在首部字段Via中附加该服务器的传输协议和信息。

请求首部字段

Accept-xxx

Accept

Accept字段用于表示客户端可以处理的媒体类型以及优先级。

eg: Accept: text/html, application/xhtml+xml, application/xml

Accept-Charset

Accept-Charset字段表示客户端可以支持的字符集以及优先级

eg:Accept-Charset: iso-8859-5, unicode-1-1

Accept-Encoding

Accept-Encoding字段表示客户端支持的内容编码以及优先级

Authorization

Authorization字段用于客户端向服务端传输认证信息

If-xxx

形如 If-xxx的请求字段都称为条件请求。服务器接收到附带条件的请求后,之后判断为指定条件为真时,才会执行请求。

If-Match

用于告知服务器匹配资源所用的实体标记(ETag)。服务器会对比If-Match的字段值和资源的ETag值,仅当两者一致时才会执行请求,否则返回412 Precondition Failed响应。还可用 * 号表示忽略ETag值,只要资源存在就处理请求。

image-20220602173837980.png

If-None-Match

用于告知服务器匹配资源所用的实体标记(ETag)。服务器会对比If-Match的字段值和资源的ETag值,仅当两者不一致时才会执行请求。作用与If-Match相反。

If-Modified-Since

用于确认代理或者客户端拥有的本地缓存是否有效。如果If-Modified-Since的值早于资源的更新时间,则需要返回新的资源,并且服务器会返回Last-Modified字段供客户端更新;如果不早于资源更新时间(说明缓存有效),则服务器返回304 Not Modified响应。

image-20220602173826625.png

If-Range

告知服务器若指定的If-Range字段值和请求资源的ETag值相一致时,则作为范围请求处理,反之,则返回全体资源。

image-20220602174428007.png

Max-Forwards

通过 TRACE 方法 或者 OPTIONS方法,发送包含Max-Forward的请求时,这个字段限制了从客户端到服务端的转发路径的次数。

Range

Range: bytes=5001-10000

用于请求资源的一个部分。如果成功返回 206 Partial Content,如果失败则会返回 200 OK以及全部资源。

Referer

Referer: http://www.xxx.xx/xxx.html

用于告知服务器请求的原始资源的url。

响应首部字段

Accept-Ranges

Accept-Ranges: bytesAccept-Ranges: none

用于告知客户端是否能处理范围请求。

ETag

ETag: "XXXXXXXXX"

是具体资源的唯一表示,服务器会为每份资源分配对应的ETag值。如果资源更新了,ETag的值也会随之更新。生成ETag值并没有统一的算法,根据服务器自己来定。

强ETag:无论资源发生多么细微的变化都会改变其值

弱ETag:只有资源发生了根本改变,才会改变其值,如果时弱ETag,会在值开始处附加 w/

Location

Location: http://xxxx.xx/xxx.html

用于表示新资源对应的URL。一般配合 3xx 的响应,为这个响应提供重定向的URL。

实体首部字段

Allow

Allow: GET, HEAD

表示服务器能够处理请求的方法。

Content

Content-Encoding

Content-Encoding: gzip

表示服务器对实体部分选用的内容编码方式(gzip,compress,deflate,identity)

Content-Language

Content-Language: zh-CN

告知客户端实体使用的自然语言

Content-Length

Content-Length: 15000

告知客户端实体主体部分的大小(以字节为单位)

Content-Type

Content-Type: text/html; charset=UTF-8

告知客户端主体内的媒体类型。

Expires

Expires: Wed, 04 Jul 2012 ...

告知客户端资源失效的日期。对于缓存服务器来说,Expires值指定的时间之前,资源副本会一直被保存。当超过指定的时间后,缓存服务器在请求发送过来时,会请求源服务器的资源。

max-age的优先级高于expires

Last-Modified

告知客户端(或者是缓存服务器)资源最终被修改的时间。

image-20220602202350439.png

和Cookie相关的首部字段

Set-Cookie

The Set-Cookie HTTP response header is used to send a cookie from the server to the user agent, so that the user agent can send it back to the server later. To send multiple cookies, multiple Set-Cookie headers should be sent in the same response.

Set-Cookie的属性

  • expires:指定cookie的有效期,如果省略这个属性,有效期仅限于维持浏览器会话时间内
  • path:指定Cookie的发送范围和文件目录
  • domain:限定了能够发送cookie的域名
  • secure:仅在HTTPS时才可以发送cookie
  • HttpOnly:不能通过js来获取cookie

Cookie

告诉服务器客户端拥有的cookie值,如果需要传多个cookie,就用多个Cookie头部。

Cookie: status=enable