IIS7.5 max-age 问题(asp.net mvc 输出缓存)
IIS7.5 max-age issue(asp.net mvc output cache)
我们使用Windows server 2008 R2 Enterprise 和 IIS7.5.7600.16385,
我在服务器上部署了一个简单的网络(asp.net mvc、c#、.net framework 4.5.1)。
如下所示的控制器,*.cshtml 仅输出日期时间:
public class DetailController : Controller
{
[OutputCache(Duration = 300, VaryByParam = "id")]
public ActionResult Index(int id)
{
return View();
}
}
当我第一次请求 url http://localhost:80/Detail/Index?id=3 时,响应是正确的:
Cache-Control:public, max-age=300
Date:Mon, 24 Oct 2016 12:11:59 GMT
Expires:Mon, 24 Oct 2016 12:16:51 GMT
Last-Modified:Mon, 24 Oct 2016 12:11:51 GMT
但是,当我再次请求 url 时 (ctrl+f5),max-age 不正确(然后响应来自服务器缓存):
Cache-Control:public, max-age=63612908450
Date:Mon, 24 Oct 2016 12:16:34 GMT
Expires:Mon, 24 Oct 2016 12:20:50 GMT
Last-Modified:Mon, 24 Oct 2016 12:15:50 GMT
我不知道为什么max-age这么大,它是怎么产生的,它会在输出缓存过期时重新转换(ctrl+f5)。
在我的生产环境中,不正确的 max-age 导致 url link 点击从浏览器的磁盘缓存中读取内容。
有人知道如何修复它吗?
这是一个已知问题,针对 KB151864 附带的 .NET 4.6.2 存在一个错误。
请参阅此处了解更多详情:https://github.com/Microsoft/dotnet/issues/330
这将在 .NET 4.6.3 中得到修复。我目前不知道是否会提前为 4.6.2 提供修复程序。
目前唯一已知的解决方法是尽可能降级并删除 KB151864。
注意:该错误仅影响 Cache-Control header 中缓存响应的 "max-age" 属性的编译。实际的缓存机制和生命周期到期是有效的。
我刚刚与 Microsoft 支持团队交谈,他们是这样回复我的:
The suggested workaround is to downgrade the frame work from 4.6.2 to
4.6.1 by uninstalling the update KB31511864.
转到控制面板 -> 程序 -> 程序和功能 -> 已安装的更新。
并删除 KB3151864
,这将解决此问题。
我们使用Windows server 2008 R2 Enterprise 和 IIS7.5.7600.16385, 我在服务器上部署了一个简单的网络(asp.net mvc、c#、.net framework 4.5.1)。 如下所示的控制器,*.cshtml 仅输出日期时间:
public class DetailController : Controller
{
[OutputCache(Duration = 300, VaryByParam = "id")]
public ActionResult Index(int id)
{
return View();
}
}
当我第一次请求 url http://localhost:80/Detail/Index?id=3 时,响应是正确的:
Cache-Control:public, max-age=300
Date:Mon, 24 Oct 2016 12:11:59 GMT
Expires:Mon, 24 Oct 2016 12:16:51 GMT
Last-Modified:Mon, 24 Oct 2016 12:11:51 GMT
但是,当我再次请求 url 时 (ctrl+f5),max-age 不正确(然后响应来自服务器缓存):
Cache-Control:public, max-age=63612908450
Date:Mon, 24 Oct 2016 12:16:34 GMT
Expires:Mon, 24 Oct 2016 12:20:50 GMT
Last-Modified:Mon, 24 Oct 2016 12:15:50 GMT
我不知道为什么max-age这么大,它是怎么产生的,它会在输出缓存过期时重新转换(ctrl+f5)。 在我的生产环境中,不正确的 max-age 导致 url link 点击从浏览器的磁盘缓存中读取内容。
有人知道如何修复它吗?
这是一个已知问题,针对 KB151864 附带的 .NET 4.6.2 存在一个错误。
请参阅此处了解更多详情:https://github.com/Microsoft/dotnet/issues/330
这将在 .NET 4.6.3 中得到修复。我目前不知道是否会提前为 4.6.2 提供修复程序。
目前唯一已知的解决方法是尽可能降级并删除 KB151864。
注意:该错误仅影响 Cache-Control header 中缓存响应的 "max-age" 属性的编译。实际的缓存机制和生命周期到期是有效的。
我刚刚与 Microsoft 支持团队交谈,他们是这样回复我的:
The suggested workaround is to downgrade the frame work from 4.6.2 to 4.6.1 by uninstalling the update KB31511864.
转到控制面板 -> 程序 -> 程序和功能 -> 已安装的更新。
并删除 KB3151864
,这将解决此问题。