La fonction de source de trafic est disponible dans les services de statistiques de la circulation. La source de trafic est un concept pour le niveau de visite. En d'autres termes, lorsque la visite est établie, la source de trafic de la page de destination est la source de trafic de la visite. Bien qu'il existe de nombreux types de source de trafic, malheureusement, sur la base de JS, il n'y a que deux façons d'obtenir la source de trafic - document.referrer et window.opener. Ce qui est plus regrettable, c'est qu'il n'y a pas beaucoup de scénarios que Windows.Opener convient, et Document.Referrer est si faible qu'il est impossible de déterminer avec précision la source du trafic dans de nombreux scénarios.
Aperçu de Document.Referrer
En termes d'utilisation, Document.Referrer espère suivre le comportement du navigateur. Si une page A est ouverte, les actions qui peuvent se produire sur le navigateur incluent les opérations utilisateur et le code JS.
Jetons d'abord un œil aux actions que les utilisateurs peuvent effectuer lors de l'ouverture de la page A:
| 1 | Entrez l'adresse d'un directement dans la barre d'adresse |
| 2 | Cliquez sur le lien A depuis la page B et passez à la page A |
| 3 | Cliquez avec le bouton droit sur le lien A depuis la page B pour ouvrir dans une nouvelle fenêtre |
| 4 | Cliquez avec le bouton droit sur le lien A depuis la page B et ouvrez-le dans le nouvel onglet |
| 5 | Faites glisser le lien A pour adresser la barre |
| 6 | Faites glisser le lien A à la barre d'onglet |
| 7 | Utilisez les boutons avant et arrière du navigateur |
Notez que le lien ici fait référence à la balise <a>, mais s'il y a un événement ou une cible, cela devrait être une question différente.
Moyens possibles d'ouvrir une page par JS:
| 1 | Modifier la fenêtre. |
| 2 | Utiliser Window.Open |
| 3 | Cliquez sur Flash |
Ce qui précède répertorie certaines méthodes pour que le client ouvre la page. De plus, si la technologie de redirection du serveur est utilisée, la page A peut également être présentée aux visiteurs.
Voici un test de navigateur spécifique. Si les situations ci-dessus sont ce qui précède, comment fonctionne Document.Referrer:
| Numéro de série | Scène | IE8.0 | FF3.6 | FF4.0 | chrome |
| 1 | Entrez l'adresse d'un directement dans la barre d'adresse | "" | "" | "" | "" |
| 2 | Cliquez sur le lien A depuis la page B et page A Remplacer la page B (Target = '_ self') | √ | √ | √ | √ |
| 3 | Cliquez sur le lien A depuis la page B, A s'ouvre dans une nouvelle fenêtre (Target = '_ Blank') | √ | √ | √ | √ |
| 3 | Cliquez avec le bouton droit sur le lien A depuis la page B pour ouvrir dans une nouvelle fenêtre | √ | √ | √ | "" |
| 4 | Cliquez avec le bouton droit sur le lien A depuis la page B et ouvrez-le dans le nouvel onglet | √ | √ | √ | "" |
| 5 | Faites glisser le lien A à la barre d'adresse avec la souris | / | "" | "" | "" |
| 6 | Lien de traînée de souris A à la barre d'onglet | "" | "" | "" | "" |
| 7 | Utilisez les boutons avant et arrière du navigateur | Garder | Garder | Garder | Garder |
| 8 | Modifier Window.Location to Ouvrir la page A (même domaine) | "" | √ | √ | √ |
| 9 | Ouvrir la page A Using Window.Open | "" | √ | √ | √ |
| 10 | Cliquez sur Flash pour ouvrir la page A | ||||
| 11 | Redirection du serveur vers la page A | "" | "" | "" | "" |
Lorsque "" signifie une chaîne vide, √ signifie que la page source peut être correctement jugée et maintenir signifie que le référence qui ne changera pas la page lorsque l'avant et vers l'arrière ne changera pas. À partir de ce tableau, nous pouvons voir ce document.Referrer peut couvrir environ la moitié des cas. Cependant, pour certaines opérations plus couramment utilisées, comme faire glisser le lien vers la barre d'onglet avec la souris, aller de l'avant et vers l'arrière, etc., il ne peut pas être correctement géré.
Source de document.Referrer
Lorsque le navigateur demande la page A du serveur, il enverra une demande HTTP. L'en-tête de cette demande aura l'attribut référentiel. Une fois que le serveur a reçu la demande, il peut extraire le référence dans l'en-tête pour déterminer quelle page le visiteur a initié la demande.
D'une manière générale, quel est le référence dans l'en-tête envoyé par le navigateur lors de la demande de A, alors quelle est la valeur du document.referre après avoir obtenu la page A. L'image ci-dessus est une en-tête demandant la page A, et le document.referre de a est http: //localhost/test/b.html.
Si l'en-tête ne contient pas de référence, lors de l'utilisation de document.referre, il sera attribué en tant que chaîne vide.
À propos de la demande HTTPS
Si vous cliquez sur un lien HTTPS sur une page HTTP normale, vous pouvez joindre les informations du référence à l'en-tête de demande HTTPS, puis vous pouvez toujours utiliser Document.Referre pour obtenir la page HTTP normale dans la page HTTPS.
De même, si vous cliquez sur un autre lien HTTPS sur une page HTTPS, vous pouvez joindre les informations du référence à l'en-tête de la demande.
Cependant, si vous cliquez sur le lien HTTP à partir d'une page HTTP, malheureusement, l'en-tête de demande HTTP envoyée ne peut pas contenir d'informations sur la page HTTP, qui peut être due à une mesure de protection pour la page HTTP.
Informations sur les références forgées
Selon la description ci-dessus, Document.referre est dérivé du référence dans l'en-tête. Ensuite, si vous souhaitez modifier la valeur de Document.Referre, théoriquement, vous n'avez qu'à modifier l'en-tête de demande. Vous pouvez remplacer le référent existant dans l'en-tête par la valeur que vous souhaitez. S'il n'est pas disponible à l'origine, vous pouvez ajouter le référence.
Côté client, la falsification de l'en-tête est une chose très facile. Avant que une demande HTTP sur une page ne soit envoyée, vous pouvez utiliser l'outil d'intercepteur de paquets pour l'intercepter, puis analyser les informations d'en-tête et modifier la référence.
Après la recherche, Firefox peut être facilement modifié à l'aide du plug-in RefControl. Quoi qu'il en soit, tromper la source de trafic est un jeu d'enfant.
Rafraîchissement de la force de la page
Peu de temps après avoir fini d'écrire, j'ai constaté qu'un moyen de sauter la page manquait, c'est-à-dire pour forcer la page à être spécifiée dans la balise Meta dans le HTML pour actualiser. Par exemple, écrivez en b.html
Copiez le code du code comme suit: <meta http-equiv = "refresh" content = "5; url = a.html">
Ensuite, après 5 secondes, le navigateur lancera automatiquement une demande de page au serveur.
Après le test, dans IE8, FF3.6-FF4.0, il n'y aura pas d'informations pour références, mais Chrome peut ajouter B.HTML en tant que référence de l'en-tête par erreur.