浏览器访问资源时有三种情况:
- 第一次访问该资源,直接发送请求给服务器,服务器发送资源给浏览器
- 不是第一次访问,并且浏览器中该资源还未失效,直接访问浏览器中的资源——称为强缓存
- 不是第一次访问,并且浏览器中该资源已失效,发送请求到服务器,判断该资源在服务器中是否已修改:
若未修改,则继续使用浏览器中的资源
若已修改,则服务器发送新的资源到服务器
几个重要的参数
- cache-control: 包含在响应报文中,记录资源的有效时间——相对时间,单位为秒
- expires: 包含在响应报文中,记录资源的有效时间——格林尼治时间即绝对时间,优先级:cache-control高于expires,因此expires大部分情况下没什么作用,可以忽视
- last-modified: 包含在响应报文中,记录文件在服务器中的最后修改时间——格林尼治时间即绝对时间
- if-modified-since: 包含在请求报文中,将浏览器中记录的该资源的last-modified的值填进去,用于校验与服务器中资源最后修改时间是否相同——格林尼治时间即绝对时间
浏览器访问资源具体过程
304:表示文件内容没有修改过,最后修改时间一致
特殊情况:文件最后修改时间改变了,但文件实际内容没有改变
使用两个参数Etag和if-None-Match,Etag是基于文件内容生成的哈希值,独一无二,if-None-Match是浏览器中储存的Etag值,用于校验与服务器中的文件内容的Etag值是否相同