Laravel重定向,没有缓存标头

时间:2013-03-12 20:55:03

标签: php laravel http redirect laravel-3

我正在使用Laravel 3,除了通过Response::make()之外,如何以任何方式设置标头并不明显。

我正在做这样的重定向:

return Redirect::to('admin/check');

我想为重定向设置额外的no-cache标头,如下所示:

"Cache-Control: no-store, no-cache, must-revalidate"

我意识到我可以直接在PHP中执行此操作,但有没有办法通过Laravel设置响应头?

2 个答案:

答案 0 :(得分:3)

当您调用Redirect::to()时,Laravel将实例化一个具有302状态和Location标头的Response对象。然后,控制器返回该Response对象并将其呈现为正确的HTTP响应,因此,在控制器时,您仍然可以更改其标头。

更加精确class Redirect extends Response。看看here 您可以通过简单地使用:

来实现这一目标
return Redirect::to('admin/check')
    ->header('Cache-Control', 'no-store, no-cache, must-revalidate');

答案 1 :(得分:1)

我害怕,接受的答案是错误的和误导性的!

无论您使用何种语言或框架,都无法重定向到设置了自定义标头的网页。换句话说,无法触发HTTP重定向并导致客户端(浏览器)添加自定义标头。

您可能认为此代码应该可以正常工作:

return Redirect::to('admin/check')
    ->header('Cache-Control', 'no-store, no-cache, must-revalidate');

但它没有赢。您正在设置指示浏览器重定向的响应的自定义标头,而不是重定向本身。

网站指示浏览器使用自定义标头发出HTTP请求的唯一方法是使用Javascript和XMLHttpRequest对象。它需要在目标服务器上实现CORS才能允许这样的ajax请求。

请注意,页面无法设置HTTP请求标头,除非它使用XMLHttpRequest发出异步请求。这意味着您无法在客户端使用自定义标头进行此类重定向。

这不是网络的运作方式。