技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 系统运维 --> 关于squid请求源服务器的响应中带Vary头

关于squid请求源服务器的响应中带Vary头

浏览:1628次  出处信息

    1. 源服务器返回的响应头不带”Vary: Accept-Encoding”

     不管客户端请求头中带不带”Accept-Encoding: gzip,deflate”,squid会只缓存一份对象

     1)如果第一个MISS的请求,客户端请求头中带”Accept-Encoding: gzip,deflate”。

     源服务器会返回带gzip压缩的对象给squid,squid会把这个gzip压缩之后的对象保存下来。

     以后不管客户端的请求头中是否带”Accept-Encoding: gzip,deflate”,都会把这个gzip的对象返回给client。

     2)如果第一个MISS的请求,客户端请求头中不带”Accept-Encoding: gzip,deflate”。

     源服务器会返回不压缩的对象给squid,squid会把这个没经过压缩的对象保存下来。

     以后不管客户端的请求头中是否带”Accept-Encoding: gzip,deflate”,都会把这个没压缩的对象返回给client。

     2. 源服务器返回的响应头中带”Vary: Accept-Encoding”

    

     squid会根据客户端每次不同的请求头中”Accept-Encoding”包含的值,squid会缓存多份对象,可能每份对象都相同。

     1)客户端请求头中不带”Accept-Encoding”。squid先判断是否存在以url为key的StoreENtry。

     2)如果不存在,squid请求原服务器,源服务器会返回一个不带压缩的对象给squid,squid会把这个没经过压缩之后的对象保存下来。

     存放的时候squid先创建一个StoreEntry(VaryData)对象,对象的http响应头是squid内部对象头,对象body部分保存这个url包含不同的

     accept-encoding值和这个值对应的StoreEntry的KEY。

     00002472 48 54 54 50 2f 31 2e 30 20 32 30 30 20 49 6e 74 |HTTP/1.0 200 Int|

     00002482 65 72 6e 61 6c 20 6d 61 72 6b 65 72 20 6f 62 6a |ernal marker obj|

     00002492 65 63 74 0d 0a 53 65 72 76 65 72 3a 20 73 71 75 |ect..Server: squ|

     000024a2 69 64 0d 0a 44 61 74 65 3a 20 4d 6f 6e 2c 20 31 |id..Date: Mon, 1|

     000024b2 34 20 4e 6f 76 20 32 30 31 31 20 30 38 3a 35 30 |4 Nov 2011 08:50|

     000024c2 3a 30 39 20 47 4d 54 0d 0a 43 6f 6e 74 65 6e 74 |:09 GMT..Content|

     000024d2 2d 54 79 70 65 3a 20 78 2d 73 71 75 69 64 2d 69 |-Type: x-squid-i|

     000024e2 6e 74 65 72 6e 61 6c 2f 76 61 72 79 0d 0a 45 78 |nternal/vary..Ex|

     000024f2 70 69 72 65 73 3a 20 54 75 65 2c 20 31 35 20 4e |pires: Tue, 15 N|

     00002502 6f 76 20 32 30 31 31 20 31 32 3a 33 36 3a 34 39 |ov 2011 12:36:49|

     00002512 20 47 4d 54 0d 0a 56 61 72 79 3a 20 41 63 63 65 | GMT..Vary: Acce|

     00002522 70 74 2d 45 6e 63 6f 64 69 6e 67 0d 0a 0d 0a 4b |pt-Encoding….K|

     00002532 65 79 3a 20 44 39 37 31 34 31 44 30 31 39 39 45 |ey: D97141D0199E|

     00002542 45 36 31 31 0a 56 61 72 79 44 61 74 61 3a 20 61 |E611.VaryData: a|

     00002552 63 63 65 70 74 2d 65 6e 63 6f 64 69 6e 67 3d 22 |ccept-encoding=”|

     00002562 67 7a 69 70 2c 64 65 66 6c 61 74 65 22 0a 4b 65 |gzip,deflate”.Ke|

     00002572 79 3a 20 31 42 31 43 32 31 34 34 44 38 38 30 36 |y: 1B1C2144D8806|

     00002582 46 35 32 0a 56 61 72 79 44 61 74 61 3a 20 61 63 |F52.VaryData: ac|

     00002592 63 65 70 74 2d 65 6e 63 6f 64 69 6e 67 3d 22 67 |cept-encoding=”g|

     000025a2 7a 69 70 2c 64 65 66 6c 61 74 65 2c 73 64 63 68 |zip,deflate,sdch|

     000025b2 22 0a 4b 65 79 3a 20 32 39 38 37 36 32 46 45 30 |”.Key: 298762FE0|

     000025c2 37 46 33 30 42 35 39 0a 56 61 72 79 44 61 74 61 |7F30B59.VaryData|

     000025d2 3a 20 61 63 63 65 70 74 2d 65 6e 63 6f 64 69 6e |: accept-encodin|

     000025e2 67 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |g……………|

     把这个创建好的StoreEntry(VaryData)内部对象保存到磁盘之后,squid再把从源服务器取回来的对象数据保存到根据url和”accept-encoding=value”产生的hash_key对象中。

     3)假设请求头中包含”Accept-Encoding: gzip,deflate”,如果squid查找url对应的StoreEntry(VaryData)对象的数据存在。

     squid读取磁盘中的StoreEntry对象,判断是VaryData对象,解析VaryData对象中包含的”accept-encoding=value”和对应的Key。

     a)如果请求有匹配的”Accept-Encoding: gzip,deflate”,读取”Accept-Encoding: gzip,deflate”对应的Key的StoreEntry数据返回给客户端。

     按照上面给出的Accept-Encoding: gzip,deflate对应的Key:298762FE07F30B59,那么返回hash_key: 298762FE07F30B59对应的StoreEnty。

     b)如果没有匹配的”Accept-Encoding: gzip,deflate”,squid去源服务器取数据(”Accept-Encoding: gzip,deflate”请求头),

     创建StoreEntry,把”Accept-Encoding: gzip,deflate”和key对应的值添加到VaryData中,写新的VaryData到新的文件里面,删除原来的文件。

     把从源服务器取来的数据写到新的StoreEntry中。

建议继续学习:

  1. 使用Squid缓存视频    (阅读:9186)
  2. 系统架构的一些思考    (阅读:5626)
  3. [调优] Squid 不同版本的性能对比    (阅读:4223)
  4. [squid] 过期时间在 60 秒内 squid 不 Cache 的问题    (阅读:3986)
  5. Squid 限制用户并发连接数    (阅读:3961)
  6. [Squid] TCP_MEM_HIT 和 TCP_HIT 的性能到底相差多远    (阅读:3658)
  7. squid缓存失效之谜:一步步提高squid缓存命中率办法记录    (阅读:3529)
  8. 加速WEB访问:使用DNSmasq与squid代理并过滤广告    (阅读:3351)
  9. squid对源网站进行限速    (阅读:3158)
  10. Squid 透明代理优化    (阅读:2710)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1