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\ntime_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内核抢占实现机制.首先介 ...
随机推荐
- WebService之基于REST机制的实现实例(Java版)
REST是REpresentational State Transfer的缩写(一般中文翻译为表述性状态转移).2000年Roy Fielding博士在他的博士论文“Architectural Sty ...
- 线程中CreateEvent和SetEvent及WaitForSingleObject的用法
首先介绍CreateEvent是创建windows事件的意思,作用主要用在判断线程退出,线程锁定方面. CreateEvent 函功能描述:创建或打开一个命名的或无名的事件对象. EVENT有两种状态 ...
- PAT1015. Reversible Primes
//题的理解是n在基数b中的的表示中,正序和逆序值都是素数,但是其实可直接判断n,因为n在b中的正常序列值就是再换成十进制就是n,但是不A:不知道为什么 用笨方法,先把n展开成b进制,正常计算其实是翻 ...
- js设计模式-单例模式
JavaScript中的单例模式是最常用的.最基本的设计模式,它提供了一种命名空间,减少全局变量泛滥的代码管理机制: 1.最常见的单例模式: [javascript] view plain cop ...
- 十四、Struts2的国际化
十四.Struts2的国际化 1.配置全局国际化消息资源包 配置全局消息资源包 <!--配置全局消息资源包 --> <constant name="struts.c ...
- windows phone主题切换(换肤)
之前项目做了个主题切换的功能,最后客户没来得及出第二套界面给放弃了,默哀中... 为了不让它就这样流产了,就放博客共享吧. 首先说明下原理:这个切换是通过重写资源字典里指定的样式,在运行的过程中加载指 ...
- MYSQL将表名称修改成大写的存储过程
1. 条件: 1.1 Mysql设置对大小写敏感 2. 执行下述存储过程: #call uppercase('库名') DROP PROCEDURE IF EXISTS uppercase; )) B ...
- C#中的快捷键,可以更方便的编写代码 (转载)
C#中的快捷键,可以更方便的编写代码 CTRL + SHIFT + B 生成解决方案 CTRL + F7 生成编译 CTRL + O 打开文件 CTRL + SHIFT + O 打开项目 CTRL + ...
- freefilesync 7 使用
官方下载地址:http://www.freefilesync.org/download.php 1.打开FreeFileSync 设置左右的文件夹,设置过滤规则,设置同步方式(双向.单向),执行同步 ...
- 四、MongoDB的查询
一.MongoDB的下载.安装与部署 二.MongoDB的基础知识简介 三.MongoDB的创建.更新和删除 db.blogs.insert([ { "author": " ...