Je souhaite capturer les champs d'en-tête de demande HTTP, principalement le référent et l'agent utilisateur, dans mon JavaScript côté client. Comment puis-je y accéder?
Google Analytics parvient à obtenir les données via JavaScript qu'ils vous intègrent dans vos pages, il est donc certainement possible.
Connexes:
Accès aux en-têtes HTTP de la page Web en JavaScript
Si vous souhaitez accéder au référent et à l'agent utilisateur, ceux-ci sont disponibles pour Javascript côté client, mais pas en accédant directement aux en-têtes.
Pour récupérer le référent, utilisez document.referrer
.
Pour accéder à l'agent utilisateur, utilisez navigator.userAgent
.
Comme d'autres l'ont indiqué, les en-têtes HTTP ne sont pas disponibles, mais vous avez spécifiquement posé des questions sur le référent et l'agent utilisateur, qui sont disponibles via Javascript.
Presque par définition, le JavaScript côté client n'est pas à l'extrémité de réception d'une demande http, il n'a donc pas d'en-tête à lire. Le plus souvent, votre JavaScript est le résultat d'une réponse http. Si vous essayez d'obtenir les valeurs de la requête http qui a généré votre réponse, vous devrez écrire du code côté serveur pour incorporer ces valeurs dans le JavaScript que vous produisez.
Il est un peu difficile de faire générer du code côté client par du code côté serveur, alors assurez-vous que c'est ce dont vous avez besoin. Par exemple, si vous souhaitez obtenir les informations sur l'agent utilisateur, vous pouvez trouver qu'elles sont suffisantes pour obtenir les différentes valeurs fournies par JavaScript pour la détection du navigateur. Commencez avec navigator.appName et navigator.appVersion.
On peut y accéder via Javascript car c'est une propriété du document chargé, pas de son parent.
Voici un exemple rapide:
<script type="text/javascript">
document.write(document.referrer);
</script>
La même chose en PHP serait:
<?php echo $_SERVER["HTTP_REFERER"]; ?>
Le référent et l'agent utilisateur sont l'en-tête de demande et non l'en-tête de réponse.
Cela signifie qu'ils sont envoyés par navigateur ou par votre appel ajax (dont vous pouvez modifier la valeur), et ils sont décidés avant d'obtenir une réponse HTTP.
Donc, fondamentalement, vous ne demandez pas un en-tête HTTP, mais un paramètre de navigateur.
La valeur que vous obtenez à partir de document.referer et navigator.userAgent peut ne pas être l'en-tête réel, mais un paramètre de navigateur.
J'imagine que Google attrape certains côté serveur de données - rappelez-vous, lorsqu'une page se charge dans votre navigateur contenant du code Google Analytics, votre navigateur fait une demande aux serveurs de Google; Google peut obtenir des données de cette manière ainsi que via le JavaScript intégré à la page.