2009-02-24 16 views
39

En una página HTML, al hacer clic en el vínculo de una etiqueta de imagen ("img") o de anclaje ("a"), me gustaría agregar encabezados personalizados para la solicitud GET. Estos enlaces suelen ser para descargar contenido dinámico. Estos encabezados pueden ser encabezados SAML o encabezados específicos de aplicaciones personalizadas.Agregar encabezados HTTP personalizados usando JavaScript

¿Es posible agregar estos encabezados personalizados a través de JavaScript? O si los agrego a través de XMLHttpRequest, ¿cómo puedo lograr la funcionalidad de descarga?

Este requisito es solo para IE6 o 7.

+2

Me gustaría hacer lo mismo, por ejemplo, si desea obtener una imagen del servicio que requiere el encabezado de autenticación en la solicitud GET. –

Respuesta

40

Si está utilizando XHR, entonces setRequestHeader debería funcionar, p.

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

P.S. Debería usar Hijax para modificar el comportamiento de sus anclajes para que funcione si por alguna razón AJAX no funciona para sus clientes (como un script retenido en otro lugar de la página).

12

Creo que la forma más fácil de lograrlo es utilizar la cadena de consulta en lugar de encabezados HTTP.

+1

+1. Incluso al usar XMLHttpRequest, establecer encabezados no es del todo confiable. Ir por los parámetros. – bobince

+1

Si usa SSL y la información que está enviando es confidencial, no debe ponerla en la cadena de consulta porque no se cifrará. Solo el cuerpo del mensaje http está encriptado, por lo tanto, es más seguro en el encabezado –

+5

@JamesReategui. Eso no es correcto: la URL está encriptada en tránsito. El posible problema de seguridad sería la persistencia de URL secretas en los puntos finales (en registros o marcadores o historial), pero no en tránsito. –

12

La única manera de agregar encabezados a una solicitud desde dentro de un navegador es usar el método XmlHttpRequest setRequestHeader.

Al usar esto con la solicitud "GET" se descargará el recurso. El truco es acceder al recurso de la manera prevista. Ostensiblemente deberías poder permitir que la respuesta GET sea almacenable por un corto período, por lo tanto, la navegación a una nueva URL o la creación de una etiqueta IMG con una url src deben usar la respuesta en caché del "GET" anterior. Sin embargo, es bastante probable que falle especialmente en IE, que puede ser una especie de ley en sí misma en lo que respecta al caché.

En última instancia, estoy de acuerdo con Mehrdad, el uso de la cadena de consulta es el método más fácil y más confiable.

Otra alternativa peculiar es utilizar un XHR para realizar una solicitud a una URL que indique su intención de acceder a un recurso. Podría responder con una cookie de sesión que será llevada por la solicitud posterior de la imagen o enlace.

0

Como ya he dicho, la forma más fácil es utilizar la cadena de consulta.

Pero si no puede, por razones de seguridad, debería considerar el uso de cookies.

Cuestiones relacionadas