如何在 Javascript 中手动设置 REFERER 标头?

IT技术 javascript
2021-02-16 06:11:00

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

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

6个回答

您可以在文档对象上使用 Object.defineProperty 来获取引用属性:

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

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

它设置对象属性但未在请求标头中设置
2021-04-18 06:11:00
使用这种方法,我在 Safari 9 中得到一个错误:“TypeError: Attempting to change the getter of an unconfigurable property.”
2021-04-20 06:11:00
如果你想在测试中改变它并想在多个测试用例中重新定义引用者,请使用 ``` Object.defineProperty(document, 'referrer', { configure: true, get: () => url, }); ``
2021-04-22 06:11:00
菜鸟在这里。这条线会进入<script/>吗?它是在诸如 onload 或 document.ready 之类的事件中调用吗?
2021-05-04 06:11:00
作品也。尽管他的作品也比@casivaagustin 的答案更喜欢这个
2021-05-11 06:11:00

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

@ABG 你有没有机会写更多关于你的答案如何在代码中体现的内容?例如一个简短的 javascript 片段或 HTML 片段?
2021-04-21 06:11:00
谢谢它改变了引用者,但它改变了selenium服务器的 URL 所以我认为不可能改变引用者
2021-05-07 06:11:00
@jsmcfrind 有点晚了,但如果你这样做window.location.reload()会导致页面重新加载,如果你检查document.referrer它应该等于当前页面而不是之前的任何内容。尝试在 jsfiddle 中创建一个测试用例,但由于网站的沙盒性质而失败。(虽然我确实在这个过程中创建了一个有点有趣的递归 jsfiddle。)
2021-05-14 06:11:00

这适用于 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/

@Brandito 没用,值变了,但是当你发送一个请求比如图片的时候,你会发现referrer还是旧的。
2021-04-16 06:11:00
不添加推荐域“yoururl.com”
2021-04-20 06:11:00
我可以确认它在 Safari 13 中有效。但我location.reload();后来不得不使用
2021-04-24 06:11:00
但是当用户尝试访问新站点时呢????例如,site1.com 上有一个链接,可重定向 site2.com 上的用户
2021-05-14 06:11:00

我认为理解为什么你不能改变referer标题可能会帮助人们阅读这个问题。

从这个页面:https : //developer.mozilla.org/en-US/docs/Glossary/Forbidden_​​header_name

从该链接:

禁止的标头名称是任何无法以编程方式修改的 HTTP 标头的名称...

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

Forbidden header names ... 是以下名称之一:

...

推荐人

...

上面的解决方案对我不起作用,我尝试了以下方法,它在所有浏览器中都有效。

只是做了一个假的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();
我应该怎么试?你能提供我这方面的步骤吗,因为我用了很多方法来改变引用标题,但没有任何效果?
2021-04-21 06:11:00