2013-03-12 101 views
1

我使用的是Laravel 3,并不清楚如何通过除Response::make()以外的任何其他方式设置标头。Laravel重定向没有缓存头

我做一个重定向这样的:

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

我想设置附加no-cache报头重定向,像这样:

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

我知道我可以只直接做到这一点在PHP中,但有没有办法通过Laravel设置响应头文件?

回答

3

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

更加精确class Redirect extends Response。看看here 您可以通过简单地使用实现这一目标:

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

其实,这是行不通的。标题在响应中被忽略。 – 2017-05-10 11:48:32

+0

@GustavoStraube,恐怕这是一个古老的答案。那时候,Laravel在第三版上,并且自那时起改变了很多东西。我不再和Laravel一起工作,所以我不能告诉你现在应该如何实现它。我会很乐意更新答案,如果你建议编辑:) – vFragosop 2017-05-10 16:36:25

+0

其实,你的代码很可能运行在最新版本的Laravel - 在不会导致任何错误。但是,由于HTTP的工作方式,它不起作用。请检查@ sepehr的答案。您会看到自定义标题无法通过重定向发送。我试图做到这一点,服务器只是忽略你试图设置的标题。 – 2017-05-12 10:12:10

1

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

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

你可能会想,这个码应该只是罚款:

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

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

一个站点指示浏览器发出一个自定义头的HTTP请求,唯一的办法是使用JavaScript和XMLHttpRequest对象。它需要在目标服务器上实现CORS来允许这样的Ajax请求。

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

这就是网络不是如何工作的。