客户端缓存发生在尽管url中的版本

时间:2013-07-30 16:04:37

标签: http browser-cache fiddler

我们似乎遇到了客户端上的css文件缓存问题。我通常通过在文件中添加版本号来阻止这种问题,即

<link href="Default.css?4.31.0.17051" rel="stylesheet" type="text/css">

但在这种情况下这不起作用,我不明白为什么。

版本号从昨晚4.30.0.xxxxx增加到4.31.0.17051

有些用户,我自己也看过,正在收到HTTP 304响应。奇怪的是,如果我使用IE开发工具检查它,它会显示一个HTTP 304,如果我启动fiddler它根本不显示任何请求。

服务器上未启用内容缓存。

如果我执行ctrl-f5,这是HTTP标头:

HTTP/1.1 200 OK
Content-Length: 45861
Content-Type: text/css
Last-Modified: Tue, 23 Jul 2013 14:19:40 GMT
Accept-Ranges: bytes
ETag: "0a61aabaf87ce1:bdba"
Vary: Accept-Encoding
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
Date: Tue, 30 Jul 2013 16:05:54 GMT

所以:

  • 我为什么不在小提琴手里看到这个?是不是根据这个问题建议(https://stackoverflow.com/a/8958279/542251
  • 发送请求
  • 为什么这个缓存控制(即将?4.31.0.17051添加到文件中)不起作用?

修改

我现在已经触摸了该文件,要更新Last-modified日期,但它仍然没有请求它。

因此页面返回HTTP 200,因此这不是页面缓存,如下所示:

请求:

GET http://www.mysite.com/Agent/Hotel HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Referer: http://www.mysite.com/Agent/Flights
Accept-Language: en-GB
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)
Accept-Encoding: gzip, deflate
Host: www.mysite.com
Connection: Keep-Alive

响应:

HTTP/1.1 200 OK
Cache-Control: private
Content-Length: 53184
Content-Type: text/html; charset=utf-8
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 4.0.30319
X-AspNetMvc-Version: 3.0
Date: Wed, 31 Jul 2013 08:33:25 GMT




<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <link href="Default.css?4.31.0.17051" rel="stylesheet" type="text/css" />

.........

2 个答案:

答案 0 :(得分:1)

正如我在你的回答中所提到的,当真正从缓存中提供响应时,F12工具可以显示HTTP / 304。如果您在Fiddler中没有看到该请求,则不会通过网络发送该请求。

您是否确定引用到CSS文件的页面未从缓存中提取?如果是,那么你仍然有旧的URL引用。 (仔细查看F12工具中的CSS请求的URL,因为即使“304”不是,URL也会准确。)

两点: - 什么“为什么这个缓存控制不起作用?”意思?您的HTTP响应标头不包含任何Cache-Control指令。 - 更改服务器上的Last-Modified日期显然不是客户端会知道的事情,除非它实际向服务器发出条件GET请求。

答案 1 :(得分:0)

所以我得到了解决方案,但不一定是回答

最后,我将网站上的标记更新为:

<link href="Default.css?v=4.31.0.17051" rel="stylesheet" type="text/css">

我不确定是否将v=添加到有效的查询字符串中是否是解决方案,或者是否只是我更改了URL再次解决了这个问题。

我无法在暂存中复制此问题,所以我真的不知道这种情况是怎么发生的。