关于cache-control

浏览器加载网页时,通常会执行两种cache-control策略,no-cache或private。

no-cache 指强制更新,一般用于html文档,因为html当中引用了很多img、css和js资源,必须到服务器获取最新的html文档,以便查看这些引用资源是否有了更新。

验证的方式为浏览器发送一个包含If-None-Match:ETag 的空数据包到服务器,这里的ETag是这个html文档在本地缓存中的哈希值。当服务器收到这个请求之后,会把浏览器请求的ETag 和服务器上最新的ETag进行比对,若没有变化,就返回一个包含304状态码的空数据包,浏览器接到这个包之后会直接从缓存中读取html加载到页面,若有变化,则服务器返回最新的html文件,浏览器再根据这个新的html去请求新的资源。

这里没有讲根据文件修改时间来判断是否有效,我们在编写网页时最好给所有的资源都加上哈希值,通过文件的修改时间来判断文件是否发生变化,是不科学的,因为即使在服务器上简单的复制粘贴也会引起修改时间变化,所以根据文件内容而生成的哈希值,更能反映文件变化。

private 指超时更新,主要用于img、js、css等大文件,当上述html没有发生变化时,那我们就判断一下这些大文件的max-age,看看有没有过期,max-age是一个倒计时,指的就是文件的有效期,通常数值会很大,十几小时甚至几天时间,如果还有效的话就直接加载。

这里也没有讲根据文件expires属性判断超时,因为他存在着一个时差bug,可以利用他进行非法登录,容易造成安全隐患,现在除了用它来标记失效,已经很少用到它了。

你可能感兴趣的:(关于cache-control)