http请求与squid以及apache联系

看了两天的squid,可能和之前用过squid的人,我的见识还是少,但是自己研究也挺费劲,没人交流,

写篇文章希望大家来讨伐一下,有不对的地方大家多多交流,我只是写出我的一部分心得,因为网上并没有关于这方面系统的说法(我查阅时的感受很费劲),所以写出来大家学习能快一些:

首先大家需要了解一下http header的用法这个不多说,大家可以查资料,这个网上很多,解释的也很清楚不会产生疑问

主要是举例子:

首先除去squid,我们做客户端与服务器apache之间的请求与访问:

比如你第一次浏览页面

http://192.168.135.3/index.html

通过firebug,我们可以查看请求状态信息

服务器相应:

客户端请求:

此时status状态是200,原因是第一次请求,客户端请求没有相应的header信息(具体什么信息下面说出)

 

 

接下来我们刷新,刷新也就是重新请求一次服务器,和直接回车不一样,直接回车读的是客户机浏览器自己缓存的内容,大家可以做实验,

上面的Cache-Control             max-age=20秒(与expire信息相同意义,一个是相对时间,一个是绝对时间)

如果你不停的按回车,firebug不会有任何信息输出,说明是在请求自己浏览器的缓存,并不向服务器发送请求,如果20秒后大家会发现firebug里出现了客户端请求信息和服务器相应信息了,说明你浏览器缓存时间已过20秒,所以会重新向服务器发送请求,此时效果与你刷新一次浏览器效果一样,大家来看:

客户端相应:

此时status状态时304 Not Modified,

 关于为什么是304,过程是这样的:

第一次时服务器响应后客户端浏览器也就缓存了相应的缓存信息,

当第二次请求时,客户端会比第一次header多带了几个参数

大家可以看到

            If-Modified-Since             Fri, 21 May 2010 02:09:45 GMT

            If-None-Match             "38fd22-31-2f52ec40"

此时请求服务器就会根据此参数与服务器端进行对比,

Last-Modified             Fri, 21 May 2010 02:09:45 GMT

            Etag             "38fd22-31-2f52ec40"

发现你客户端浏览器中的缓存和服务器端的能对应上,没问题,返回304,你自己去你的浏览器中提取页面吧,服务器不返回页面数据,所以交互过程是这样的,

如果此时服务器端的页面你修改过了,那这两个参数肯定和服务器端的参数对应不上,那此时就会重新发送页面信息,status也就变为200了。

 

 然后我们加入squid代理,关于概念的东西不多说可以看资料,具体说说squid实现的例子:

首先如果你第一次访问该页面,浏览器也没有任何缓存信息,你直接访问squid,squid是不会有该url信息的,所以会访问apache,此时apache会将内容返回,squid会存储然后返回客户端,这一交互过程导致status为200,理解起来也不困难,

服务器响应:

 

客户端请求:

 

此时大家看服务器端的squid状态时           X-Cache           MISS from mycacheserver

说明没有命中。

 

但是当第二次访问的时候:

服务器响应:

 

 

           客户端请求:

此时状态信息为304,这个304状态是怎么交互的呢,这点就是我的推论了,一样和我们上面所讲的,客户端会请求squid,squid会与你提交上来的header信息与其做对比,如果没有问题,返回你304,此刻你还是请求你自己浏览器的信息,

那大家会问要你squid的存在干啥,此刻你的作用和apache的作用没有什么区别,我觉得squid的作用不是在这,

上面确实没有体现出squid的优势,但是看下面例子

刚才我们提交的url已经在squid进行了缓存,如果该缓存在有效的时间内没有过期的话我们看:

 

客户端请求:

大家会问客户端没有缓存信息了啊,对的我给清除了缓存相当于代表很多第一次进入网站的人们,他们第一次浏览所以并没有缓存,

但是服务器相应段确显示了           X-Cache           HIT from mycacheserver,说明缓存命中,并且squid日志的TCP_MEM_HIT:NONE

说明是内存中命中,应该是squid最好的效果,

交互过程:squid通过你提交的url以及accept等信息作为key值查看是否存在缓存内容,如果存在并且不过期,就没有必要访问apache了

直接把数据传给客户,此时status为200,也就是说你访问的是squid数据而不是浏览器的数据了,此刻我们可以修改apache的文件,如果改成输出bbbbb,而缓存在squid的数据是之前的aaa,那客户端得到的数据会是aaa,证明数据时squid的而不是apache的,

 

如果squid的缓存时间失效了,此时客户端发起请求

大家可以看到           X-Cache           MISS from mycacheserver

此时状态仍然是200,但这时候数据就是从apache重新获取的了此时页面显示了bbb,squid就会重新缓存该数据,同样会具有过期时间了

 

我想大家看完上面例子会对http请求方式有所了解了,有不对的地方希望大家指出,我只是推论而已,谢谢

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值