2

我正在使用 Laravel 3,除了 through 之外,如何设置标题并不明显Response::make()

我正在做这样的重定向:

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

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

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

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

4

2 回答 2

5

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

更准确地说class Redirect extends Response。看看这里 你可以通过简单地使用来实现:

return Redirect::to('admin/check')
    ->header('Cache-Control', 'no-store, no-cache, must-revalidate');
于 2013-03-12T22:28:25.793 回答
2

恐怕,公认的答案是错误的和误导性的!

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

您可能会认为这段代码应该可以正常工作:

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

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

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

请注意,页面不能设置 HTTP 请求标头,除非它使用XMLHttpRequest. 这意味着您也不能在客户端使用自定义标头进行此类重定向。

这不是网络的工作方式。

于 2016-12-19T08:21:44.457 回答