0

我刚刚看到了一些关于实现 if-modified-since 标头的示例。我真的不明白它是如何运作的很好。我已经看过这个例子,似乎如果我为标题“Last-Modified”设置一个日期值,那么如果我稍后检查它,我会得到一个标题“If-Modified-Since”的值,对吗?

还有,好像他虽然提供了一个帮手,但我每一个动作都要用到它?

我也查看了这篇文章。他创建了一个过滤器来处理“If-Modified-Since”标题。但是,我不太了解他在那里试图做什么,但正如我所看到的,如果“Last-Modified”和“If-Modified-Since”标题为空,那么它将读取为 dateModified = true然后它不会在过滤器内做任何事情。因此,我认为这取决于在每个操作中设置这些标头值?

最后,我不太确定应该如何使用它,我认为每当我对视图进行更新时,我都应该发送一个新的“Last-Modified”日期值,这是正确的方法吗?

4

2 回答 2

1

我遇到了你的问题,你实际上帮助我解决了你遇到的同样的问题。

我将向您解释标题会发生什么以及我在 C# 中为解决它所做的工作:

  • 您将 Last-Modified 指定为服务器响应。

    在 C# 中,这是通过覆盖所需控制器上的 OnActionExecuting 函数来完成的。例如,这就是我的做法:

        protected override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        filterContext.RequestContext.HttpContext.Response.AppendHeader("Last-Modified", "Wed, 01 Sep 2004 13:24:52 GMT");
        base.OnActionExecuting(filterContext);
    }
    
  • 就像您看到的那样,我已将其指定到控制器中,因此它将对控制器中的每个操作都有效

  • 现在,当您第一次访问该页面时,您将获得一个响应标头,例如Last-Modified:Wed, 01 Sep 2004 13:24:52 GMT. 下次访问该页面时,您应该会在请求标头中看到If-Modified-Since:Wed, 01 Sep 2004 13:24:52 GMT

希望这可以帮助

于 2013-05-10T12:27:23.683 回答
0

根据RFC 2616 “Last-Modified 实体标头字段指示源服务器认为最后修改变体的日期和时间。” 例如:如果您的视图是关于博客的,您可以发送最后编辑或修改的日期。通常它用于缓存。

关于 If-Modified-Since,此标头允许网络服务器发送 304 状态而不是带有正文的 200。意思是:“此网页没有改变,无需重新下载。”。

更多信息

于 2012-08-14T23:10:13.997 回答