http缓存
缓存是什么?
浏览器缓存指当我们使用浏览器访问http服务器时,根据服务器返回的缓存设置响应头将响应内容缓存到浏览器,下次可以直接使用缓存内容或去服务器验证缓存内容是否过期即可,减少传输的数据量.
实现
If-Modified-Since(请求头) & Last-Modified(响应头)
If-Modified-Since
值是上次响应中的Last-Modified
,指自从该时间后文件有没修改过
Last-Modified
指文件最近一次修改的时间
If-None-Match(请求头) & ETag(响应头)
用于进行内容变更验证
ETag包括弱实体ETag: W/"xxx"
或强实体ETag: "xxx"
,弱实体指内容语义没变即可(比如内容的gzip版与非gzip版可以使用弱实体验证),强实体指字节必须一致.
Expires & Cache-Control
Expires
是http1.0规定的,Cache-Control
是http1.1中新增的
Expires
指文档的过期时间,当缓存的内容超过了这个时间则需要去服务器获取最新的内容
Cache-Control
指缓存控制,值可以是: max-age
max-age
指最大生存时间,单位秒,如max-age=20
表示最大生存20秒
说明:
Cache-Control
优先级高于Expires
- 一般情况下
Expires=当前系统时间+缓存时间(Cache-Control: max-age)
Age & Vary & Via
它们一般都用于代理层(如CDN)
Age
表示内容在代理层缓存了多长时间
Vary
用于代理层与浏览器协商什么情况下使用哪个版本的缓存内容(如压缩版与非压缩版),如响应头包含Content-Encoding:gzip
,即告知浏览器该代理层缓存了gzip版本的内容,后续的请求时Accept-Encoding
中包含gzip时才能使用该代理层缓存
Via
表示访问到最终内容经过了哪些代理层,用的什么协议,代理层缓存是否命中等,通过它可以进行一些故障的诊断.
浏览器常用快捷键
- F5刷新
- Ctrl+F5强制刷新
- 这时请求时不会带上
If-Modified-Since
,并带上Cache-Control:no-cache
与Pragma:no-cache
,表示告诉服务器请给我一份最新的内容
- 这时请求时不会带上