我环顾四周,但一直没能找出如果我应该使用了ETag 和一个Expires头或一个或另一个.
我要做的是确保我的Flash文件(以及其他图像以及当这些文件发生更改时不仅会更新.
我不想做任何特别的事情,例如更改文件名或在URL的末尾添加一些奇怪的字符以使其不被缓存.
另外,在我的PHP脚本中,我需要以编程方式执行任何操作以支持此操作,还是所有Apache?
浏览器何时不向服务器请求文件?
换句话说,我有一个JavaScript文件正在服务.其HTTP响应报头具有一个ETag,Cache-Control: public和Expires: Tue, 19 Jan 2038 03:14:07 GMT.
304浏览器缓存已准备好后服务器返回a .
我的问题是,为什么浏览器甚至检查服务器并首先获得一个304?我不希望浏览器询问是否有新版本 - 它应该直接从浏览器缓存加载而不检查服务脚本的服务器的修改.
HTTP响应头的哪些组合实现了这一点?
这是关于提供图像的Web应用程序.由于相同的请求将始终返回相同的图像,我希望访问的浏览器尽可能积极地缓存图像.我非常想告诉浏览器
这是你的形象.继续保持它; 在接下来的几天里,它真的不会改变.无需再回来.真.我承诺.
到目前为止,我确实做到了
Cache-Control: public, max-age=86400 Last-Modified: (some time ago) Expires: (two days from now)
当然,304 not modified如果请求具有适当的If-Modified-Since标题,则返回a .
有什么我可以做的(或者我应该采取不同的做法)将我的信息传递给浏览器吗?
该应用程序托管在Google App Engine上,以防万一.
在Apache的mod_expires模块中,有一个Expires指令有两个基本时间段,访问和修改.
ExpiresByType text/html "access plus 30 days"
Run Code Online (Sandbox Code Playgroud)
可以理解的是,缓存将在30天后请求新鲜内容.
然而,
ExpiresByType text/html "modification plus 2 hours"
Run Code Online (Sandbox Code Playgroud)
没有直觉意义.
除非向服务器发出请求,否则浏览器缓存如何知道文件已被修改?如果它正在调用服务器,缓存此指令有什么用?在我看来,我不理解缓存的一些关键部分.请赐教.
我正在尝试在我的Web应用程序中调试一些棘手的行为:看起来好像客户端正在发送XHR GET请求,但服务器实际上从未接收过它.此外,客户端似乎在看不见的请求中接收重复数据,因为它发送的先前XHR请求.
更令人困惑的是,Firebug将第二个XHR请求标记为Net面板中的浅灰色(这里的请求是从底部开始的第三个,第二个是"GET测试"):

我无法找到任何关于这种着色意味着什么的文件.我想如果我理解这一点,它可能有助于解释这种不寻常的行为.
如果有人有任何见解,如果你能让我知道,我将不胜感激.
caching ×4
http ×3
browser ×2
etag ×2
http-headers ×2
apache ×1
firebug ×1
javascript ×1
mod-expires ×1