我正在读这篇文章:http: //docs.codehaus.org/display/JETTY/LastModifiedCacheControl
它说
Jetty默认servlet允许使用cacheControl init参数为静态内容设置缓存控制头:
<init-param>
<param-name>cacheControl</param-name>
<param-value>max-age=3600,public</param-value>
</init-param>
Run Code Online (Sandbox Code Playgroud)
但是,我不确定我是否使用默认的servlet.至少这样的配置不在web.xml中:
<web-app>
<display-name>Wicket QuickStart</display-name>
<context-param>
<param-name>configuration</param-name>
<param-value>development</param-value>
</context-param>
<servlet>
<servlet-name>quickstart</servlet-name>
<servlet-class>org.apache.wicket.protocol.http.WicketServlet</servlet-class>
<init-param>
<param-name>applicationClassName</param-name>
<param-value>wicket.quickstart.WicketApplication</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>quickstart</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
Run Code Online (Sandbox Code Playgroud)
我想为静态资源配置缓存,例如:
/src/webapp/*,即:/src/webapp/images, /src/webapp/css, /src/webapp/js等
我应该加入什么web.xml?
我和我的朋友正在开发一款小游戏,我们希望与朋友分享开发阶段.所以我创建了这个小页面http://people.scs.carleton.ca/~manders8/game.html
现在它是我们正在更新的一个.class文件.但由于某种原因,它总是加载旧版本.我知道有一种方法可以关闭java缓存,但我的朋友不是那么称职.另外,为了让人们玩你的游戏,它应该非常容易,并且不需要像屏幕截图那样的5个步骤来试试.
我有这个标签:
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="no-cache">
<meta http-equiv="Expires" content="-1">
<meta http-equiv="Cache-Control" content="no-cache">
Run Code Online (Sandbox Code Playgroud)
因为我认为它可能与浏览器有关,但这没有帮助.
这是我的代码
<applet code="com.murderbody.prototype.TitleScreen.class" codebase="http://people.scs.carleton.ca/~manders8/content/" width=640 height=380></applet>
Run Code Online (Sandbox Code Playgroud)
从小程序更改为:
<object type="application/x-java-applet;version=1.5" width="640" height="380">
<param name="codebase" value="http://people.scs.carleton.ca/~manders8/content/">
<param name="code" value="com.murderbody.prototype.TitleScreen.class">
<param name="cache_option" value="no">
</object>
Run Code Online (Sandbox Code Playgroud) 在JSF页面模板中,我使用此代码来包含CSS资源:
<h:outputStylesheet library="css" name="mystyles.css" />
Run Code Online (Sandbox Code Playgroud)
实现CSS缓存清除的常用方法是添加版本参数v=123,但是在outputStyleSheet中不支持这种情况:
<h:outputStylesheet library="css" name="mystyles.css?v=123" />
Run Code Online (Sandbox Code Playgroud)
将导致JSF1064警告,并且将找不到CSS.
浏览器: Firefox 6.0
我使用以下设置进行页面A以确保内容未存储在浏览器的bfcache中:
1) $(window).unload(function(){});
2)以下HTTP标头:
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="expires" content="-1" />
<meta http-equiv="cache-control" content="no-cache"/>
Run Code Online (Sandbox Code Playgroud)
我也迷上了事件pagehide和pageshow.当我离开页面时,pagehide使用CORRECT值调用事件属性persisted = false(这是需要的:缓存中没有持久性!)
浏览了几页后,我window.history.go(-2);回到了A页.此时,我希望Firefox在服务器上轮询更新版本,而不是从缓存中显示.使用pageshow事件属性的CORRECT值调用页面A persisted = false(意味着页面未从缓存加载).但页面内容不是服务器数据; 它是陈旧的内容(与最初离开页面时相同)!Fiddler也没有向服务器显示新请求.
谷歌浏览器也表现出相同的行为.IE按预期工作(重新加载新数据)!
知道我错过了什么吗?
提前致谢!
我设置Cloudfront为www.lottoresults.ie提供静态图像,js和css文件.我使用了自定义源服务器.
我设置的云端域名是icdn.lottoresults.ie.我使用Bind9 dns设置了这个,icdn.lottoresults.ie是一个用于cloudfront发行版的CNAME.
那一切都很好.
但是,对于网站性能优化(Yslow,google pagespeed等),我想要设置Cache-control和Expires标头,我不想要Etags.
为此,我在www.tottoresults.ie的doc_root的htaccess文件中有以下内容:
Header unset Pragma
FileETag none
Header unset ETag
<FilesMatch "(.*)\.(ico|jpg|jpeg|png|gif|js|css|swf)$">
ExpiresActive on
ExpiresDefault "access plus 1 year"
Header set Cache-Control "max-age=1864000, public"
Header unset Last-Modified
</FilesMatch>
Run Code Online (Sandbox Code Playgroud)
问题是,对于来自cloudfront发行版(icdn)的资产,我没有Cache-control或Expires标头,但我确实有Etags - 但对于www我确实有Cache-control和Expires标头,没有Etags.
当我从我的cloudfront域查询资产时,我没有Cache-control或Expires标头,但我确实有Etags.
curl -I -L http://icdn.lottoresults.ie/images/green-header.jpg
HTTP/1.0 200 OK
Date: Sun, 01 Apr 2012 22:58:30 GMT
Server: Apache/2.2.9 (Debian) PHP/5.2.6-1+lenny13 with Suhosin-Patch
Last-Modified: Mon, 08 Aug 2011 20:23:00 GMT
**ETag**: "28a213-19b-4aa0436a1b100"
Accept-Ranges: bytes
Content-Length: 411
Content-Type: image/jpeg
Age: 22137
X-Cache: Hit from cloudfront …Run Code Online (Sandbox Code Playgroud) Cache-Control我的firebase.json文件中的标头设置似乎不起作用.我已将max-age所有文件的值设置为31536000(1年).我的firebase.json文件是 -
{
"hosting": {
"public": "public"
},
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
],
"headers": [{
"source": "**",
"headers": [{
"key": "Cache-Control",
"value": "max-age=31536000"
}]
}]
}
Run Code Online (Sandbox Code Playgroud)
该文件似乎遵守firebase文档.
但是max-age,对于所有文件,该值仍设置为浏览器默认值3600(1小时).
PHP引擎如何处理仅在文件扩展名方面不同的相同文件之间似乎存在问题.
问题:"If-Modified-Since条件请求返回完整内容不变."
此外,我测量.php扩展加载比带有.xxx扩展的identitcal twin快得多,即使文件内容相同,并且它们的文件扩展名也不同.


"HTTP允许客户端发出条件请求以查看它们所持有的副本是否仍然有效.由于此响应具有Last-Modified标头,因此客户端应该能够使用If-Modified-Since请求标头进行验证.RED已完成这发现资源发送完整的响应,即使它没有改变,表明它不支持Last-Modified验证."
.php
.ast
鉴于:
home.php文件被复制为home.xxx,此扩展名被添加到htaccess以将其识别为PHP文件..php文件监听php.ini,其中新鲜度设置为3小时,非.php文件必须监听htaccess,其中新鲜度设置为2小时,具体如下:
AddType application/x-httpd-php .php .ast .abc .xxx .etc
<IfModule mod_headers.c>
ExpiresActive On
ExpiresDefault M2419200
Header unset ETag
FileETag None
Header unset Pragma
Header set Cache-Control "max-age=2419200"
##### DYNAMIC PAGES
<FilesMatch "\\.(ast|php|abc|xxx)$">
ExpiresDefault M7200
Header set Cache-Control "public, max-age=7200"
</FilesMatch>
</IfModule>
Run Code Online (Sandbox Code Playgroud)
到目前为止这么好并且所有东西都加载了,除了非php文件没有正确缓存,或者它确实缓存但是不能很好地验证,更具体.见附件图片.只有非php文件扩展名会导致错误并加载更慢.
整个page.php加载速度更快,因为其中的所有元素然后从缓存中正确加载,而page.abc在应该缓存时返回完整请求,这意味着整个页面速度较慢.
底线:应该更改什么,以便消除If-Modified-Since条件请求返回完整内容不变?
在服务器被推送到代码库的更新后,有没有办法强制网页的客户端重新加载缓存(即图像,javascript等)?我们收到很多帮助台电话询问为什么某些功能不再有效.一个简单的硬刷新修复了下载新更新的javascript文件时的问题.
具体而言,我们使用的是Glassfish 3.x. 和JSF 2.1.x. 这当然不仅仅适用于JSF.
描述我希望可行的行为:
网站A有两个图像和两个javascript文件.用户访问该站点并缓存4个文件.就我而言,除非用户专门强制"硬"刷新或清除其缓存,否则无需"重新下载"所述文件.一旦站点被推送到其中一个文件的更新,服务器可以在头部中具有某种元数据,通知客户端所述更新.如果客户选择,则下载新文件.
我不想做的是将meta-tag放在页面的标题中以强迫任何东西不被缓存...我只是想要一些告诉客户端已经发生更新的东西,它应该在一些东西出现后得到最新的东西已更新.我想这只是客户端的某种版本控制.
谢谢你的时间!
javascript deployment web-applications cache-control glassfish-3
我使用nginx作为反向代理,我希望它能缓存POST请求.我的后端已正确配置为POST请求返回适当的缓存控制头.在nginx中我配置了:
proxy_cache_methods POST;
proxy_cache_key "$request_method$request_uri$request_body";
Run Code Online (Sandbox Code Playgroud)
这适用于小型HTTP POST请求.但是我开始注意到对于大型请求(例如文件上传),它似乎$request_body被忽略了proxy_cache_key.当包含文件上载的表单提交两次完全不同的数据时,nginx将返回缓存的结果.
什么可能导致这个?如何配置nginx以便在大型POST请求中使用$request_body(或哈希$request_body)proxy_cache_key?
我正在阅读有关不可变标头的内容,我发现这篇文章说:
缓存控制:max-age=365000000,不可变
当支持不可变的客户端看到此属性时,它应该假设该资源(如果未过期)在服务器上未更改,因此不应为其发送条件重新验证(例如 If-None-Match 或 If-Modified-Since)来检查更新。纠正可能的损坏(例如 Firefox 中的移位重新加载)从不使用条件重新验证,如果您担心不可变对象已损坏,那么对它们进行处理仍然有意义。
我无法理解这句话“如果未过期,则在服务器上未更改,因此不应发送有条件的重新验证”
默认情况下,客户端在 max-age 到期之前不会发送重新验证。
那么首先定义不可变的意义何在呢?
cache-control ×10
caching ×4
java ×2
apache ×1
applet ×1
css ×1
deployment ×1
firebase ×1
firefox ×1
glassfish-3 ×1
header ×1
html ×1
http ×1
http-headers ×1
javascript ×1
jetty ×1
jsf ×1
json ×1
nginx ×1
php ×1
validation ×1