[英]Sending AJAX from Chrome Extension
我想創建一個可以使用XMLHttpRequest
發送 AJAX 調用的 Chrome 擴展程序。 我向它發送請求的網站不是我的。
當網站收到 AJAX 調用時,它會檢查請求的Referer
標頭。 如果我從后台頁面(Chrome 擴展程序)發送 AJAX,則不會發送Referer
標頭,並且請求被拒絕。
如何從后台頁面更改Referer
標題?
您應該能夠使用webRequest
API攔截您自己的請求並修改請求標頭。
具體來說,以阻塞方式偵聽chrome.webRequest.onBeforeSendHeaders
,編輯頭對象,並將其返回到覆蓋頭。
並非所有標題都可以通過這種方式修改,但Referer
可以。
如Xan的回答所述,您需要使用webRequest API 。 既然我喜歡答案中的最小例子,這里有一個:
manifest.json權限需要包含:
"permissions": [
"*://target.site/",
"webRequest",
"webRequestBlocking"
]
用於修改包含任意引用的請求的js代碼:
callback = function(details) {
details.requestHeaders.push({
name: 'Referer',
value: 'http://your.arbitrary.referer'
});
return {
requestHeaders: details.requestHeaders
};
};
filter = { urls: ["*://target.site/target.html"] };
opts = ['blocking', 'requestHeaders']
chrome.webRequest.onBeforeSendHeaders.addListener(callback, filter, opts);
每當瀏覽器立即向*://target.site/target.html
發出請求時,referer將設置為http://your.arbitrary.referer
。 這對用戶完成的請求(通過單擊鏈接或在執行AJAX請求的站點上)以及您自己的擴展的AJAX請求生效。
W3規范明確禁止更改“Referer”標題。 當您嘗試手動設置Referer時,請求將被拒絕。
資料來源: http : //www.w3.org/TR/XMLHttpRequest/#dom-xmlhttprequest-setrequestheader
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.