HTTP 缓存控制学习

缓存 在 HTTP/1.1 协议 http://www.w3.org/Protocols/rfc2616/rfc2616.html 里, HTTP 的缓存处理步骤。 步骤一,第一次请求文件时。 服务器响应头中将给出该文件的缓存相关属性 Cache-Control 缓存控制开关 Expires 缓存超时时间(HTTP/1.0 遗留,被 Cache-Control 代替) Pragma 是否禁用(HTTP/1.0 遗留,被 Cache-Control 代替) Last-Modified 文件最后修改时间 ETag 文件标识 步骤二,第二次请求文件时,浏览器根据当前缓存的属性做出下一步的判断。 首先通过 Pragma 和 Cache-Control 判断本地缓存开关,优先级 Pragma > Cache-Control。如果判断缓存禁用,则直接向服务器请求文件,并要求服务器禁止缓存。 如果缓存开启,则通过 Expires 和 Cache-Control 判断缓存时间是否超时,优先级顺序是 Cache-Control > Expires。如果判断缓存可用,则直接使用本地缓存,不进行任何请求。 如果判断缓存超时,则向服务器发起请求,进入步骤三。 步骤三,浏览器判断缓存超时了,这时浏览器请求需要附加上当前缓存的相关属性,由服务器进行判断是否缓存。 如果当前缓存存在 Last-Modified 属性,则浏览器提交 If-Modified-Since 头,要求服务器判断文件修改时间是否更新。 如果当前缓存存在 ETag 属性,则浏览器提交 If-None-Match 头,让服务器判断文件 Hash 值是否匹配。...

December 3, 2022 · 1 min · lyincc