如何防止浏览器第二次请求文件

时间:2013-07-27 02:38:45

标签: http-headers browser-cache web-site-project

我正在一个网站上工作,一旦完成js文件和图片可能会保持数周,数月甚至数年不变,谁知道。因此,如果我可以指示浏览器下载并忘记,我可以获得巨大的性能提升,即:如果文件已经在本地缓存上,则检索并使用该版本,无论其他什么,所以文件的唯一方法就是如果用户清除浏览器的缓存,则下载两次。这显然意味着承诺,因为如果我的网站中的某些内容发生变化,我将被迫更改受影响文件的名称,但具有能够在我需要时覆盖浏览器的本地缓存的巨大优势或希望,获得对它的完全控制,快速,简单并浪费零带宽和CPU周期。

我正在尝试通过向HTTP响应头添加适当的缓存命令来实现此目的。 这是一个示例:

HTTP/1.1 200 OK
Connection: Keep-Alive
Date: Sat, 27 Jul 2013 02:24:05 GMT
Content-Type: application/x-javascript
Content-Encoding: gzip
Content-Length: 13728
Last-Modified: Sat, 27 Jul 2013 00:37:59 GMT
ETag: "20130726193759"
Expires: Sat, 26 Jul 2014 05:00:00 GMT
Cache-Control: public, max-age=31536000

您可能已经意识到,我正在指示浏览器将文件保留在其缓存中一整年。但是我不知道我做错了什么,因为桌面浏览器仍然使用 If-None-Match 参数发出文件请求,在这种情况下我告诉他们文件没有'改变了哪个是次优的,但是Android的浏览器的情况甚至更糟,因为它使请求好像是第一次。

任何人都可以告诉我,如果我做错了吗?

1 个答案:

答案 0 :(得分:1)

您需要使用.htaccess文件打开浏览器杠杆缓存。

为了使浏览器缓存文件,例如图像,样式表,JavaScript等,您需要使用.htaccess文件打开Leverage Caching,通过该文件可以专门通知浏览器特定内容在指定时间段内不会发生变化 - 一周/月/年。由于浏览器不会反复请求该内容,因此它将极大地提高您的网页加载速度,以便将来从同一浏览器访问。

.htaccess文件中,您可以添加以下内容(适用于不会更改的文件)

ExpiresActive On
ExpiresByType image/jpg "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/pdf "access plus 1 month"
ExpiresByType text/x-javascript "access plus 1 month"
ExpiresByType application/x-shockwave-flash "access plus 1 month"
ExpiresByType image/x-icon "access plus 1 year"
ExpiresDefault "access plus 2 days"

因此,您可以通过这种方式发送HTTP标头来设置不同文件的到期日期。

您可以参考一篇文章here,它将详细介绍杠杆缓存以及如何启用它。