我有一个 ASP.NET/MVC 网络应用程序,在本地运行时会生成此 header :
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 header 的 Max-Age 部分,并用一个我不同步的日期覆盖我的日期。
我的目标是通过 CDN 为 JavaScript 提供非常短的最大年龄,以便可以快速推出更改。频繁更改 url 不是一种选择。
有人知道怎么解决吗?
最佳答案
一所大学更仔细地研究了 RFC注意到它看起来像服务器和浏览器使用的此 header 的常见单行形式:
Cache-Control: public, max-age=X
实际上无效。将 header 的两部分分成两行,如下所示:
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 获取 max-age。
关于asp.net - 如何防止在 AppHarbor 中丢失我的 Cache-Control header 的 Max-Age 部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11678333/