Web中Cache相关的header
1. 控制页面缓存相关:
折叠复制代码
- #Request相关的Headers:
- #HTTP/1.0协议,不缓存页面
- Pragma: no-cache
- #HTTP/1.1协议,不缓存,请求后得到200的响应值
- Cache-Control: no-cache
- #response相关的Headers:
- #相对的过期时间,20s后过期
- Cache-Control: max-age=20
- #固定的过期时间,等同max-age,但是如果同时存在,则被Cache-Control的max-age覆盖
- Expires: Mon, 02 Aug 2010 05:15:16 GMT
2. 检查页面缓存相关:
折叠复制代码
- #以下是Response的headers:
- #页面最后的修改时间
- Last-Modified: Wed, 28 Jul 2010 09:46:14 GMT
- #页面的Etag,因为Last-Modified只能精确到秒,如果某个文件在一秒内修改了多次,那么Cache的判断可能就不准确了,所以才增加了Etag的判断
- Etag: "a21619-7e76-4b03666f"
- #以下是Request的headers:
- #check文件是否修改
- If-Modified-Since: Wed, 18 Nov 2009 03:13:51 GMT
- #check对应的Etag
- If-None-Match: "eae2fb-7e76-4b03666f"
3. 页面cache的检查流程:
- Client首次请求页面,Server端返回200 OK,同时,返回如下的header,表明该文件20s后过期:
- 00:00:04.494 ! 0.009 924 1550 GET 200 gif http://mail.sohu.com/test/test.gif
- #Response headers
- Etag: "a21619-7e76-4b03666f"
- Last-Modified: Wed, 28 Jul 2010 09:46:14 GMT
- Expires: Mon, 02 Aug 2010 05:15:16 GMT
- Cache-Control: max-age=20
- 用户如果在cache失效之前,在地址栏按回车,则Client会直接从Cache中读取,此时不会往Server发请求。如果Cache已经过期,则发送的请求和按F5的一样:
- 00:01:07.468 ! 0.002 0 0 GET (Cache) gif http://mail.sohu.com/test/test.gif
- 用户按F5刷新,此时Client会带着If-Modified-Since和Etag到Server端去请求,Server会检查页面的Last-Modified和Etag是否有变化,若没有变化,则返回304,同时重新设置新的Expires时间。如果文件有变化,则会返回200
- 00:00:00.000 ! 0.012 949 220 GET 304 gif http://mail.sohu.com/test/test.gif
- #Request header:
- If-Modified-Since: Wed, 28 Jul 2010 09:46:14 GMT
- If-None-Match: "a2161c-7fbb-4b26ed49"
- #Response header:
- Expires: Mon, 02 Aug 2010 06:46:40 GMT
- Cache-Control: max-age=20
- Etag: "a2161c-7fbb-4b26ed49"
- 用户按Ctrl+F5刷新,此时Client会加上no-cache的header去请求,Server端直接返回200
- 00:02:13.149 ! 0.008 924 1550 GET 200 gif http://mail.sohu.com/test/test.gif
- #Request header;
- Cache-Control: no-cache
- #Response header:
- Last-Modified: Wed, 28 Jul 2010 09:46:14 GMT
- Expires: Mon, 02 Aug 2010 06:48:53 GMT
- Cache-Control: max-age=20
- 用户清除本地缓存后再请求,则和首次请求该页面一样,Server端返回200
折叠复制代码
折叠复制代码
折叠复制代码
折叠复制代码
这文章也不错,收了