kam*_*ens 23 google-app-engine caching webkit google-chrome http-status-code-304
情况:运行Google App Engine站点,我的静态内容的default_expiration设置为"14d"
问题:在Chrome和Safari中,访问URL(不重新加载,只是将光标放在地址栏中并按Enter)会导致大量请求被If-None-Match标头触发.正如预期的那样,响应总是304 Not Modified.我可以看到这些请求在Charles或Fiddler等调试代理中被触发.
想要:完全避免这些请求和完全针对静态内容的304响应 - 只需信任浏览器缓存的内容即可.
我们使用标准的"缓存静态内容很长一段时间,当我们需要破坏缓存"系统时,我们将负责对我们的查询字符串进行附加?version = {version}修改,所以我们真的很想避免304的.
信念:我认为这是由app引擎随每个静态内容响应发送的etag标头引起的.在App Engine SDK并没有下来发送这个头,并与SDK乱搞的时候我没有看到这个304的行为.
有什么建议?你可以关闭app引擎静态内容的etags吗?
更新了静态内容的示例: http ://www.khanacademy.org/stylesheets/shared-package/compressed.css
虽然我不相信有任何方法可以控制GAE的etags标头行为,但这是由于WebKit中的一个错误导致在POST请求后接收302重定向时重新下载所有静态内容.
一旦WebKit修复了这个bug,问题就会消失.
如果必须,您可以通过刷新标头重定向而不是使用302重定向来暂时解决此特定的重定向后POST错误.
https://bugs.webkit.org/show_bug.cgi?id=38690
在Post/Redirect/Get上重新加载WebKit图像
http://www.google.com/support/forum/p/Chrome/thread?tid=72bf3773f7e66d68&hl=en
您需要删除Last-Modified和ETag标头.
通过删除ETag标头,您可以禁用缓存和浏览器以验证文件,因此他们不得不依赖您的Cache-Control和Expires标头.实体标记(ETag)是一种检查较新版本的缓存文件的机制.
删除Last-Modified和ETag标头,您将完全消除If-Modified-Since和If-None-Match请求及其304 Not Modified响应,因此文件将保持高速缓存而不检查更新,直到Expires标头指示新内容是可用的.
更多信息:http://www.samaxes.com/2008/04/htaccess-gzip-and-cache-your-site-for-faster-loading-and-bandwidth-saving/.
不幸的是,我不知道如何为GAE的静态内容关闭它们.
| 归档时间: |
|
| 查看次数: |
6262 次 |
| 最近记录: |