2012-03-06 10 views
36

Voglio impostare l'intestazione Referer della mia pagina web. Attualmente visualizza "xyz" e voglio impostarlo su "abc".Come impostare manualmente l'intestazione REFERER in Javascript?

Vista l'referer usando javascript:alert(document.referer)

+1

Questo è stato chiesto prima: http://stackoverflow.com/questions/220231/accessing-http-headers-in-javascript –

+2

Non è possibile farlo. –

+2

@TiesonT. In realtà, quella domanda riguarda l'accesso alle intestazioni HTTP, non l'override dell'intestazione 'Referer'. –

risposta

23

Non è possibile impostare manualmente Referer colpo di testa, ma è possibile utilizzare per impostare il location.hrefreferer intestazione per il collegamento utilizzato in href ma causerà il ricaricamento della pagina.

+1

grazie cambia il referer ma cambia l'URL del server di selenio Quindi ritengo che sia impossibile cambiare il referente –

+4

@ABG Qualche possibilità di scrivere un po 'di più su come la tua risposta si materializza nel codice? Per esempio. un breve javascript snipping o snippet HTML? – condiosluzverde

+2

@jsmcfrind Un po 'tardi, ma se fai solo 'window.location.reload()' questo farà ricaricare la pagina e se controlli 'document.referrer' dovrebbe essere uguale alla pagina corrente invece di qualunque cosa possa sono stato prima Provato a creare un caso di test in jsfiddle ma non è riuscito a causa della natura sandbox del sito web. [(Anche se ho creato un jsfiddle ricorsivo alquanto divertente nel processo.)] (Http://jsfiddle.net/gjvLoarf/2/) – KhalilRavanna

25

È possibile utilizzare Object.defineProperty sull'oggetto del documento per la proprietà referrer:

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

Purtroppo questo non funziona su qualsiasi versione di Safari < = 5, Firefox < 4, Chrome < 5 e Internet Explorer < 9 poiché non consente l'utilizzo di defineProperty sugli oggetti dom.

+0

funziona perfettamente! –

+1

Funziona anche. Preferisci questo alla risposta di @ casivaagustin anche se i suoi lavori sono anche – Ema4rl

+0

Sei fantastico! Grazie :) –

17

Questo funziona in Chrome, Firefox, non funziona in Safari :(, non sono testati in altri browser

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

visto che qui https://gist.github.com/papoms/3481673

riguarda la causa

di prova: https://jsfiddle.net/bez3w4ko/ (così puoi facilmente testare diversi browser) ed ecco un test con iframes https://jsfiddle.net/2vbfpjp1/1/

+2

ha appena provato questo, e non ha funzionato –

+0

funziona su browser chromium – Ema4rl

+0

ma come su quando un utente tenta di accedere a un nuovo sito ??? per esempio c'è un link su site1.com che reindirizza l'utente su site2.com –

2

Sopra soluzione non funziona per me, ho provato a seguire e funziona su tutti i browser.

ha fatto semplicemente una chiamata ajax falso, farà una voce nell'intestazione di 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(); 
+0

come dovrei provare questo? puoi per favore fornirmi dei passaggi perché ho usato molti modi per cambiare l'intestazione del referrar ma niente funziona? –

2

Non è possibile modificare la proprietà REFERRER. Quello che stai chiedendo è di falsificare la richiesta.

Solo nel caso in cui si desidera che il referrer da impostare come avete aperto direttamente o per la prima volta {referer = null} un URL quindi ricaricare la pagina

location.reload(); 
+0

questo rimuove solo l'intestazione del referrer. non aggiunge un'intestazione personalizzata –

+0

Giusta. la domanda non riguarda l'aggiunta dell'intestazione personalizzata. – Vaibs

0

È possibile modificare il valore della referrer nell'intestazione HTTP utilizzando l'API di richiesta Web.

Richiede uno script js in background per il suo utilizzo. È possibile utilizzare onBeforeSendHeaders poiché modifica l'intestazione prima che la richiesta venga inviata.

Il codice sarà qualcosa di simile:

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" 
]); 

gli URL: Esso agisce come un filtro di richiesta, e invoca l'ascoltatore solo per alcune richieste.

Per maggiori informazioni: https://developer.chrome.com/extensions/webRequest

+0

qualche possibilità di un esempio migliore? dove posso incollare questo? – Toolkit

+0

Si suppone che si debba creare uno script in background e incollarlo in quel file. Assicurati di aggiungere il file come script di sfondo nel tuo manifest. – Nalin

0

Se si desidera cambiare l'intestazione (url) referer che verrà inviato al server quando un utente fa clic su un ancoraggio o iframe è aperto, è possibile farlo senza alcun hack . Basta fare la storia.replaceState, cambierai l'url come apparirà nella barra del browser e anche il referer che verrà inviato al server.

+0

È possibile sostituire solo il percorso o aggiungi-rimuovi i frammenti, non il dominio con 'history.replaceState'. [developer.mozilla.org su history.replaceState] (https://developer.mozilla.org/en-US/docs/Web/API/History_API#The_replaceState() _method) – Cemal

Problemi correlati