HTTP协议的请求和响应报文中必定包含HTTP首部。首部的内容为客户端和服务器分别处理请求和响应提供提供所需的信息。对于客户端用户来说,这些信息中的大部分都无需亲自查看。本文主要涉及HTTP/1.1及常用的首部字段。
HTTP首部字段
使用首部字段是为了给浏览器和服务器提供报文主体大小、所使用的语言、认证信息等内容,由首部字段名和字段值构成,中间用冒号分隔。
字段类型
- 通用首部字段:请求报文和响应报文两方都会使用的首部;
- 请求首部字段:从客户端向服务器端发送报文使用的首部,补充了请求的附加内容、客户端信息、响应内容相关优先级等信息;
- 响应首部字段:从服务器端向客户端返回报文时使用的字段,补充了响应的附加内容,也会要求客户端附加额外的用户信息;
- 实体首部字段:正对请求报文和响应报文的实体部分使用的首部。补充了资源内容更新时间等与实体有关的信息。
HTTP/1.1通用首部字段
Cache-Control
可以控制缓存的行为。
表示能否缓存的指令
public指令:明确表明其他用户也可利用缓存。
Cache-Control: public
private指令:响应只以特定的用户作为对象,对于其他用户发送过来的请求,代理服务器则不会返回缓存。
Cache-Control: private
no-cache指令:防止从缓存中返回过期的资源。
Cache-Control: no-cache
客户端发送的请求中如果包含no-cache指令,则表示客户端将不会接受缓存过的响应。于是,“中间”的缓存服务器必须把客户端请求转发给源服务器。
如果服务器返回的响应中包含no-cache指令,那么缓存服务器不能对资源进行缓存。源服务器以后也将不再对缓存服务器中的请求提出的资源有效性进行确认,且禁止其对响应资源进行缓存操作。
Cache-Control: no-cache=Location
由服务器返回的响应中,若报文首部字段Cache-Control中对no-cache字段名具体指定参数值,那么客户端在接收到这个被指定的参数值的首部字段对应的响应报文后,就不能使用缓存。
控制可执行缓存的对象的指令
no-store指令:暗示请求或响应中包含机密信息,缓存不能在本地存储请求或响应的任意一部分。
Cache-Control: no-store
指定缓存期限和认证的指令
s-maxage指令
Cache-Control: s-maxage=604800 (单位:秒)
max-age指令
Cache-Control: max-age=604800 (单位:秒)
当客户端发送的请求包含max-age时,如果判定缓存资源的缓存时间数值比指定时间更小,那么客户端就接收缓存的资源。
当服务器返回的响应中包含max-age指令时,缓存服务器将不对资源的有效性在做确认,而max-age数值代表资源保存为缓存的最长时间。
min-fresh指令:要求缓存服务器返回至少还未过指定时间的缓存资源。
Cache-Control: min-fresh=60(单位:秒)
max-stale指令:可指示缓存资源,即使过期也照常接收。
Cache-Control: max-stale=3600(单位:秒)
only-if-cached指令:客户端仅在缓存服务器本地缓存目标资源的情况下才会要求其返回。
Cache-Control: only-if-cached
must-revalidate指令:代理会向服务器再次验证即将返回的响应缓存目前是否任然有效。
Cache-Control: must-revalidate
proxy-revalidate指令:要求所有的缓存服务器在接收到客户端带有的该指令的请求返回响应之前,必须再次验证缓存的有效性。
Cache-Control: proxy-revalidate
Connection
控制不再转发给代理的首部字段
管理持久连接
(未完,待续。。。)