如何在JavaScript中手动设置REFERER标题?

我想设置我的网页Referer标题。 目前它显示“xyz”,我想把它设置为“abc”。

使用javascript:alert(document.referer)查看引用者javascript:alert(document.referer)

您不能手动设置Referer头,但是您可以使用location.hrefreferer头设置为href使用的链接,但会导致重新加载页面。

您可以在引用者属性的文档对象上使用Object.defineProperty:

 Object.defineProperty(document, "referrer", {get : function(){ return "my new referrer"; }}); 

不幸的是,这不适用于safari <= 5,Firefox <4,Chrome <5和Internet Explorer <9的任何版本,因为它不允许在dom对象上使用defineProperty。

这在Chrome浏览器,火狐浏览器,在Safari浏览器不工作,(其他浏览器没有testing过)

  delete window.document.referrer; window.document.__defineGetter__('referrer', function () { return "yoururl.com"; }); 

看到这里https://gist.github.com/papoms/3481673

问候

testing用例: https : //jsfiddle.net/bez3w4ko/ (这样你可以轻松地testing几个浏览器),这里是一个testingiframes https://jsfiddle.net/2vbfpjp1/1/

以上的解决scheme不适合我,我已经尝试过,并在所有的浏览器工作。

简单地做了一个假的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(); 

您不能更改REFERRER属性。 你所要求的是欺骗这个请求。

以防万一你想引用的设置就像你已经直接打开一个url或第一次的时间{http referrer = null}然后重新加载页面

 location.reload(); 

您可以使用Web Request API在HTTP标头中更改引用链接的值。

它需要使用背景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" ]); 

url :它充当一个请求filter,只为某些请求调用监听器。

欲了解更多信息: https : //developer.chrome.com/extensions/webRequest

如果您想要更改将在用户单击锚点或打开iframe时将发送到服务器的引用者(url)标头,则可以在没有任何攻击的情况下执行此操作。 只要做history.replaceState,你会改变它的URL,因为它会出现在浏览器栏和引用者将被发送到服务器。