空空叶博客 学习与开发博客

http缓存

2017-05-05
web

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秒

说明:

  1. Cache-Control优先级高于Expires
  2. 一般情况下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-cachePragma:no-cache,表示告诉服务器请给我一份最新的内容

上一篇 https

下一篇 java

目录