Solicitud incorrecta: nombre de host IIS7 no válido


86

Cuando intento acceder a mi aplicación web en el puerto 8080, aparece el siguiente error

Solicitud incorrecta: nombre de host no válido
Error HTTP 400. El nombre de host de la solicitud no es válido.

Ni siquiera sé por dónde empezar a diagnosticar este problema.

Respuestas:


74

¿Verificó que el enlace es IIS? (inetmgr.exe) Es posible que no esté registrado para aceptar todos los nombres de host en 8080.

Por ejemplo, si lo configura para mysite.com:8080 y lo golpea en localhost: 8080, IIS obtendrá la solicitud pero no tendrá un enlace de nombre de host para que coincida, por lo que rechazará.

Fuera de eso, debe verificar los registros de IIS (C: \ inetpub \ logs \ wmsvc #) en el servidor y ver si está viendo su solicitud. Entonces sabrá si es un problema en su cliente o en el servidor mismo.


2
En mi caso, tuve que agregar la siguiente línea en mi C: \ Windows \ System32 \ drivers \ etc \ hosts: "127.0.0.1 localhost"
chris

4
¿Dónde configura los enlaces en el Administrador de IIS?
Steve Smith

30

FWIW, si solo desea permitir solicitudes dirigidas a cualquier nombre de host / ip, puede configurar su enlace de la siguiente manera:

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

Utilizo este enlace para poder cargar una máquina virtual con IE6 y luego depurar mi aplicación.


EDITAR: Mientras usa IIS Express para depurar, la ubicación predeterminada para el archivo de configuración de esta opción es

C:\Users\{User}\Documents\IISExpress\config\applicationhost.config

1
También puede hacer que IIS Express funcione con solicitudes remotas utilizando nuestra extensión VS gratuita llamada Conveyor (no implica cambios de configuración). Use Herramientas-> Extensiones ... para obtenerlo, o en marketplace.visualstudio.com/…
Jim W dice restablecer a Monica

25

Esta página de Microsoft describe cómo configurar el acceso a IIS Server Express desde otras computadoras en la red local.

En una palabra:

1) desde un símbolo del sistema con privilegios de administrador:

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

2) En el Firewall de Windows con seguridad avanzada, cree una nueva regla de entrada para el puerto 8181 para permitir conexiones externas

3) En applicationhost.config, en el nodo de su proyecto, agregue:

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

NO agregue (como se sugirió en otra respuesta):

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

El enlace comodín anterior rompió mi acceso desde http://192.168.1.6:8181/


4
Además, debe ejecutar Visual Studio con privilegios de administrador; de lo contrario, no podrá vincularse a IIS Express. Cuando termine de probar como administrador, deberá revertir los pasos anteriores eliminando la entrada adicional del archivo applicationhost.config y eliminando la entrada HTTP.sys usando: netsh http delete urlacl url=http://[your ip address]:8181/
SteveC

1
Si su computadora está configurada en un idioma diferente, entonces "usuario = todos" debería ser otra cosa. En francés es user = "Tout le monde". Vea esta respuesta: stackoverflow.com/a/18856394/1317559
Yster

24

Entonces, resolví esto yendo a mi sitio web en el Administrador de IIS y cambiando el nombre de host en los enlaces del sitio de localhost a *. Comenzó a trabajar de inmediato.

Enlaces de sitio en IIS


¡Perfecto! Trabajó para una instancia de AWS utilizada para ejecutar un sitio de Laravel
Vishnoo Rath

Esto solucionó mi problema con asp.net core donde funcionaba en localhost pero no en la ip remota, ¡gracias!
Philip

Funcionó en mi caso. Aunque había alojado más de 100 sitios. equivocado la primera vez y no pude encontrar en las reglas de firewall o cualquier otra solución.
Ketan Kotak

9

Para Visual Studio 2017y Visual Studio 2015, la IIS Expressconfiguración se almacena en el .vsdirectorio oculto y la ruta es algo como esto .vs\config\applicationhost.config, agregar enlace como a continuación funcionará

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

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


2
Para cualquiera que utilice este método, no es importante tener en cuenta que la plantilla de información de enlace correcta es: dirección ip: puerto: encabezado de host. Entonces, la implementación correcta es: <bindings> <binding protocol="http" bindingInformation="localhost:8802:*" /> <binding protocol="http" bindingInformation="127.0.0.1:8802:*"/> </bindings>
Lionnel Afangbedjee

1
La carpeta .vs es la carpeta en la carpeta raíz de su proyecto. En ese applicationhost.config busque la etiqueta <site name = "[YourService / ProjectName]> y busque la etiqueta <bindings> allí.
NexX

4

¡No olvide vincularse también a la dirección IPv6! Estaba tratando de agregar un sitio en 127.0.0.1 usando localhost y obtuve el error de solicitud incorrecta / nombre de host no válido. Cuando hice ping a localhost, se resolvió en :: 1 ya que IPv6 estaba habilitado, así que solo tuve que agregar el enlace adicional para solucionar el problema.

Enlaces de sitio IIS


4

