【问题标题】:How can I set the Cache-Control header for every response in Catalyst?如何为 Catalyst 中的每个响应设置 Cache-Control 标头?
【发布时间】:2009-07-25 01:11:03
【问题描述】:

默认情况下,Catalyst 似乎不输出Cache-Control: 等标头。我知道我可以像这样在给定的控制器方法中输出它们:

$c->response->headers->last_modified(time);
$c->response->headers->expires(time + $self->{cache_time});
$c->response->headers->header(cache_control => "public, max-age=$self->{cache_time}");

不过,在每种方法中这样做都会很痛苦!我更喜欢的是:

  • 一组默认标头(现在过期,现在最后修改,缓存控制:无缓存,编译指示:无缓存)
  • 一种按方法覆盖默认值的方法。

有什么好的方法可以做到这一点吗?

【问题讨论】:

    标签: perl caching http-headers catalyst


    【解决方案1】:

    德罗伯特:

    很好的问题。我在 Catalyst 降临日历的 article 中准确介绍了这一点。

    基本上,您创建一个存储变量来定义给定操作的缓存时间,然后在您的 Root 结束例程中处理它。有关所有详细信息,请参阅文章。

    周杰伦

    【讨论】:

    • 您可能希望在此答案中包含一个简短的 sn-p。
    • 该 wiki 目前没有为我加载(空白页面或连接重置),但我可以使用这个想法。谢谢。如果未设置,我可以将其默认为无缓存。令人惊讶的是,这不是 Catalyst 内置的;似乎每个 Catalyst 应用都必须这样做!
    • 好的,wiki 已备份。这是一个非常好的方法。那真的应该是 Catalyst 的一部分,或者至少是一个插件....
    • 人们将 Catalyst 用于许多不同的事情,一般来说,我们会尽量避免在 Catalyst 核心中添加不必要的东西。该方法非常简单,几乎不值得为它创建一个完整的附加组件。我们通常只是将人们指向该 wiki 条目的方向,因为整个添加是 12 行,不包括 cmets。 :-D
    【解决方案2】:

    更新:根据您对我之前建议的回复,我决定硬着头皮查看 Catalyst 文档。在我看来,这样做的地方是:

      sub end : Private {
        my ( $self, $c ) = @_;
    
        # handle errors etc.
    
        if ( $c->res->body ) {
            if ( "some condition" ) {
                set_default_response_headers( $c->response->headers );
                return;
            }
            else {
                do_something_else();
                return;
            }
        }
        $c->forward( 'MyApp::View::TT' ); # render template
    }
    

    较早的回复:我不使用 Catalyst,但您不能为您的应用程序编写一个子程序吗?

    sub set_default_response_headers {
        my ($h) = @_;
        $h->last_modified(time);
        $h->expires(time + $self->{cache_time});
        $h->header(cache_control => "public, max-age=$self->{cache_time}");
        return $h;    
    }
    

    拨打set_default_response_headers( $c->response->headers )

    【讨论】:

    • 是的,我可以写一个 sub,但是我仍然必须记住在每个方法中都调用它......如果它在任何控制器方法中被遗忘,它可能会导致一个错误。似乎是一种相当脆弱的方法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-20
    • 2020-12-03
    • 1970-01-01
    • 2010-11-13
    • 1970-01-01
    • 2012-10-09
    • 2019-05-21
    相关资源
    最近更新 更多