我想设置网页的Referer标题。目前它显示“xyz”,我想将其设置为“abc”。
使用javascript:alert(document.referer)
答案 0 :(得分:33)
您可以在文档对象上使用Object.defineProperty作为referrer属性:
Object.defineProperty(document, "referrer", {get : function(){ return "my new referrer"; }});
不幸的是,这不适用于任何版本的safari< = 5,Firefox< 4,Chrome< 5和Internet Explorer< 9因为它不允许在dom对象上使用defineProperty。
答案 1 :(得分:26)
您无法手动设置Referer
标头,但可以使用location.href
将referer
标头设置为href
中使用的链接,但会导致重新加载页面。
答案 2 :(得分:17)
这适用于Chrome,Firefox,在Safari中无效:(尚未在其他浏览器中测试过
delete window.document.referrer;
window.document.__defineGetter__('referrer', function () {
return "yoururl.com";
});
在这里看到https://gist.github.com/papoms/3481673
此致
测试用例:https://jsfiddle.net/bez3w4ko/(因此您可以轻松测试多个浏览器),这是iframes的测试https://jsfiddle.net/2vbfpjp1/1/
答案 3 :(得分:2)
以上解决方案对我不起作用,我尝试过以下操作,并且它适用于所有浏览器。
只是做了一个虚假的ajax调用,它会进入referer标题。
var request;
if (window.XMLHttpRequest) { // Mozilla, Safari, ...
request = new XMLHttpRequest();
} else if (window.ActiveXObject) { // IE
try {
request = new ActiveXObject('Msxml2.XMLHTTP');
} catch (e) {
try {
request = new ActiveXObject('Microsoft.XMLHTTP');
} catch (e) {}
}
}
request.open("GET", url, true);
request.send();
答案 4 :(得分:2)
您无法更改REFERRER属性。你问的是欺骗请求。
以防万一您希望将referrer设置为直接打开网址或第一次{http referrer = null}然后重新加载页面
location.reload();
答案 5 :(得分:2)
我认为了解为什么不能更改referer
标头可能会帮助人们阅读此问题。
在此页面上:https://developer.mozilla.org/en-US/docs/Glossary/Forbidden_header_name
通过该链接:
禁止的标头名称是任何无法以编程方式修改的HTTP标头的名称...
禁止修改此类标头,因为用户代理保留对标头的完全控制权。
禁止的标头名称...是以下名称之一:
...
推荐人
...
答案 6 :(得分:1)
如果要更改将在用户单击锚点或iframe打开时将发送到服务器的referer(url)标头,您可以在没有任何黑客攻击的情况下执行此操作。只需执行history.replaceState,您将更改将显示在浏览器栏中的URL以及将发送到服务器的referer。
答案 7 :(得分:0)
您可以使用Web Request API更改HTTP标头中的referrer值。
它需要一个后台js脚本才能使用它。 您可以使用 onBeforeSendHeaders ,因为它会在发送请求之前修改标头。
您的代码将是这样的:
chrome.webRequest.onBeforeSendHeaders.addEventListener(function(details){
var newRef = "http://new-referer/path";
var hasRef = false;
for(var n in details.requestHeaders){
hasRef = details.requestHeaders[n].name == "Referer";
if(hasRef){
details.requestHeaders[n].value = newRef;
break;
}
}
if(!hasRef){
details.requestHeaders.push({name:"Referer",value:newRef});
}
return {requestHeaders:details.requestHeaders};
},
{
urls:["http://target/*"]
},
[
"requestHeaders",
"blocking"
]);
urls :它充当请求过滤器,仅针对某些请求调用侦听器。