Demande incorrecte - Nom d'hôte IIS7 non valide

86

Lorsque j'essaie d'accéder à mon application Web sur le port 8080, j'obtiens l'erreur suivante

Mauvaise demande - Nom d'hôte non valide
Erreur HTTP 400. Le nom d'hôte de la demande n'est pas valide.

Je ne sais même pas par où commencer pour diagnostiquer ce problème

burnt1ce
la source

Réponses:

74

Avez-vous vérifié que la liaison est IIS? (inetmgr.exe) Il n'est peut-être pas enregistré pour accepter tous les noms d'hôte sur 8080.

Par exemple, si vous le configurez pour mysite.com:8080 et que vous le frappez à localhost: 8080, IIS obtiendra la demande mais n'aura pas de liaison de nom d'hôte pour correspondre, il rejette donc.

En dehors de cela, vous devez vérifier les journaux IIS (C: \ inetpub \ logs \ wmsvc #) sur le serveur et voir si vous voyez votre demande. Vous saurez alors si c'est un problème sur votre client ou sur le serveur lui-même.

Taylor Bird
la source
2
Dans mon cas, j'ai dû ajouter la ligne suivante dans mon C: \ Windows \ System32 \ drivers \ etc \ hosts: "127.0.0.1 localhost"
chris
4
Où configurez-vous les liaisons dans IIS Manager?
Steve Smith
30

FWIW, si vous souhaitez simplement autoriser les demandes dirigées vers n'importe quel nom d'hôte / adresse IP, vous pouvez définir votre liaison comme suit:

<binding protocol="http" bindingInformation="*:80:*" />

J'utilise cette liaison afin de pouvoir charger une VM avec IE6, puis déboguer mon application.


EDIT: lors de l'utilisation d'IIS Express pour déboguer, l'emplacement par défaut du fichier de configuration de cette option est

C:\Users\{User}\Documents\IISExpress\config\applicationhost.config
Jeff LaFay
la source
1
Vous pouvez également faire fonctionner IIS Express avec des requets distants en utilisant notre extension VS gratuite appelée Conveyor (n'implique aucun changement de configuration). Utilisez Outils-> Extensions ... pour l'obtenir, ou sur marketplace.visualstudio.com/...
Jim W dit de réintégrer Monica
25

Cette page de Microsoft décrit comment configurer l'accès à IIS Server Express à partir d'autres ordinateurs sur le réseau local.

En un mot:

1) à partir d'une invite de commande avec des privilèges d'administrateur:

netsh http add urlacl url=http://[your ip address]:8181/ user=everyone

2) Dans le pare-feu Windows avec sécurité avancée, créez une nouvelle règle entrante pour le port 8181 afin d'autoriser les connexions externes

3) Dans applicationhost.config, dans le nœud de votre projet, ajoutez:

<binding protocol="http" bindingInformation="*:8181:[your ip address]" />

N'ajoutez PAS (comme cela a été suggéré dans une autre réponse):

<binding protocol="http" bindingInformation="*:8181:*" />

La liaison générique ci-dessus a interrompu mon accès de http://192.168.1.6:8181/

Erwin
la source
4
En outre, vous devez exécuter Visual Studio avec le privilège d'administrateur, sinon vous ne pourrez pas vous lier à IIS Express. Une fois le test terminé en tant qu'administrateur, vous devrez inverser les étapes précédentes en supprimant l'entrée supplémentaire du fichier applicationhost.config et en supprimant l'entrée HTTP.sys en utilisant: netsh http delete urlacl url=http://[your ip address]:8181/
SteveC
1
Si votre ordinateur est configuré dans une langue différente, alors "utilisateur = tout le monde" devrait être autre chose. En français, c'est user = "Tout le monde". Voir cette réponse: stackoverflow.com/a/18856394/1317559
Yster
24

J'ai donc résolu ce problème en accédant à mon site Web dans IIS Manager et en modifiant le nom d'hôte dans les liaisons de site de localhost à *. Commencé à travailler immédiatement.

Liaisons de sites dans IIS

