本文为web开发系列的一部分。
HTTP协议的Cache机制
HTTP协议提供Cache机制,当相应数据没有变化时,不会返回数据,减少网络带宽使用。
它主要包含
-
客户端如何使用Cache-Control和服务端通信,并进行相应操作。
-
服务端如何使用Cache-Control和客户端通信,并进行相应操作。
目前主流浏览器都支持HTTP Cache,这意味着只要在服务端实现相关操作,web系统就能够使用HTTP Cache。
推荐实现
下面提供一个推荐方案,它能够实现
-
如果服务端的响应数据没有变化,则不消耗网络带宽(只返回一个状态码),浏览器使用本地缓存数据。
-
如果服务端的响应数据发生变化,则返回最新数据,浏览器更新本地缓存数据。
主要步骤为
-
对于
GET
方法,服务器在响应头中增加Cache-Control:private, no-cache
和Etag:<data-token>
private
:表示本次请求返回的cache只对此请求者可见。
no-cache
:表示浏览器能够cache响应,但在使用前必须验证。
<data-token>
: 一般是字符串,对应返回数据的唯一标识。推荐使用返回数据的checksum值,例如MD5 hash值。 -
浏览器接受返回结果,缓存返回结果和Etag
-
浏览器再次以
GET
方法请求此URL时,会在请求头中增加If-None-Match: <data-token>
,表示需要验证此cache是否有效 -
服务器验证结果是否发生变化(采用相同的checksum算法),如果
<data-token>
值一致,则返回304
,如果<data-token>
发生变化,则返回200
,并在响应头中增加Cache-Control:private, no-cache
和Etag:<data-token>
-
浏览器如果收到
304
状态码,则使用步骤2中缓存的响应结果,如果收到200
状态码,则会更新结果缓存和Etag。
参考资料
更多内容请查看web开发系列
网友评论