Advertisement

浏览器的Cache-Control响应头

阅读量:

访问某一个网站时打开浏览器, 然后通过按下F12快捷键, 就能查看到Cache Control参数。如果无法找到该参数, 更换其他网站尝试一下。

这个Cache-Control的功能就是服务端向客户端(浏览器)告知实时的HTTP响应是否可被缓存。如图所示的Cache-Control: max-age=2592000表示着浏览器能够缓存该数据长达约两年的时间(因为一亿秒约为31年)。此外还有一些其他可配置的属性。

private :代表客户端可以缓存;

public 涵盖了客户端及代理服务器的所有情况;其中这些代理服务器可能包括例如nginx或CDN这样的中间环节;因此当将其设为public时,则能够在诸如 nginx 或 CDN 这样的位置进行缓存。

max-age 后面通常跟着的是数字,表示的内容是缓存的数据会在指定的时间长度后才会失效;一旦失效后,就需要再次向服务器发起请求。

no-cache :意味着每次请求都必须重新从服务器进行一次验证。
需要特别注意的是这一概念并非表示完全不缓存,
而是有能力缓存数据,
并且在使用时必须再次确认数据的有效性。

no-store 表示所有针对请求的内容均未被缓存;值得注意的是,“no-store”这一术语容易让人产生混淆。实际上,“no-store”指的是未被缓存的内容,“no-cache”虽然在字面上意味着未缓存请求的所有响应内容(即与 **store(存储)相反),但由于其字面意思过于误导性(即与实际含义存在较大偏差),因此 “no-cache 的实际含义与预期存在较大偏差。

在no-cache参数范围内,在线检查客户端的有效性依据是什么?主要依据以下哪些参数进行判断:

ETag : 资源的独特标识符;这一参数是由服务器传递给客户端用来标识资源的独特信息。当浏览器首次请求数据时,会接收该参数并将其存储。在后续请求中,浏览器会携带此参数进行身份验证,通过比较客户端当前提交的数据所附带的ETag与初始响应中的该标识符的一致性来判断,如果校验通过,则返回304状态码。

If-None-Match : 客户端发送的一方所包含的具体数据中包含了匹配条件;该术语与前面提到的内容相呼应,在此情况下会形成一对相互对应的关系;其中一个是服务端系统自动生成的数据校验码(Etag),另一个则是由客户端提供用于验证数据一致性的信息标识符。

Last-modified :资源最后被修改的时间;

The If-Modified-Since header represents an identifier for resources sent by the client that corresponds to their last modification time. It is used in conjunction with the Last-modified header; if the If-Modified-Since value is earlier than the Last-modified value, it indicates that the resource is stale and should be ignored, whereas if it is later, it means the resource is valid and should be considered.

对比服务器端的ETag与Last-modified字段值后发现无变化,则服务器将响应201状态码并包含响应体;若检测到有修改,则服务器将响应201状态码并包含修改信息。

浏览器的刷新方式

浏览器采用多种刷新方式进行操作,在每种刷新方式下都会伴随不同的缓存策略。

通过按下回车键执行刷新操作后,请检查其对应的Cache-Control属性中的max-age字段是否依然有效。如果该字段值仍为有效状态,则可以直接使用当前缓存中的数据;若设置为no-cache策略,则浏览器需重新验证其有效性

通过按下F5键(适用于Windows系统)或者同时按下Command和R键(适用于MacOS X系统)可以实现页面刷新。该操作会立即将Cache-Control协议中的max-age字段设置为零,从而使浏览器必须重新与服务器进行有效性验证

Windows系统快捷键Ctrl+F5或MacOS系统快捷键组合command+shift+R用于强行刷新

全部评论 (0)

还没有任何评论哟~