SINGULARITÉ
la source
parfait! A travaillé pour une instance AWS utilisée pour exécuter un site Laravel
Vishnoo Rath
Cela a résolu mon problème avec le noyau asp.net où il fonctionnait sur localhost mais pas sur l'adresse IP distante, merci!
Philip
Cela a fonctionné dans mon cas. Bien que j'aie hébergé plus de 100 sites. erreur la première fois et n'a pas été en mesure de trouver dans les règles de pare-feu ou toute autre solution.
Ketan Kotak
9

Pour Visual Studio 2017et Visual Studio 2015, les IIS Expressparamètres sont stockés dans le .vsrépertoire caché et le chemin est quelque chose comme ça .vs\config\applicationhost.config, ajouter une liaison comme ci-dessous fonctionnera

<bindings>
    <binding protocol="http" bindingInformation="*:8802:localhost" />
    <binding protocol="http" bindingInformation="*:8802:127.0.0.1" />
</bindings>

Syntaxe: https://docs.microsoft.com/en-us/dotnet/api/microsoft.web.administration.binding.bindinginformation?view=iis-dotnet

imgen
la source
2
Pour toute personne utilisant cette méthode, il n'est pas important de noter que le modèle d'informations de liaison correct est: adresse IP: port: en-tête d'hôte. La mise en œuvre correcte est donc: <bindings> <binding protocol="http" bindingInformation="localhost:8802:*" /> <binding protocol="http" bindingInformation="127.0.0.1:8802:*"/> </bindings>
Lionnel Afangbedjee
1
Le dossier .vs est le dossier du dossier racine de votre projet. Dans cette applicationhost.config, recherchez la balise <site name = "[YourService / ProjectName]> et recherchez la balise <bindings> là-bas.
NexX
4

N'oubliez pas de vous lier à l'adresse IPv6 également! J'essayais d'ajouter un site sur 127.0.0.1 en utilisant localhost et j'ai obtenu la mauvaise demande / erreur de nom d'hôte invalide. Lorsque j'ai envoyé un ping à localhost, il s'est résolu à :: 1 puisque IPv6 était activé, je devais donc simplement ajouter la liaison supplémentaire pour résoudre le problème.

Liaisons de sites IIS

Jeff Camera
la source
4

Cela a résolu mon problème (désolé pour mon mauvais anglais):

  1. ouvrez cmd en tant qu'administrateur et exécutez la commande (sans les crochets):
    netsh http add urlacl url=http://[ip adress]:[port]/ user=everyone

  2. dans documents/iisexpress/config/applicationhost.configet dans votre dossier de projet racine dans le dossier (caché): .vs/config/applicationhost.configvous devez ajouter une ligne à la balise "site":
    <binding protocol="http" bindingInformation="*:8080:192.xxx.xxx.xxx" />

  3. ouvrez "gestionnaire de services d'information Internet (iis)"
    (pour le trouver: dans la recherche dans la barre des tâches, écrivez "Activer ou désactiver les fonctionnalités de la fenêtre" et ouvrez le résultat, puis cochez la case "service d'information Internet" et installez-le):

    1. dans l'écran gauche, cliquez sur: nom de l'ordinateur -> Sites -> Site Web par défaut et
    2. puis cliquez dans l'écran de droite "Binding"
    3. cliquez sur le bouton Ajouter
    4. écrivez ce dont vous avez besoin et appuyez sur "OK".
  4. ouvrez "Pare-feu Windows avec sécurité avancée",

    1. dans l'écran gauche, appuyez sur "Règles entrantes" puis
    2. appuyez sur dans l'écran de droite "Nouvelle règle ..."
    3. vérifiez le port et appuyez sur Suivant,
    4. vérifiez TCP et votre port et appuyez sur Suivant,
    5. cochez "Autoriser la connexion" et appuyez sur Suivant,
    6. cochez toutes les cases et appuyez sur Suivant,
    7. écrivez le nom et appuyez sur Terminer.
  5. terminé.

izik f
la source
3

Je ne sais pas si c'était votre problème, mais pour quiconque essaie d'accéder à son application Web depuis sa machine et rencontre ce problème:

Assurez-vous que vous vous connectez à 127.0.0.1(aka localhost) et non à votre adresse IP externe.

Votre URL doit être quelque chose comme http://localhost:8181/ou http://127.0.0.1:8181et non http://YourExternalIPaddress:8181/ .


