当Chrome加载我的网站时,它会在显示文件之前检查服务器是否有更新版本的文件.(Images/Javascript/CSS)它从服务器获得304,因为我从不编辑外部javascript,css或图像.
我想要它做的是显示图像,甚至没有检查服务器.
以下是标题:
Connection:keep-alive
Date:Tue, 03 Aug 2010 21:39:32 GMT
ETag:"2792c73-b1-48cd0909d96ed"
Expires:Thu, 02 Sep 2010 21:39:32 GMT
Server:Apache/Nginx/Varnish
Run Code Online (Sandbox Code Playgroud)
如何让它不检查服务器?
我在为以下情况制定HTTP缓存标头时遇到问题.
我们的服务器有大量数据,每周可能会改变几次.我希望浏览器缓存这些数据.此外,我希望尽可能减少条件获取的延迟,因为网络不可靠.
我追求的最终行为是这样的:
max-age(24小时).If-None-Match: [etag])304 Not Modified 归结为它的本能... 304响应可以包含一个新的max-age?或者原来是否max-age受到后续要求的尊重?
我正在使用这样的代码:
bundles.Add(new ScriptBundle("~/bundles/textview")
.Include(
"~/Scripts/printarea/jquery.PrintArea.js",
"~/Scripts/pagedown/Markdown.Converter.js",
"~/Scripts/pagedown/Markdown.Sanitizer.js",
"~/Scripts/pagedown/Markdown.Editor.js"
));
Run Code Online (Sandbox Code Playgroud)
这会创建一个缓存过期日期提前一年的文件,这是我在查看源代码时出现在我的脚本HTML中的内容:
<script src="/bundles/textview?v=cNvP0r6Jo6hsl2Sdzhw-o3kAK7t2JdcNWiG0iIg7Lys1"></script>
Run Code Online (Sandbox Code Playgroud)
那么为什么我在fiddler仍然会看到它去服务器检查文件是否被修改过?是否有一种方法可以修改bundle例程,以便它不添加?v =而只是简单地将GUID附加到文件名,例如中间的连字符?