我正在使用 Laravel 3,除了 through 之外,如何设置标题并不明显Response::make()
。
我正在做这样的重定向:
return Redirect::to('admin/check');
我想no-cache
为重定向设置一个额外的标头,如下所示:
"Cache-Control: no-store, no-cache, must-revalidate"
我意识到我可以直接在 PHP 中执行此操作,但是有没有办法通过 Laravel 设置响应标头?
当你调用时,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');
恐怕,公认的答案是错误的和误导性的!
无论您使用什么语言或框架,都无法重定向到设置了自定义标题的页面。换句话说,没有办法触发 HTTP 重定向并导致客户端(浏览器)添加自定义标头。
您可能会认为这段代码应该可以正常工作:
return Redirect::to('admin/check')
->header('Cache-Control', 'no-store, no-cache, must-revalidate');
但它不会。您正在为指示浏览器重定向的响应设置自定义标头,而不是为重定向本身。
站点指示浏览器发出带有自定义标头的 HTTP 请求的唯一方法是使用 Javascript 和XMLHttpRequest
对象。它需要在目标服务器上实现 CORS 以允许此类 ajax 请求。
请注意,页面不能设置 HTTP 请求标头,除非它使用XMLHttpRequest
. 这意味着您也不能在客户端使用自定义标头进行此类重定向。
这不是网络的工作方式。