如何在Javascript中手动设置REFERER头

How to manually set REFERER header in Javascript?

本文关键字:设置 REFERER Javascript      更新时间:2023-09-26

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

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

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

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

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

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

这适用于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/(所以你可以很容易地测试几个浏览器)下面是一个iframe的测试https://jsfiddle.net/2vbfpjp1/1/

我认为理解为什么不能更改referer标头可能有助于人们阅读这个问题。

从此页面:https://developer.mozilla.org/en-US/docs/Glossary/Forbidden_header_name

来自该链接:

禁止的标头名称是任何无法通过编程修改的HTTP标头的名称。。。

禁止修改此类标头,因为用户代理保留对它们的完全控制权。

禁止的标头名称。。。是以下名称之一:

参考

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

以防您希望将引用者设置为直接打开url或第一次打开url{http-referrer=null},然后重新加载页面

location.reload();

如果你想更改用户点击锚点或打开iframe时将发送到服务器的referer(url)标头,你可以在没有任何黑客攻击的情况下完成。只需执行history.replaceState,您将更改浏览器栏中显示的url,以及将发送到服务器的referer。

以上解决方案对我不起作用,我已经尝试过以下操作,它在所有浏览器中都能工作。

只需进行一个伪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();

您可以使用Web请求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:它充当请求过滤器,仅对某些请求调用侦听器。

有关更多信息:https://developer.chrome.com/extensions/webRequest

如果您需要从谷歌或任何其他链接到您网站的网站进行设置,并确保谷歌或该网站是推荐人的值,您可以按照以下说明进行操作:

  1. 转到google.com
  2. 键入网站:mywebsiteexample.com
  3. 找到后,右键单击并检查
  4. 在屏幕的右上角,您可以找到一个光标来选择要选择和检查DOM的哪个部分。选择锚点。将href值修改为所需的链接。然后点击回车键

点击锚点后,它应该重定向到你的链接或页面,在这种情况下,引用者的值应该来自google.com或你决定的网站