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

标签: CDN squid | 发表时间:2012-02-08 16:32 | 作者:士豪
出处:http://rdc.taobao.com/blog/cs

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中。

相关 [squid 服务器 vary] 推荐:

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

- - 淘宝核心系统团队博客
源服务器返回的响应头不带”Vary: Accept-Encoding”. 不管客户端请求头中带不带”Accept-Encoding: gzip,deflate”,squid会只缓存一份对象. 1)如果第一个MISS的请求,客户端请求头中带”Accept-Encoding: gzip,deflate”.

squid 服务器读取出现104 connection reset by peer 解决方法 (转)

- - 开心平淡对待每一天。热爱生活
      在CDN 系统中squid 充当着举足轻重的作用,要保证cdn 网站加速系统,就要保护squid 的正常工作,下对squid 服务器读取出现104 connection reset by peer 这个原因是由什么引起的呢. 经过在百度、google中查到说是开启了防火墙,或者说是查看访问日志.

Ubuntu安装squid作为内网的代理服务器(Proxy)的简单配制

- - CSDN博客系统运维推荐文章
我有一台Ubuntu Linux的机器,它有无线网卡,可以上外网. 我想把它设置为代理服务器,这样内网里的其他机器就可利用它作为代理上外网了. 在Ubuntu Linux上安装squid. 安装好后会自动启动,如果使用默认配制,在另一台机器上设置代理(这是我在Chrome上设置代理):. 看来还没有Access的权限,配制squid.

stunnel + squid 过墙

- - 移动开发 - ITeye博客
一台国外的Linux服务器. 软件介绍:  squid 高性能代理服务器  stunnel  TSL加密工具,因为我们的http都是明文传输的,所以必须使用工具对内容进行加密,才能躲过嗅探.  修改 stunnel.conf 默认位置  /etc/stunnel/. 只需修改 cert  位置为刚才 生成  stunnel.pem 的位置.

TCmalloc对squid的性能的提升

- caoxg - 开心平淡对待每一天。热爱生活
           TCmalloc对squid的性能的提升一、简介:. 1、安装tcmalloc所需要的libunwind库 [32位系统不用安装]. *注意:据说加上’–with-large-files’ 选项时编译会出错. 4、配置好squid并启动squid.. squid+tcmalloc: 20 型号:Dell R410 硬盘:2*SAS/146G/15K 内存:16G CPU:16.

自建CDN技术选型: squid varnish nginx

- - 鲁塔弗的博客
CDN的全称是Content Delivery Network,即内容分发网络. 其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定. 优化跨ISP网络访问速度,在国内大联通和大电信之间是世界上最远的距离,在国外,中国和其他地区很平行,用cdn可以优化全球响应速度.

squid,nginx,lighttpd反向代理的区别

- - 企业架构 - ITeye博客
[转载自]http://www.cnblogs.com/yihang/archive/2010/12/19/1910363.html. squid,nginx,lighttpd反向代理的区别. 反向代理从传输上分可以分为2种:. 1:同步模式(apache-mod_proxy和squid). 2:异步模式(lighttpd 和 nginx).

浅谈Squid在图片存储架构中的应用

- - 酷勤网-挖经验 [expanded by feedex.net]
酷勤网 � 程序员的那点事. 上一篇我表明了自己对缓存的立场:缓存一切可以缓存的资源. 并讨论了如何利用IIS自身的缓存功能来轻松满足中小规模的图片缓存需求. 关于IIS的客户端缓存和服务器端缓存的介绍大家可以回顾. 自从上一篇文章发表后,有不少朋友向我反馈:用IIS自身的缓存功能负载有限,建议使用.

使用squid定制企业上网行为管理系统

- - 启光博客
  场景:一台路由带约300台机器上网,内网服务器一台,内网ip192.168.6.172,其实这台机器还有个公网IP,为了避免部分网友逻辑混乱,先不提这个公网IP,如果只有内网IP也一样操作.   (1)使用Squid缓存部分常用资源,轻出口带宽压力.   (2)实现部分办公室职员和所有车间职员只允许访问邮箱和几个固定网站,中层领导和有其它需要的职员访问黑名单(淘宝、股票、游戏等)之外的网站,公司高层不受限制.

电子商务网站基础架构 nginx + memcached + tomcat + squid 集群

- - 企业架构 - ITeye博客
本文中 包含 nginx memcached tomcat 集群 的安装和配置. wget url 为下载所需的资源文件方式,也可以通过 VMware Tools 工具载入,. 如何安装 VMwareTools 参考本博客或者其他资料. 后面最后一章节是安装配置squid 在项目第一期不作要求. 第一章 安装配置nginx.