1. 控制页面缓存相关:



折叠复制代码




  1. #Request相关的Headers:

  2. #HTTP/1.0协议,不缓存页面

  3. Pragma: no-cache

  4. #HTTP/1.1协议,不缓存,请求后得到200的响应值

  5. Cache-Control: no-cache


  6.  

  7. #response相关的Headers:

  8. #相对的过期时间,20s后过期

  9. Cache-Control: max-age=20

  10. #固定的过期时间,等同max-age,但是如果同时存在,则被Cache-Control的max-age覆盖

  11. Expires: Mon, 02 Aug 2010 05:15:16 GMT




2. 检查页面缓存相关:



折叠复制代码




  1. #以下是Response的headers:

  2. #页面最后的修改时间

  3. Last-Modified: Wed, 28 Jul 2010 09:46:14 GMT

  4. #页面的Etag,因为Last-Modified只能精确到秒,如果某个文件在一秒内修改了多次,那么Cache的判断可能就不准确了,所以才增加了Etag的判断

  5. Etag: "a21619-7e76-4b03666f"


  6. #以下是Request的headers:

  7. #check文件是否修改

  8. If-Modified-Since: Wed, 18 Nov 2009 03:13:51 GMT

  9. #check对应的Etag

  10. If-None-Match: "eae2fb-7e76-4b03666f"




3. 页面cache的检查流程:



  • Client首次请求页面,Server端返回200 OK,同时,返回如下的header,表明该文件20s后过期:


  • 折叠复制代码




    1. 00:00:04.494 ! 0.009 924 1550 GET 200 gif http://mail.sohu.com/test/test.gif

    2.  

    3. #Response headers

    4. Etag: "a21619-7e76-4b03666f"

    5. Last-Modified: Wed, 28 Jul 2010 09:46:14 GMT

    6. Expires: Mon, 02 Aug 2010 05:15:16 GMT

    7. Cache-Control: max-age=20




  • 用户如果在cache失效之前,在地址栏按回车,则Client会直接从Cache中读取,此时不会往Server发请求。如果Cache已经过期,则发送的请求和按F5的一样:


  • 折叠复制代码




    1. 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


  • 折叠复制代码




    1. 00:00:00.000 ! 0.012 949 220 GET 304 gif http://mail.sohu.com/test/test.gif

    2.  

    3. #Request header:

    4. If-Modified-Since: Wed, 28 Jul 2010 09:46:14 GMT

    5. If-None-Match: "a2161c-7fbb-4b26ed49"

    6.  

    7. #Response header:

    8. Expires: Mon, 02 Aug 2010 06:46:40 GMT

    9. Cache-Control: max-age=20

    10. Etag: "a2161c-7fbb-4b26ed49"




  • 用户按Ctrl+F5刷新,此时Client会加上no-cache的header去请求,Server端直接返回200


  • 折叠复制代码




    1. 00:02:13.149 ! 0.008 924 1550 GET 200 gif http://mail.sohu.com/test/test.gif

    2.  

    3. #Request header;

    4. Cache-Control: no-cache

    5.  

    6. #Response header:

    7. Last-Modified: Wed, 28 Jul 2010 09:46:14 GMT

    8. Expires: Mon, 02 Aug 2010 06:48:53 GMT

    9. Cache-Control: max-age=20




  •   用户清除本地缓存后再请求,则和首次请求该页面一样,Server端返回200