我环顾四周,但一直没能找出如果我应该使用了ETag 和一个Expires头或一个或另一个.
我要做的是确保我的Flash文件(以及其他图像以及当这些文件发生更改时不仅会更新.
我不想做任何特别的事情,例如更改文件名或在URL的末尾添加一些奇怪的字符以使其不被缓存.
另外,在我的PHP脚本中,我需要以编程方式执行任何操作以支持此操作,还是所有Apache?
根据雅虎针对高性能网站的最佳做法,我想从我的标题中删除Etags(我手动管理所有缓存,不需要Etags ......以及何时/如果我需要扩展到农场,我真的很喜欢他们走了).我在Windows Server 2008上运行IIS7.任何人都知道我该怎么做?
对于两个后续请求,浏览器会给予以下两个标题中的哪一个更多权重:其中一个更改:ETag或Last-Modified?
浏览器何时不向服务器请求文件?
换句话说,我有一个JavaScript文件正在服务.其HTTP响应报头具有一个ETag
,Cache-Control: public
和Expires: Tue, 19 Jan 2038 03:14:07 GMT
.
304
浏览器缓存已准备好后服务器返回a .
我的问题是,为什么浏览器甚至检查服务器并首先获得一个304
?我不希望浏览器询问是否有新版本 - 它应该直接从浏览器缓存加载而不检查服务脚本的服务器的修改.
HTTP响应头的哪些组合实现了这一点?
我试图理解这一点,并搜索SO以寻找类似的问题,但我仍然没有100%理解它应该如何工作.
我对图像资源的请求得到了这个响应:
Response Headers
Server Apache-Coyote/1.1
Date Mon, 19 Oct 2009 09:04:04 GMT
Expires Mon, 19 Oct 2009 09:06:05 GMT
Cache-Control public, max-age=120
Etag image_a70703fb393a60b6da346c112715a0abd54a3236
Content-Disposition inline;filename="binary-216-420"
Content-Type image/jpg;charset=UTF-8
Content-Length 4719
Run Code Online (Sandbox Code Playgroud)
所需的行为是客户端应该缓存120秒,然后再次从服务器请求它.在120秒内,没有请求发送到服务器.
然后,在120秒后,发送请求并收到304响应:
Response Headers
Server Apache-Coyote/1.1
Date Mon, 19 Oct 2009 09:06:13 GMT
Request Headers
Host localhost:8080
User-Agent Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3
Accept image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language en-us,no;q=0.8,sq;q=0.7,en;q=0.5,sv;q=0.3,nn;q=0.2
Accept-Encoding gzip,deflate
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive 300
Connection keep-alive
Referer http://localhost:8080/cms/site/0/en/home
Cookie JSESSIONID=768ABBE1A3BFABE3B535900233330650; versionsCssDisplayState=block; iceInfo=iceOn:false,activePortletKey:,icePagePanelX:1722,icePagePanelY:3
If-None-Match …
Run Code Online (Sandbox Code Playgroud) 我一直在读一本书,我对ETag章节有一个特别的问题.作者说ETag可能会损害性能,你必须对它们进行精细调整或完全禁用它们.
我已经知道ETag是什么并且了解风险,但是难以让ETag正确吗?
我刚刚创建了一个发送ETag的应用程序,其值为响应主体的MD5哈希值.这是一个简单的解决方案,易于用多种语言实现.
使用响应体的MD5哈希作为ETag是错误的吗?如果是这样,为什么?
为什么作者(显然超出我的许多数量级)不提出这样一个简单的解决方案?
除非你是作者:),否则最后一个问题很难回答,所以我试图找到使用MD5哈希作为ETag的弱点.
Expressjs自动发送etags.我想知道如何生成etag ..它是基于get例程动态生成的内容.或者我是否可以通过生成内容(动态内容 - 来自DB)并将etag作为相同的内容进行过程来对其进行维护.
可能是一个中间件,它只是检查它是否是有效的会话ID并传回客户端提供的相同etag,或者可能是基于url +会话ID ...这将是唯一的方式.并结束请求,而不是通过整个数据库调用和所有这些东西.在这种情况下,我需要知道客户端正在拨打304电话.
我可以使用expires标签.但是当会话结束时.如果有人打开网址,它不应该允许.所以我认为etag也应该基于会话ID.如何修改可以在此动态内容方案中工作.它可以用吗?
我在Apache上运行PHP,并对如何实现服务器端缓存感到困惑,以便加快网站加载速度.
是什么之间的区别Expires
,Last-Modified
以及ETag
头,哪一个应该在什么情况下使用?
使用Ext,默认Ext.Ajax添加到GET请求_dc
参数.例如
GET /ConnViewProcessing/?_dc=1263286227619
Run Code Online (Sandbox Code Playgroud)
如何删除此参数?
PS:有必要手动缓存对ETag
和的响应If-None-Match
.
etag ×10
http ×4
caching ×3
http-headers ×2
apache2 ×1
asp.net ×1
asp.net-mvc ×1
express ×1
extjs ×1
html ×1
iis-7 ×1
md5 ×1
mod-expires ×1
performance ×1
php ×1