我正在使用Laravel 3,除了通过Response::make()
之外,如何以任何方式设置标头并不明显。
我正在做这样的重定向:
return Redirect::to('admin/check');
我想为重定向设置额外的no-cache
标头,如下所示:
"Cache-Control: no-store, no-cache, must-revalidate"
我意识到我可以直接在PHP中执行此操作,但有没有办法通过Laravel设置响应头?
答案 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
发出异步请求。这意味着您无法在客户端使用自定义标头进行此类重定向。
这不是网络的运作方式。