日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

x requested with php,PHP / Ajax“Vary:X-Requested-With”对我不起作用!

發布時間:2023/12/9 php 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 x requested with php,PHP / Ajax“Vary:X-Requested-With”对我不起作用! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我正在嘗試提供可緩存的內容,具體取決于它是否是ajax請求.

場景:

一個小的PHP腳本“/test.php”提供一些HTML輸出并設置以下標題:

Expires Wed, 23 Feb 2011 13:30:06 GMT

Cache-Control public, max-age=60

Vary X-Requested-With,Accept-Encoding

輸出取決于$_SERVER [‘HTTP_X_REQUESTED_WITH’]狀態.

當我的Firefox指向Url時,我得到輸出,并且對于下一分鐘,我從Browser-Cache獲得相同的結果,而不是命中服務器.好的,到目前為止.

當我通過XMLHttpRequest(使用X-Requested-With:XMLHttpRequest Header)請求相同的資源時,我的Firefox不會請求服務器,而是提供來自Cache的(錯誤)響應!

換句話說,它是一樣的.資源上的Ajax-Call填充緩存,后續的Browser-Request服務于Cache的(錯誤)響應.

有沒有人有這方面的經驗?我認為這應該是一個很常見的問題 – 根據是否是ajax(在同一個URL上)提供內容.

問候,Ilja

解決方法:

我可以重現這個,但前提是我沒有在ajax響應中包含X-Requested-With標頭.如果我為ajax調用設置了標頭,它主要按預期工作,雖然ajax調用清除了常規請求的緩存,反之亦然 – 內容不會被緩存,但是你永遠不會得到錯誤的內容.

我的PHP文檔看起來像這樣:

putenv('TZ=PST8PDT');

date_default_timezone_set('America/Los_Angeles');

header('Expires: '.gmdate("D, d M Y H:i:s").' GMT');

header('Cache-Control: public, max-age=60');

header('Vary: X-Requested-With,Accept-Encoding');

echo 'it is now '.date('Y-m-d H:i:s');

?>

我的測試頁面是這樣的:

load into frame


load into div via ajax

function load(){

var req = new XMLHttpRequest();

req.onreadystatechange = function(){

if (req.readyState == 4){

document.getElementById('di').textContent = req.responseText;

}

}

req.open('GET', 'resource.php', 1);

req.setRequestHeader("X-Requested-With", "XMLHttpRequest");

req.send(null);

return false;

}

當我點擊第一個鏈接時,它會從服務器請求.當我再次點擊它時,它來自緩存.每次后續點擊都來自緩存,最多60秒.

當我點擊第二個鏈接時,請求將轉到服務器.當我再次點擊它時,它來自緩存.每次后續點擊都來自緩存,最多60秒.

如果我點擊鏈接1,然后鏈接2,它們都會進入服務器.如果我再次點擊鏈接1,它會再次進入服務器(這是錯誤的).演示序列(假設全部在60s內):

Reg : server

Reg : cache

Reg : cache

Reg : cache

Ajax : server

Ajax : cache

Reg : server

Ajax : server

結果是,如果你想通過ajax服務時可靠地緩存不同的東西,在發出ajax請求時使用不同的URL(?ajax = 1可以正常工作).

我正在測試最新的FF 4.0

標簽:php,ajax,caching,header,vary

來源: https://codeday.me/bug/20190710/1420516.html

總結

以上是生活随笔為你收集整理的x requested with php,PHP / Ajax“Vary:X-Requested-With”对我不起作用!的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。