squid判断文件是否修改机制分析
前提:
1.我写了一个简单的http服务器,以下简称 httpserver
2.前端使用squid做反向代理,以下简称 squid。squid同时反向代理了2台http服务器,其中一台是httpserver,另外一台是nginx
问题:
查看access.log发现,通过squid请求httpserver上的文件时,squid的都会TCP_MISS。
但是通过同一个squid,nginx的文件可以TCP_HT,说明squid本身应该没有问题,也许是httpserver有问题。
没有头绪,抓包分析一下吧
第一次抓包(squid与httpserver之间的包):
squid向httpserver发起GET,httpserver返回了信息,httpcode 200.没有发现什么问题。
第二次抓包(squid与nginx之间的包):
squid向nginx发起了GET,nginx不是返回200,而是返回304 not modified.
查看http header,发现squid发GET请求时,http header中有一项:If-Modified-Since: Sat, 15 Feb 2014 08:36:33
nginx回复squid时,http header中有一项:Last-Modified: Sat, 15 Feb 2014 08:36:33 GMT
似乎发现了什么。。
对话大致是这样的:
squid问nginx:从15 Feb 2014 08:36:33这个时间开始,这个文件有没有被修改过?
nginx答squid:上次修改时间是15 Feb 2014 08:36:33
也就是说这个文件没有修改,这就完成了一次缓存确认的过程。
第三次抓包(抓squid与nginx之间,从未被缓存过的文件):
squid向nginx发起了GET,nginx返回200,http header中有一项为 Cache-Control: max-age=25920
这个http header说明这个文件是可缓存的,缓存时间为25920。
那么httpserver要这么改:
1.在发送文件的http header中加上Cache-Control
2.处理请求中的http header的If-Modified-Since项。
Last-Modified格式代码如下:
随手写的,格式注意改改
1
2
3
4
5
|
//Last-Modified: Sat, 15 Feb 2014 08:36:33 GMT\r\n time_t tNowTime = time(NULL); tm* tTm= localtime(&tNowTime); char achbuff[ 100 ] = { 0 }; strftime(achbuff, 100 , "Last-Modified: %a, %d %b %Y %H:%M:%S GMT\r\n\r\n" , tTm); |
squid判断文件是否修改机制分析的更多相关文章
- JFS 文件系统概述及布局分析
JFS 文件系统概述及布局分析 日志文件系统如何缩短系统重启时间 如果发生系统崩溃,JFS 提供了快速文件系统重启.通过使用数据库日志技术,JFS 能在几秒或几分钟之内把文件系统恢复到一致状态,而非日 ...
- Junit 注解 类加载器 .动态代理 jdbc 连接池 DButils 事务 Arraylist Linklist hashset 异常 哈希表的数据结构,存储过程 Map Object String Stringbufere File类 文件过滤器_原理分析 flush方法和close方法 序列号冲突问题
Junit 注解 3).其它注意事项: 1).@Test运行的方法,不能有形参: 2).@Test运行的方法,不能有返回值: 3).@Test运行的方法,不能是静态方法: 4).在一个类中,可以同时定 ...
- Java 类反射机制分析
Java 类反射机制分析 一.反射的概念及在Java中的类反射 反射主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.在计算机科学领域,反射是一类应用,它们能够自描述和自控制.这类应用通过某 ...
- 关于开发中 hosts 文件的修改
这篇文章只是给自己做个笔记吧. 最近的工作经常要改 hosts 文件(C:\Windows\System32\drivers\etc\hosts),并且改完后不立即生效.小胡子哥 提到: 因为服务器设 ...
- Java 动态代理机制分析及扩展
Java 动态代理机制分析及扩展,第 1 部分 王 忠平, 软件工程师, IBM 何 平, 软件工程师, IBM 简介: 本文通过分析 Java 动态代理的机制和特点,解读动态代理类的源代码,并且模拟 ...
- Java代理和动态代理机制分析和应用
本博文中项目代码已开源下载地址:GitHub Java代理和动态代理机制分析和应用 概述 代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问.代理类负责为委托类预处理消息 ...
- linux RCU锁机制分析
openVswitch(OVS)源代码之linux RCU锁机制分析 分类: linux内核 | 标签: 云计算,openVswitch,linux内核,RCU锁机制 | 作者: yuzhih ...
- Linux 线程实现机制分析 Linux 线程模型的比较:LinuxThreads 和 NPTL
Linux 线程实现机制分析 Linux 线程实现机制分析 Linux 线程模型的比较:LinuxThreads 和 NPTL http://www.ibm.com/developerworks/c ...
- Linux内核抢占实现机制分析【转】
Linux内核抢占实现机制分析 转自:http://blog.chinaunix.net/uid-24227137-id-3050754.html [摘要]本文详解了Linux内核抢占实现机制.首先介 ...
随机推荐
- CENTOS7设置显示中文
vi /etc/locale.conf LANG="zh_CN.UTF-8" LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN&quo ...
- js 数组对象,数组的使用
var a =new Array(1,2,3,4,'a','b','c',{x:1,y:2}); alert(a[7].x); //数组之中可以定义数组. var b=['a','b','c']; c ...
- Tasks、 activity 及 activity stack
一. Activity的四种加载模式 Activity之间的跳转,或者说加载一个新的Activity,一般对于开发者来说,都不是一个太难的问题.直到后来随着不断的深入,才发现原来Activity的加载 ...
- python函数基础以及函数参数简解
python中函数分为函数.内置函数Python所有的内置函数 自定义函数要使用def语句,依次写出函数名.括号.括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回. ...
- 【EF 2】浅谈ADO数据模型生成串(二):数据库连接串分析
导读:上篇博客中介绍了ADO生成串的前一部分,本篇博客结合报错,接着介绍剩下的部分. 一.代码展示 <span style="font-family:KaiTi_GB2312;font ...
- js的二元三元操作符
二元 if ( a == b) { alert(a) } // (a == b) && alert(a) if ( a != b) { alert(a) } // (a == b) | ...
- 在CentOS 7上安装Python3.5源码包
最近开始系统学习Python 3.5,发现CentOS 7系统自带的python版本是Python 2.7.现在要使用Python 3.5该怎么办?方法大体跟安装其他程序一样.以下为详细经过: 1.事 ...
- 在ASP.NET开始执行HTTP请求的处理程序之前
using Dscf.Client.Web.Class; using Dscf.Client.Web.DscfService; using Dscf.Client.Web.Handler; using ...
- iOS常用插件
iOS常用插件总结:http://blog.csdn.net/oik_ios/article/details/50251191http://www.jianshu.com/p/d24eea8b405a ...
- ORA-12518 TNS:监听程序无法分发客户机连接 解决办法
查询的脚本: select count(*) from v$process; --取得数据库目前的进程数. select value from v$parameter where name = 'pr ...