如何在JavaScript中手动设置REFERER标题?
我想设置我的网页Referer标题。 目前它显示“xyz”,我想把它设置为“abc”。
使用javascript:alert(document.referer)
查看引用者javascript:alert(document.referer)
您不能手动设置Referer
头,但是您可以使用location.href
将referer
头设置为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,因为它会出现在浏览器栏和引用者将被发送到服务器。