使用If-None-Match和Etag协商缓存json动态数据

本文介绍了如何利用HTTP1.1的If-None-Match请求头和Etag响应头进行协商缓存,以解决动态JSON数据的缓存问题。这种方法可以避免因数据偶尔更新而导致的旧数据使用,同时提升网页加载速度和减少服务器负载。通过在服务器端响应Etag并在后续请求中携带If-None-Match,服务器能根据时间戳判断数据是否过期,从而决定是否返回新数据或304状态码指示继续使用缓存。
摘要由CSDN通过智能技术生成

现代网页大多使用ajax获取动态json数据,有些json数据很大几乎不会修改,这样的数据就适合使用缓存来加快速度,减小流量,降低服务器的负荷。

普通的强缓存要指定时间,比如说24小时,这个时间很难定,因为这些数据虽然平时不会变动,但是一旦变动,因为有浏览器的缓存,页面上依旧使用旧数据,这样极大的限制了缓存的使用。

有没有一种办法既使用缓存,又不会使用旧数据呢?答案就是协商缓存。

协商缓存

协商缓存都会向服务器发送请求,判断缓存数据是否过期,过期的话会返回新的内容,没有过期则使用本地的缓存数据。具体的自己百度一下。实际上这个原来是用在web服务器上用来缓存静态资源的,静态文件都有文件修改时间,能够很简单的实现时间戳。如果要缓存动态数据,需要自己查询数据库来实现时间戳检查。

http1.1 使用 请求头:If-None-Match , 响应头: Etag

只要服务器端能够响应上面的请求头,就可以实现协商缓存。如果服务器返回响应的时候在header加上Etag,那么下次请求该资源的时候,浏览器会在请求头里面自动加上If-None_Match,ajax请求也会自动加上,这个功能就像cookies一样,为每个缓存加上标记。

协商缓存就是判断之前的Etag是否过期,通常使用时间戳来代表这个数据什么时候更改了,如果没有更改就返回304状态码,告诉浏览器继续使用缓存。时间戳可以用数据库中数据的更新时间,一旦该数据被更新了,就会加载新数据。

写成php代码就像下面一样,时间戳需要自己设计&#x

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值