有人可以帮我一个HTTPcaching问题?
我认为,如果我设置了“Expires”和“Cache-Control:max-age”请求头,那么浏览器在max-age超过之后才会发出GET请求?
我的服务器看到很多有条件的GET请求,并且它回答了一个304.但是,如果可能的话,我想消除这些有条件的GET,并让浏览器只要求一个资源,一旦它认为它已经过期。
以下是我从Chrome中的开发人员工具中获得的详细信息:
Request URL:http://localhost:8080/img/branding.gif Request Method:GET Status Code:304 Not Modified
请求标题:
Cache-Control:max-age=0 If-Modified-Since:Thu, 22 Jul 2010 10:54:34 GMT Referer:http://localhost:8080/ User-Agent:Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.99 Safari/533.4
响应标题:
Cache-Control:max-age=2246400, s-maxage=0 Connection:Keep-Alive Content-Location:/img/branding.gif Content-Type:image/gif Date:Fri, 23 Jul 2010 15:06:10 GMT Expires:Fri, 07 Jan 2011 15:06:10 GMT Keep-Alive:timeout=15, max=100 Last-Modified:Thu, 22 Jul 2010 10:54:34 GMT Pragma:cache Server:Oracle Application Server Containers for J2EE 10g (9.0.4.0.0)
我在我的Java代码中的filter中设置caching标头。 代码运行在Oracle的OC4J上。
另外,我想通过HTTPS运行这个。 使用相同的头文件是否也适用于HTTPS?
提前致谢。
如果你删除了Last-Modified和ETag头,你将完全消除If-Modified-Since和If-None-Match请求及其304个未修改的响应,所以文件将保持caching而不检查更新,直到Expires头指示新的内容可用。
来源: http : //www.askapache.com/htaccess/apache-speed-last-modified.html
我认为,如果我设置了“Expires”和“Cache-Control:max-age”请求头,那么浏览器在max-age超过之后才会发出GET请求?
问题是在 max-age过期之后发生的。 然后你进入一个讨厌的循环,浏览器在每次看到引用时都会请求这个内容 – 每次web服务器都回应一个没有被修改的304。 一些浏览器甚至会问每次文件出现在同一页面上! 一个请求所花费的大部分时间是TCP握手和HTTP头的往返行程 – 所以这通常会导致页面更慢,因为您(几乎)提供了caching详细信息。 这个效果比SSL更糟,因为这会导致至less一次额外的往返服务器。
规范中的get out子句是,Web服务器可以通过向原始文件提供新的caching指令来响应条件请求 – 但实际上这可能相当困难。
如果它的apache 2.0或更高版本,那么你可以通过使用mod_headers去除请求的条件部分来解决这个问题(从请求头中除去if-modified-if和none-match-line)。 对于1.3或更早版本,您可以通过每N天接触一次文件的cron作业(其中N略低于默认caching时间)来解决此问题。
另外,我想通过HTTPS运行这个。 使用相同的头文件是否也适用于HTTPS?
我猜你所展示的例子是非SSL的。 是的,这个方法适用于非ssl,但要注意浏览器保持活跃状态(非微软的web服务器会试图通过保持连接来与SSL连接进行交谈,但它确实提高了性能) 。
C。