不管url中的版本如何,客户端缓存都会发生



客户端上的css文件缓存似乎有问题。我通常会通过在文件中添加版本号(即)来阻止这一问题的发生

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

但在这种情况下,这是行不通的,我不明白为什么。

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

一些用户,我自己也看到过,收到了HTTP304响应。奇怪的是,如果我使用IE开发工具检查它,它会显示HTTP304,如果我启动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日期,但它仍然没有请求。

所以页面返回的是HTTP200,所以这不是下面建议的页面缓存:

请求:

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" />
.........

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

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

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

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

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

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

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

我无法在暂存中复制此问题,所以我真的不知道这是如何或为什么开始发生的。

最新更新