web-dev-qa-db-fra.com

Ajout d'en-têtes HTTP personnalisés à l'aide de JavaScript

Sur une page HTML, en cliquant sur le lien d'une image ("img") ou d'une balise d'ancrage ("a"), je voudrais ajouter des en-têtes personnalisés pour la demande GET. Ces liens sont généralement destinés au téléchargement de contenu dynamique. Ces en-têtes peuvent être des en-têtes SAML ou des en-têtes spécifiques à une application personnalisée.

Est-il possible d'ajouter ces en-têtes personnalisés via JavaScript? Ou si je les ajoute via XMLHttpRequest, comment puis-je obtenir la fonctionnalité de téléchargement?

Cette exigence concerne uniquement IE6 ou 7.

40
Srinivas

Si vous utilisez XHR , alors setRequestHeader devrait fonctionner, par exemple.

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

P.S. Vous devez utiliser Hijax pour modifier le comportement de vos ancres afin qu'il fonctionne si pour une raison quelconque le AJAX ne fonctionne pas pour vos clients (comme un script éclaté ailleurs sur la page).

40
Hank Gay

Je pense que la façon la plus simple d'y parvenir est d'utiliser la chaîne de requête au lieu des en-têtes HTTP.

12
Mehrdad Afshari

La seule façon d'ajouter des en-têtes à une requête depuis l'intérieur d'un navigateur est d'utiliser la méthode XmlHttpRequest setRequestHeader.

L'utiliser avec la requête "GET" téléchargera la ressource. L'astuce consiste alors à accéder à la ressource de la manière prévue. En apparence, vous devriez être en mesure d'autoriser la mise en cache de la réponse GET pendant une courte période, donc la navigation vers une nouvelle URL ou la création d'une balise IMG avec une URL src doit utiliser la réponse mise en cache de la précédente "GET". Cependant, cela est très susceptible d'échouer, en particulier dans IE qui peut être un peu une loi en soi en ce qui concerne le cache.

En fin de compte, je suis d'accord avec Mehrdad, l'utilisation de la chaîne de requête est la méthode la plus simple et la plus fiable.

Une autre alternative originale est d'utiliser un XHR pour faire une demande à une URL qui indique votre intention d'accéder à une ressource. Il pourrait répondre par un cookie de session qui sera porté par la demande ultérieure de l'image ou du lien.

12
AnthonyWJones

Comme déjà dit, le moyen le plus simple consiste à utiliser la chaîne de requête.

Mais si vous ne pouvez pas, pour des raisons de sécurité, vous devriez envisager d'utiliser des cookies.

0