2014-11-04 62 views
1

我的網站使用AJAX將頁面加載到div中,併發送以下自定義標頭,其中包含每個AJAX請求:X-AJAXRequest使用自定義HTTP標頭時的奇怪行爲

如果標題存在,我的網站將發送沒有頁眉和頁腳的主體,否則會發送整個頁面。

這是我的PHP代碼:

if (!empty($_SERVER['HTTP_X_AJAXREQUEST'])) 
{ 
    echo($head); 
    echo($body); 
    echo($scripts); 
} 
else{ 
    include("master.php"); 
} 

現在的問題是,當有人訪問X,點擊Y上的鏈接,然後Y的點擊對X,X裝有頁眉和頁腳彷彿標題不存在。甚至當開發人員工具(f12)打開時,這也不會發生!

我認爲這可能是緩存,因爲IE11(我正在開發的瀏覽器)有Back Navigation Caching,但即使如此,爲什麼要緩存刪除我的頭?

Here's鏈接,這是使用問題

+0

緩存不與您的標題交互;緩存意味着_no請求正在被髮送,並使用緩存值。如果devtools打開它的工作,這絕對是緩存問題。響應設置no-cache頭。 – mudasobwa 2014-11-04 15:59:30

+0

需要注意的是,已經有一個常用的(儘管是非標準的)ajax請求頭,它的「X-Requested-With:XMLHttpRequest」。 – Flosculus 2014-11-04 16:08:40

+0

@Flosculus我知道,但我不想檢查標題的值 – user3088260 2014-11-04 16:16:38

回答

0

現在看來似乎該網站的確是緩存是造成你的麻煩。一旦用戶訪問了X,瀏覽器就會緩存它(根據緩存規則和服務器提供的內容)。然後,當你轉到Y並嘗試通過AJAX加載X時,瀏覽器知道它已經在緩存中有X,並從那裏傳送它(根本不會向服務器發送請求)。

在Chrome中,默認情況下,當您打開開發人員工具(F12)時會關閉緩存,這就是爲什麼當您開啓開發人員工具時沒有看到此問題的原因。您可以進入開發者工具設置(右上角),並取消「禁用緩存(DevTools處於打開狀態)」。然後,您應該能夠在頁面Y上看到瀏覽器從緩存中獲取X.

解決此問題的一個簡單方法是也將一個參數附加到URL(例如,用於ajax調用的「ajax = true」) ,這樣瀏覽器會將X和X?ajax = true視爲兩個單獨的「資源」並緩存它們的兩個不同版本。