扶凯

取势 明道 优术

作者为 扶 凯 发表

测试而无聊的过程就懒的写了…下面直接给结果出来.

根据我的测试在 Squid 中 Cache-Control: no-cache > Expires > refresh_pattern > Last-Modified .也就是讲,最前面的最重要,前面的生效后,后面的基本就失效了.

另外squid本身就能对比 Last-Modified,但根据我的测试,Etag 还是会要向源服务器发送请求头,来确认 etag 的.

ETag 默认是需要向源网站确认的, Last-Modified 默认是不向源服务器确认的.

HTTP 协议本身设计的优先级顺序如下:

最上面优先级最高,到下面最小:
Cache-Control: no-store
Cache-Control: no-cache
Cache-Control: must-revalidate
Cache-Control: max-age
Expires:
 

常用 Header 简单讲解:

1. 不缓存控制

  • Cache-Control: no-store : 禁止中间的缓存服务器存储这个对象.并给 header 转发给用户.
  • Cache-Control: no-cache : 缓存服务器可以给文件缓存在本地缓存区.只是在和源站进行新鲜验证前,不能提供给客户端使用.
  • Pragma: no-cache  这是兼容 HTTP/1.0 时使用.原则上只能用于 HTTP 请求.用处和 Cache-Control: no-cache 一样

2. 指定过期时间控制

  • Cache-Control: max-age 表示如果缓存服务器拿到这个文件后,这个对象多久之内是新鲜的,可用的,可以发给客户端使用的.
  • Cache-Control: s-maxage 行为和上面一样,只是只能使用于 public 地时候缓存.
  • Cache-Control: must-revalidate 默认的情况下,缓存代理是可以提供给用户一些旧的对象的内容,以提高性能.但如果原始服务器不希望这样,就可以配置这个选项.进行严格检查.比如源站不可用时,回源验证过程会失败.默认会吐旧的数据.但配置了这个以后会吐 504 Gateway Timeout
  • Expires:  这个作用和 max-age 是一样.但这是指定一个过期的日期,但不是秒数.所以不建议使用.因为很多缓存服务器和源服务器常常时间不同步,所以基于 max-age 是使用相对的时间来表示还剩下多少秒可用.不要使用 Expires 来使用绝对时间.

来了就留个评论吧! 9个评论



    squid 2008年12月5日 的 16:02

    你好
    咨询一个困扰我许久的问题,我的squid系统中常有类似地日志,请教是什么问题,是否有影响,谢谢!
    httpReadReply: Excess data from “GET http://124.108.120.50/config/isp_verify_user?l=_da_shit_&p=anal
    Dec 5 16:04:14 CNC-GDST-9-6 squid[21819]: httpReadReply: Excess data from “GET http://124.108.120.50/config/isp_verify_user?l=_becky_98&p=anal
    Dec 5 16:04:15 CNC-GDST-9-6 squid[21814]: httpReadReply: Excess data from “GET http://124.108.97.251/config/isp_verify_user?l=mar1jane&p=beau

    admin 2008年12月6日 的 13:51

    检查一下你所在的网站吧。

    squid 2008年12月9日 的 13:59

    谢谢!
    再请教一下,这个怎么能禁掉吗

    admin 2008年12月10日 的 09:28

    看我另外的文章
    Apache关掉Etag和Last-Modified的方法
    http://www.php-oa.com/2008/12/03/etag-last-modified.html
    别的也有文章,就不详细找了

    Black 2008年12月17日 的 18:04

    我的squid有很多这个,不用acl限制IP要怎么才能禁掉?
    httpReadReply: Excess data from “GET http://69.147.112.212/config/isp_verify_user?&l=wombatrex&p=cavalier

      admin 2008年12月17日 的 21:15

      你是使用的squid2.5????

    admin 2008年12月17日 的 21:20

    httpReadReply: Excess data from很多人讲在windows上有问题,我不清楚,另外有的人讲升级一下就行了,你可以看看

    Black 2008年12月18日 的 09:36

    系统是 Linux Red Hat AS 4.4 内核2.6.9-42 还有 2.6.26.6
    squid版本是2.6.STABLE19
    一直搞不清楚这个东西那来的 也不知道怎么禁掉