asp.net - 如何防止在 AppHarbor 中丢失我的 Cache-Control header 的 Max-Age 部分?

标签 asp.net asp.net-mvc http cache-control appharbor

我有一个 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/

相关文章:

c# - 拦截/停止经过身份验证的用户的 ASP.NET Identity 未经授权的重定向

c# - OpenID+OAuth 中缺少 DotNetOpenAuth.ApplicationBlock

c# - 如何在Web应用程序中实现TCP/IP响应器 "service"

python - 使用 python 在 Azure Functions 中进行路由

ruby-on-rails - 识别 HTTP_USER_AGENT 是它的浏览器还是 facebook 机器人?

asp.net - 关于webservice异常处理的建议

c# - 如果文件存在于 asp.net mvc 中,则返回链接

asp.net-mvc - 在设置 DropDownList 之前检查 ViewData 是否为空

c# - UserManager.FindByIdAsync(User.Identity.GetUserId()) 是否缓存?

java - 写入操作时 Solrj 身份验证失败