2013-03-12 43 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請求標頭。這意味着您無法在客戶端使用自定義標題進行重定向。

這就是網絡不是如何工作的。