Подтвердить что ты не робот

Как вручную установить заголовок REFERER в Javascript?

Я хочу установить заголовок Referer моей веб-страницы. В настоящее время он отображает "xyz", и я хочу установить его на "abc".

Просмотренный референт с помощью javascript:alert(document.referer)

4b9b3361

Ответ 1

Вы не можете вручную установить заголовок Referer, но вы можете использовать location.href, чтобы установить заголовок Referer на ссылку, используемую в href, но это вызовет перезагрузку страницы.

Ответ 2

Вы можете использовать Object.defineProperty для объекта документа для свойства referrer:

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

К сожалению, это не сработает ни на одной версии Safari <= 5, Firefox < 4, Chrome < 5 и Internet Explorer < 9, поскольку он не позволяет defineProperty использоваться на dom-объектах.

Ответ 3

Это работает в 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/

Ответ 4

Выше решение не работает для меня, я пробовал следовать и работает во всех браузерах.

просто сделал фальшивый вызов ajax, он сделает запись в заголовке реферирования.

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();

Ответ 5

Вы не можете изменить свойство REFERRER. То, что вы запрашиваете, - это подменить запрос.

На всякий случай, если вы хотите, чтобы реферер был настроен так, как будто вы открыли URL-адрес напрямую или в первый раз {http referrer = null}, перезагрузите страницу

location.reload();

Ответ 6

Вы можете изменить значение реферера в заголовке HTTP с помощью API веб-запросов.

Для этого требуется фон js script. Вы можете использовать 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: он действует как фильтр запроса и вызывает слушателя только для определенных запросов.

Для получения дополнительной информации: https://developer.chrome.com/extensions/webRequest

Ответ 7

Если вы хотите изменить заголовок реферала (url), который будет отправлен на сервер при нажатии пользователем якоря или iframe, вы можете сделать это без каких-либо взломов. Просто запустите history.replaceState, вы измените URL-адрес, как он появится в панели браузера, а также референт, который будет отправлен на сервер.