web-dev-qa-db-fra.com

location.Host vs location.hostname et compatibilité entre navigateurs?

Laquelle de ces méthodes est la plus efficace contre la vérification si l’agent utilisateur accède via le domaine correct.

Nous aimerions montrer un petit avertissement de style 'top bar' basé sur js s’ils accèdent au domaine en utilisant une sorte de proxy web (car cela tend à casser le js).

Nous pensions utiliser les éléments suivants:

var r = /.*domain\.com$/;
if (r.test(location.hostname)) {
    // showMessage ...
}

Cela prendrait en charge tous les sous-domaines que nous utilisons.

Lequel devrions-nous utiliser hôte ou nom d'hôte?

Dans Firefox 5 et Chrome 12:

console.log(location.Host);
console.log(location.hostname);

.. montre la même chose pour les deux.

Est-ce parce que le port n'est pas réellement dans la barre d'adresse?

W3Schools dit que l'hôte contient le port.

Faut-il valider location.host/hostname ou pouvons-nous être assez certains dans IE6 + et tous les autres qu'il existera?

306
anonymous-one

 interactive link anatomy

Comme petit mémo: le lien interactif anatomie

-

En bref (en supposant un emplacement de http://example.org:8888/foo/bar#bang):

  • hostname vous donne example.org
  • Host vous donne example.org:8888
895
abernier

L'hôte inclut uniquement le numéro de port s'il en existe un spécifié. S'il n'y a pas de numéro de port spécifique dans l'URL, le système retourne le même nom que le nom d'hôte. Vous choisissez si vous souhaitez faire correspondre le numéro de port ou non. Voir https://developer.mozilla.org/en/window.location pour plus d'informations.

Je suppose que vous voulez que le nom d'hôte obtienne simplement le nom du site.

68
jfriend00

Si vous insistez pour utiliser le window.location.OriginVous pouvez le mettre en haut de votre code avant de lire la Origin

if (!window.location.Origin) {
  window.location.Origin = window.location.protocol + "//" + window.location.hostname + (window.location.port ? ':' + window.location.port: '');
}

Solution 

PS: Pour mémoire, c’était en fait la question initiale. Ils l'ont probablement déjà édité. :)

28
Kenneth Palaganas

Vous avez répondu à votre question principale ci-dessus. Je voulais juste souligner que la regex que vous utilisez a un bug. Il réussira également sur foo-domain.com qui n'est pas un sous-domaine de domain.com

Ce que vous voulez vraiment, c'est ceci:

/(^|\.)domain\.com$/
9
bluesmoon

MDN: https://developer.mozilla.org/en/DOM/window.location

Il semble que vous obtiendrez le même résultat pour les deux, mais hostname contient un nom d’hôte clair sans crochets ni numéro de port.

3
Igor Dymov

Il suffit d'ajouter une note indiquant que le navigateur Google Chrome a l'attribut Origine pour l'emplacement. qui vous donne le domaine entier du protocole au numéro de port, comme indiqué dans la capture d'écran ci-dessous.  chrome developers tool

0
Gopi P