探讨下为何设置了Cache-Control:no-cache 服务器仍是返回304 Not Modified ?

前言

今天作项目的时候遇到一个问题,就是在ie11中 新增一条新的消息后页面刷新后,并无看到新增的消息,因而打开控制台发现前端

304 Not Modified 加时间戳没用浏览器

因而赶忙联系后台大佬能不能把cache-control改为Cache-Control:no-cache试试缓存

然而并没什么卵用,而后本身研究。服务器

浏览器缓存机制

  1. 当前缓存是否过时?
  2. 服务器中的文件是否有改动?

如何判断缓存的过时以及文件的变更?

主要的方式有两种,这两种都是设定请求头中的某一个字段来实现的: 一、Expires; 二、Cache-Control。因为Cache-Control设置后优先级比前者高,此次做者就先说下经过Cache-Control来控制缓存。代理

常见取值: no-cachecdn

若是request headers中,Cache-Control为no-cache。表示无论服务端有没有设置Cache-Control,都必须从从新去获取请求。blog

max-age=xxx:缓存的内容将在 xxx 秒后失效资源

max-age=0开发

max-age=0表示无论response怎么设置,在从新获取资源以前,先检验ETag/Last-Modifiedit

无论是max-age=0仍是no-cache,都会返回304(资源无修改的状况下),no-store才是真正的不进行缓存。

private: 客户端能够缓存(默认)

public: 客户端和代理服务器均可缓存(前端的同窗,能够认为public和private是同样的)

no-store: 全部内容都不会缓存,强制缓存,对比缓存都不会触发(对于前端开发来讲,缓存越多越好,so...基本上和它说886

相关文章
相关标签/搜索