缓存是一种保存资源副本并在下次请求时直接使用该副本的技术。缓存保存位置的不同,可以分为:
当web缓存发现请求的资源已经被存储,它会拦截请求,返回该资源的拷贝,而不会去源服务器重新下载。
这样带来的好处有:
Last-Modified
和Etag
字段,有的话执行协商缓存策略字段 | 协议版本 | 优先级 | 缺陷 |
---|---|---|---|
Expires: Data | (HTTP/1.0) | 低 | 返回的是服务器时间,可能与客户端时间有偏差 |
Cache-Control: max-age=N(second) | (HTTP/1.1) | 高 |
Etag
字段,则客户端将If-None-Match:Etag
的值添加到请求头发送给服务器Last-Modified
字段,则客户端将If-Modified-Since:Last-Modified
的值添加到请求头发送给服务器由源服务器校验,如果资源未过期则返回304状态码,浏览器直接使用缓存,否则返回200OK状态码和新资源。
字段 | 协议版本 | 优先级 | 缺陷 |
---|---|---|---|
Last-Modified: Data | (HTTP/1.0) | 低 | 只能精确到秒,1秒内多次修改的文件无法被识别 |
Etag: string | (HTTP/1.1) | 高 |
客户端不与服务器通讯,直接从内存中读取缓存。此时的数据保存在内存中,关闭浏览器后,数据被当作垃圾回收清空。
客户端不与服务器通讯,直接从磁盘中读取缓存,因为数据保存在磁盘中,就算关闭浏览器数据还是存在,下次打开只要数据不过期就可以直接读取。
客户端与服务器通讯,服务器验证资源是否需要更新,如果不需要更新服务器返回304状态码,然后客户端直接从缓存中读取数据。