HTTP Cache

2020-05-30  本文已影响0人  李桐2000

本文为web开发系列的一部分。

HTTP协议的Cache机制

HTTP协议提供Cache机制,当相应数据没有变化时,不会返回数据,减少网络带宽使用。

它主要包含

  1. HTTP头中Cache-Control相关定义

  2. 客户端如何使用Cache-Control和服务端通信,并进行相应操作。

  3. 服务端如何使用Cache-Control和客户端通信,并进行相应操作。

目前主流浏览器都支持HTTP Cache,这意味着只要在服务端实现相关操作,web系统就能够使用HTTP Cache。

推荐实现

下面提供一个推荐方案,它能够实现

  1. 如果服务端的响应数据没有变化,则不消耗网络带宽(只返回一个状态码),浏览器使用本地缓存数据。

  2. 如果服务端的响应数据发生变化,则返回最新数据,浏览器更新本地缓存数据。

主要步骤为

  1. 对于GET方法,服务器在响应头中增加Cache-Control:private, no-cacheEtag:<data-token>
    private:表示本次请求返回的cache只对此请求者可见。
    no-cache:表示浏览器能够cache响应,但在使用前必须验证。
    <data-token>: 一般是字符串,对应返回数据的唯一标识。推荐使用返回数据的checksum值,例如MD5 hash值。

  2. 浏览器接受返回结果,缓存返回结果和Etag

  3. 浏览器再次以GET方法请求此URL时,会在请求头中增加If-None-Match: <data-token>,表示需要验证此cache是否有效

  4. 服务器验证结果是否发生变化(采用相同的checksum算法),如果<data-token>值一致,则返回304,如果<data-token>发生变化,则返回200,并在响应头中增加Cache-Control:private, no-cacheEtag:<data-token>

  5. 浏览器如果收到304状态码,则使用步骤2中缓存的响应结果,如果收到200状态码,则会更新结果缓存和Etag。

参考资料

更多内容请查看web开发系列

上一篇 下一篇

猜你喜欢

热点阅读