【转】request的cache-control和response cache-control不同点
原文地址:http://www.cnblogs.com/lwhkdash/archive/2012/11/04/2748291.html
HTTP协议中,关于一些头域的解释很模糊,网上的解释有些甚至是打架的,例如cache-control:no-cache,为了搞清这个头,google了不少资料,但很多都是各有各说法,甚至相互矛盾。http header中cache-control无疑是非常重要的一个头,往往涉及到性能问题,缓存,缓存代理等等都无法避免跟cache-control打交道。当然还有其他一些头域如last-modified,但它们含义都非常明确,至少没有cache-control那么含糊。
就连浏览器之间,对cache-control也有不同的理解,导致了对这个头的不同的表现。
网上很多关于cache-control的资料写得很模糊,我觉得很多都没有,或者可能是忽略了几个地方,使得我们看着这些资料的时候,似懂非懂。或者作者觉得某些地方足够容易理解,所以根本不觉得需要强调,但正是这些被忽略掉的“前提条件”令我们即使看完资料,也很难弄懂问题。那些对cache-control进行解释的资料通常会忽略的一些"前提条件"有这几个:
1.cache-control是出现在response还是request中。很多资料在解释cache-control时候,都没有指明是response中的cache-control(也就是由服务器应答时发送的cache-control)还是request中的cache-control(也就是由用户代理,通常是浏览器,请求资源时发送的cache-control)。
2.什么是缓存。“缓存”一词会有N种解释,特别是一些翻译自英文的资料。“缓存”可以指缓存的对象(object),也可以指HTTP消息链上的缓存系统,例如浏览器的缓存系统,和代理服务器上的缓存,或者一些专为缓存而设计的代理服务器(例如squid),也可以是原始服务器上的缓存(例如c#的cache对象)。而另一方面,根据语境不同,“缓存”也有可能指缓存的机制....N多。所以一些资料当忽略了这些,读者看了后,旧疑问还没搞清楚,又来了新疑问。
而说到HTTP链上的缓存系统,我们一般指浏览器的缓存系统,和代理服务器的缓存。
我所知道的关于cache-control指令的一些情况是:
当cache-control出现在request中:
cache-control:no-control 告诉HTTP消息链上的缓存系统(也就是浏览器的缓存和代理服务器上的缓存),本次请求要求忽略一齐缓存,必须是原始服务器重新计算生成回应给用户。所以,即使浏览器上的本地缓存未过期,或者代理服务器上的缓存未过期,都不要将这些缓存作为回应。当我们在浏览器中强制刷新页面(按ctrl+F5),发送的就是这个头(不同很多浏览器将cache-contro:no-cachel和pragam:no-cache两个头一起发送)
pragma:no-cache:和cache-control:no-control一样,不过出于兼容HTTP/1.0,所以有些浏览器会保留这个头。注意pragma:no-cache只应该出现在Request中,表明不想获取缓存。HTTP没有哪条条文对Response中的pragma:no-cache进行定义,所以Response中的pragma:no-cache是无效的。
当cache-control出现在response中:
cache-control:no-control 服务器告诉HTTP消息链上的缓存系统(比如varnish, squid,cdn等),不要缓存这个response结果。其实这个不是百分百肯定,而且不同浏览器好像接收到这个头时也有不同反应。
当response header有cache-control:no-control时:
chrome:再访问相同的URL时候是发出if-modified-since。这说明即使接收到cache-control:no-contro,chrome也会进行缓存。
IE9:再次访问相同URL时,跟第一次访问(无缓存情况下)一样,没有if-modified-since,也没有其他缓存相关的头域,而且缓存文件夹也没有缓存文件。也就是说,IE9接收到cache-control:no-contro,不会将response内容缓存起来。
FF:跟IE9行为类似
而另外,cache-control:no-store出现在response中才有意义,意思是告诉缓存系统不要缓存或者存储response内容(不要任何形式的存储,包括存储在缓存文件夹中,以免一些敏感信息外泄)。chrome,IE9,FF对这个头的实现是一样的。当接收到有这个头的response,三个浏览器的缓存目录都找不到相关的缓存文件。
【转】request的cache-control和response cache-control不同点的更多相关文章
- ASP.NET缓存OutputCache和Response.Cache之C#后台设置
一.ASPX页面缓存页面缓存的使用方法非常的简单,只需要在aspx页的顶部加一句声明<%@ OutputCache Duration="60" VaryByParam=&qu ...
- Nginx Errors: upstream response cache error
Nginx Errors upstream response cache error *2470578 an upstream response is buffered to a temporary ...
- Cache及(HttpRuntime.Cache与HttpContext.Current.Cache)
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/avon520/archive/2009/11/25/4872704.aspx .NET中Cache有两种调用方式:Ht ...
- 如何使用event 10049分析定位library cache lock and library cache pin
Oracle Library Cache 的 lock 与 pin 说明 一. 相关的基本概念 之前整理了一篇blog,讲了Library Cache 的机制,参考: Oracle Library c ...
- Spring cache简单使用guava cache
Spring cache简单使用 前言 spring有一套和各种缓存的集成方式.类似于sl4j,你可以选择log框架实现,也一样可以实现缓存实现,比如ehcache,guava cache. [TOC ...
- HTTP请求(Request)和回应(Response)对象
附录H HTTP请求(Request)和回应(Response)对象 57 http://djangobook.py3k.cn/ Django使用request和response对象在系统间传递状态. ...
- 关于library cache lock和row cache lock产生的常见原因
这两个等待事件其实很少出现在top5列表中,一般都没什么印象,在此整理记录以便以后查阅. 常见的library cache lock产生的原因在<高级OWI与Oracle性能调查>这本书和 ...
- Asp.net中的Cache--HttpRuntim.Cache 和 HttpContext.Current.Cache
在ASP.NET中有两个类都提供缓存支持, 一个是HttpRuntime类的Cache属性, 另一个是HttpContext类的Cache属性. 通过查看这两个属性的类型可以发现其实这两个属性都是Sy ...
- ARM Linux 内核 panic 之cache 一致性 ——Cortex-A9多核cache和TLB一致性广播
ARM Linux 内核 panic 之cache 一致性 ——Cortex-A9多核cache和TLB一致性广播 Cortex-A9的多喝CPU可以接收和执行一致性广播操作,当其使能并处于SMP模式 ...
- cache:annotation-driven" 的前缀 "cache" 未绑定
问题: Caused by: org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 29 in XML ...
随机推荐
- Django之模板继承
为了在Django模板配置中减少代码的冗余,需使用模板继承 1. 语法 {% block classinfo %} {% endblock} 2. 步骤 (1)创建一个base.html把需要显示的页 ...
- SSH框架(1)
一. SSH框架相关的面试题: 1. BeanFactory的作用是什么? [中] BeanFactory是配置.创建.管理bean的容器,有时候也称为bean上下文.Bean与bean的依 ...
- Windows下运行Hadoop
Windows下运行Hadoop,通常有两种方式:一种是用VM方式安装一个Linux操作系统,这样基本可以实现全Linux环境的Hadoop运行:另一种是通过Cygwin模拟Linux环境.后者的好处 ...
- Instruments检测解决内存泄露以及进行性能测试
1.启动Xcode自带的Instruments.这里有两种方法启动. 方法一: 方法二: 2.选择Leaks选项.(该选项用来进行内存泄漏检测) 说明: Leaks:找到引发内存泄漏的起点. Time ...
- 简述负载均衡和 CDN 技术
曾经见到知乎上有人问“为什么像facebook这类的网站需要上千个工程师维护?”,下面的回答多种多样,但总结起来就是:一个高性能的web系统需要从无数个角度去考虑他,大到服务器的布局,小到软件中某个文 ...
- nginx upstream配置
upstream *.com { server 127.0.0.1:5000 weight=10 max_fails=2 fail_timeout=30s;} server { listen 80; ...
- mysql实战优化之四:mysql索引优化
0. 使用SQL提示 用户可以使用use index.ignore index.force index等SQL提示来进行选择SQL的执行计划. 1.支持多种过滤条件 2.避免多个范围条件 应尽量避免在 ...
- mybatis-spring升级导致的异常
先记录一下,已被后面排查问题 升级前pom.xml依赖信息: <dependency> <groupId>org.mybatis</groupId> <art ...
- Py修行路 python基础 (五)三元运算 字符编码 元组 集合 三级菜单优化!
三元运算 条件判断不能加冒号: a=3 b=5 c=a if a<b else b oct() 转成八进制的简写:16进制 标志:BH为后缀或是0x为前缀hex() 转成16进制 元组 跟列表是 ...
- CORS跨域资源共享漏洞
CORS漏洞其中已经存在很久了,但是国内了解的人不是很多,文章更是少只有少,漏洞平台也没有此分类. 在DefConChina之后写了一篇算是小科普的文章. 定义CORS,Cross-Origin Re ...