1

我有一个 ASP.NET / MVC Web 应用程序,它在本地运行时会生成此标头:

Cache-Control:public, max-age=3
Connection:Close
Content-Encoding:gzip
Content-Length:287122
Content-Type:text/javascript
Date:Thu, 26 Jul 2012 21:21:26 GMT
ETag:K5fBpkMM+t9XPl07ydQ54pR6bg8=
Expires:Thu, 26 Jul 2012 21:21:29 GMT
Server:ASP.NET Development Server/10.0.0.0
X-AspNet-Version:4.0.30319
X-AspNetMvc-Version:3.0

但是当在他们的代理后面的 AppHarbor 中运行时,我得到的标题是:

Cache-Control:public
Connection:keep-alive
Content-Encoding:gzip
Content-Length:287122
Content-Type:text/javascript
Date:Thu, 26 Jul 2012 21:22:49 GMT
ETag:K5fBpkMM+t9XPl07ydQ54pR6bg8=
Expires:Thu, 26 Jul 2012 21:22:41 GMT
Server:nginx

AppHarbor 正在剥离我的 Cache-Control 标头的 Max-Age 部分,并用一个我不同步的日期踩过我的日期。

我的目标是通过 CDN 提供 JavaScript 服务,其最大使用期限非常短,以便可以快速推出更改。经常更改网址不是一种选择。

有谁知道如何解决这一问题?

4

1 回答 1

2

一个更仔细检查RFC的大学注意到它看起来像服务器和浏览器使用的此标头的常见单行形式:

Cache-Control: public, max-age=X

实际上是无效的。将标题的两个部分分成两行,如下所示:

Cache-Control: public
Cache-Control: max-age=X

作品!所以在我的 .net 代码中,这是:

response.Cache.SetCacheability(HttpCacheability.Public);
response.Cache.SetMaxAge(MaxAge);

变成这样:

response.AddHeader("Cache-Control", "public");
response.AddHeader("Cache-Control", "max-age=" + (int)MaxAge.TotalSeconds);

现在我可以从 AppHarbor 中获得最大年龄。

于 2012-07-27T14:51:34.937 回答