2009-02-24 21 views
39

In una pagina HTML, facendo clic sul collegamento di un tag Immagine ("img") o ancora ("a"), vorrei aggiungere intestazioni personalizzate per la richiesta GET. Questi collegamenti sono in genere per il download di contenuti dinamici. Queste intestazioni potrebbero essere intestazioni SAML o intestazioni specifiche dell'applicazione personalizzate.Aggiunta di intestazioni HTTP personalizzate utilizzando JavaScript

È possibile aggiungere queste intestazioni personalizzate tramite JavaScript? O se li aggiungo tramite XMLHttpRequest, come posso ottenere la funzionalità di download?

Questo requisito è solo per IE6 o 7.

+2

Vorrei fare lo stesso, ad esempio se si desidera ottenere l'immagine dal servizio che richiede l'intestazione di autenticazione nella richiesta GET. –

risposta

40

Se si utilizza XHR, quindi setRequestHeader dovrebbe funzionare, ad es.

xhr.setRequestHeader('custom-header', 'value'); 

P.S. Dovresti usare Hijax per modificare il comportamento delle tue ancore in modo che funzioni se per qualche motivo AJAX non funziona per i tuoi clienti (come uno script rotto in un'altra pagina).

12

Penso che il modo più semplice per farlo è usare querystring invece di intestazioni HTTP.

+1

+1. Anche quando si utilizza XMLHttpRequest, l'impostazione delle intestazioni non è del tutto affidabile. Vai per i parametri. – bobince

+1

Se si utilizza SSL e le informazioni che si inviano sono sensibili, non dovresti inserirle nella Querystring perché non verranno crittografate. Solo il corpo del messaggio http è crittografato, quindi più sicuro nell'intestazione –

+5

@JamesReategui Questo non è corretto: l'URL è crittografato durante il transito. Il potenziale problema di sicurezza sarebbe la persistenza di URL segreti negli endpoint (nei registri o nei segnalibri o nella cronologia), ma non nel transito. –

12

L'unico modo per aggiungere intestazioni a una richiesta da un browser è utilizzare il metodo setRequestHeader XmlHttpRequest.

L'utilizzo di questo con la richiesta "GET" scaricherà la risorsa. Il trucco è quindi quello di accedere alla risorsa nel modo previsto. Apparentemente dovresti essere in grado di consentire alla risposta GET di essere memorizzata nella cache per un breve periodo, quindi la navigazione verso un nuovo URL o la creazione di un tag IMG con un URL src dovrebbe utilizzare la risposta memorizzata nella cache dal precedente "GET". Tuttavia è molto probabile che fallisca specialmente in IE, che può essere un po 'una legge per se stesso in cui è interessato il cache.

In definitiva sono d'accordo con Mehrdad, l'uso della stringa di query è il metodo più semplice e più affidabile.

Un'altra alternativa alternativa è utilizzare un XHR per effettuare una richiesta a un URL che indica l'intenzione di accedere a una risorsa. Potrebbe rispondere con un cookie di sessione che verrà portato dalla successiva richiesta per l'immagine o il collegamento.

0

Come già detto, il modo più semplice è utilizzare querystring.

Tuttavia, se non è possibile, per motivi di sicurezza, è consigliabile considerare l'utilizzo dei cookie.

Problemi correlati