Esto resolvió mi problema (perdón por mi mal inglés):

  1. abra cmd como administrador y ejecute el comando (sin los corchetes):
    netsh http add urlacl url=http://[ip adress]:[port]/ user=everyone

  2. en documents/iisexpress/config/applicationhost.configy en la carpeta raíz del proyecto en la carpeta (oculta): .vs/config/applicationhost.confignecesita agregar una fila a la etiqueta "sitio":
    <binding protocol="http" bindingInformation="*:8080:192.xxx.xxx.xxx" />

  3. abra "administrador de servicios de información de Internet (iis)"
    (para encontrarlo: en la búsqueda en la barra de tareas, escriba "Activar o desactivar las funciones de la ventana" y abra el resultado y luego marque la casilla de verificación "servicio de información de Internet" e instálelo):

    1. en la pantalla izquierda, haga clic en: nombre de la computadora -> Sitios -> Sitio web predeterminado y
    2. luego haga clic en "Encuadernación" en la pantalla derecha
    3. haga clic en el botón Agregar
    4. escribe lo que necesitas y presiona "OK".
  4. abra "Firewall de Windows con seguridad avanzada",

    1. en la pantalla izquierda, presione "Reglas de entrada" y luego
    2. presione en la pantalla derecha "Nueva regla ..."
    3. verifique el puerto y presione Siguiente,
    4. verifique TCP y su puerto y presione Siguiente,
    5. marque "Permitir la conexión" y presione Siguiente,
    6. marque todas las casillas de verificación y presione Siguiente,
    7. escriba el nombre y presione Finalizar.
  5. hecho.


3

No estoy seguro si este fue su problema, pero para cualquiera que esté tratando de acceder a su aplicación web desde su máquina y tenga este problema:

Asegúrese de conectarse a 127.0.0.1(también conocido como localhost) y no a su dirección IP externa.

Su URL debe ser algo como http://localhost:8181/o http://127.0.0.1:8181y no http://YourExternalIPaddress:8181/ .


Información adicional:
la razón por la que esto funciona es porque su firewall puede bloquear su propia solicitud. Puede ser un firewall en su sistema operativo y puede ser (lo habitual) su enrutador.

Cuando te conectas a tu dirección IP externa, te conectas a ti desde Internet, como si fueras un extraño (o un hacker).
Sin embargo, cuando te conectas a tu localhost, te conectas localmente como tú mismo y obviamente el bloqueo no es necesario (y se evita por completo).


Tengo este problema cuando el uso de localhost funciona pero cuando uso la dirección IP local de la máquina (no lo hace). ¿Por qué dijiste específicamente que no usaras tu dirección IP ? ¿Por qué esto no funciona? Me gustaría entenderlo.
Code Uniquely

1
Es absurdamente trivial que un "hacker" cambie el nombre de host utilizado para conectarse a un sitio web.
Arafangion

@Arafangion ¿Cambiarlo dónde y ganar qué?
MasterMastic

@MasterMastic: Por ejemplo, en Linux, edite el archivo /etc/hosts.conf. Windows tiene equivalente. O aún más trivialmente, simplemente diga a curl o wget qué nombre de host reportar. Aquí, aparentemente estás confiando en el "nombre de host" para bloquear las solicitudes de Internet, por lo que lo que gana el pirata informático es obviamente lo que necesita al pasar por alto su aparente mecanismo de "protección". IIS todavía parece vincularse al puerto. La solución correcta es no vincularse al puerto accesible desde el exterior en primer lugar.
Arafangion

@Arafangion Sí, pero eso es una redirección local. El punto aquí no es localhost, es a lo que se refiere ( 127.0.0.1). Todo lo que digo es conectarse a eso y no a su IP visible externamente. No se depende del localhost, solo se usa como sinónimo. Editaré mi respuesta para aclararlo.
MasterMastic

2

Puede utilizar la herramienta CMD de Visual Studio 2005/2008/2010. Ejecútelo como administrador y escriba

aspnet_regiis -i

Por fin puedo ejecutar mi aplicación con éxito.


2

Si trabaja en un servidor local o no tiene un nombre de dominio, elimine el campo "Nombre de host:". ingrese la descripción de la imagen aquí


1

Verifique su archivo de hosts local (C: \ Windows \ System32 \ drivers \ etc \ hosts, por ejemplo). En mi caso, lo había usado anteriormente para apuntar una URL a un cuadro de desarrollo y luego lo olvidé. Cuando reutilicé la misma URL, seguí recibiendo una solicitud incorrecta (nombre de host no válido) porque el tráfico iba al servidor incorrecto.


1

Recibí este error cuando intenté llamar a un servicio web usando "localhost". Lo arreglé usando la IP real en su lugar (192.168 ...)


Ganador. Este fue mi problema en Windows Server 2003.
DreamTeK

0

Vi el mismo error después de usar msdeploy para copiar la aplicación en un nuevo servidor. Resultó que los enlaces todavía usaban la dirección IP del servidor anterior. Por lo tanto, verifique la dirección IP en los enlaces de IIS. (Parece obvio después del hecho, pero no se me ocurrió comprobarlo inmediatamente).


0

Verifique la URL exacta que está proporcionando. Vi este error cuando me perdí el prefijo de ruta definido en ASP.NET, por lo que no sabía dónde enrutar la solicitud.


0

Asegúrese de que IIS esté escuchando su puerto.

En mi caso, este fue el problema. Entonces tuve que cambiar mi puerto a algo más como 8083 y resolvió este problema.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.