Informations supplémentaires:
La raison pour laquelle cela fonctionne est que votre pare-feu peut bloquer votre propre demande. Cela peut être un pare-feu sur votre système d'exploitation et cela peut être (d'habitude) votre routeur.

Lorsque vous vous connectez à votre adresse IP externe, vous vous connectez à partir d'Internet, comme si vous étiez un inconnu (ou un pirate informatique).
Cependant, lorsque vous vous connectez à votre hôte local, vous vous connectez localement en tant que vous-même et le blocage n'est évidemment pas nécessaire (et évité complètement).

MasterMastic
la source
J'ai ce problème où lors de l'utilisation de localhost fonctionne mais lors de l'utilisation de l'adresse IP locale de la machine (ne fonctionne pas). Pourquoi avez-vous spécifiquement dit de ne pas utiliser votre adresse IP - pourquoi cela ne fonctionne pas - j'aimerais comprendre?
Code Uniquely
1
Il est absurdement trivial pour un "hacker" de changer le nom d'hôte utilisé pour se connecter à un site Web.
Arafangion
@Arafangion Changer où et quoi gagner?
MasterMastic
@MasterMastic: Par exemple, sous Linux, modifiez le fichier /etc/hosts.conf. Windows a l'équivalent. Ou encore plus trivialement, dites simplement à curl ou wget quel nom d'hôte signaler. Ici, vous comptez apparemment sur le "nom d'hôte" pour bloquer les requêtes d'Internet, donc ce que le hacker gagne est évidemment tout ce dont il a besoin en contournant votre mécanisme de "protection" apparent. IIS semble toujours se lier au port. Le correctif correct est de ne pas se lier au port accessible de l'extérieur en premier lieu.
Arafangion
@Arafangion Ouais mais c'est une redirection locale. Le point ici n'est pas localhost, c'est ce à quoi il fait référence ( 127.0.0.1). Tout ce que je dis, c'est de vous connecter à cela et non à votre adresse IP visible de l'extérieur. Il n'y a pas de dépendance sur l'hôte local, il est simplement utilisé comme synonyme. Je modifierai ma réponse pour que cela soit plus clair.
MasterMastic
2

Vous pouvez utiliser l'outil CMD Visual Studio 2005/2008/2010. Exécutez-le en tant qu'administrateur et écrivez

aspnet_regiis -i

Enfin, je peux exécuter mon application avec succès.

FrankFan
la source
2

Si vous travaillez sur un serveur local ou si vous n'avez pas de nom de domaine, supprimez le champ "Nom d'hôte:". entrez la description de l'image ici

Tahir FEYZIOGLU
la source
1

Vérifiez votre fichier d'hôtes local (C: \ Windows \ System32 \ drivers \ etc \ hosts par exemple). Dans mon cas, j'avais déjà utilisé cela pour pointer une URL vers une boîte de développement, puis je l'avais oublié. Quand j'ai ensuite réutilisé la même URL, j'ai continué à recevoir une mauvaise demande (nom d'hôte invalide) car le trafic allait vers le mauvais serveur.

robaker
la source
1

J'ai eu cette erreur lorsque j'ai essayé d'appeler un service Web en utilisant "localhost". Je l'ai corrigé en utilisant l'adresse IP réelle à la place (192.168 ...)

Cosmin
la source
Gagnant. C'était mon problème sur le serveur Windows 2003.
DreamTeK
0

J'ai vu la même erreur après avoir utilisé msdeploy pour copier l'application sur un nouveau serveur. Il s'est avéré que les liaisons utilisaient toujours l'adresse IP du serveur précédent. Alors, vérifiez l'adresse IP dans les liaisons IIS. (Cela semble évident après coup, mais je ne suis pas venu immédiatement à l'idée de le vérifier).

dan9298
la source
0

Vérifiez l'URL exacte que vous fournissez. J'ai vu cette erreur lorsque j'ai manqué le préfixe d'itinéraire défini dans ASP.NET, donc il ne savait pas où acheminer la demande.

Taran
la source
0

Assurez-vous qu'IIS écoute votre port.

Dans mon cas, c'était le problème. J'ai donc dû changer mon port pour quelque chose d'autre comme 8083 et cela a résolu ce problème.

Dudi
la source