2010-07-22 15 views
8

Estoy funcionando un sitio de IIS 7.5 que sirve de contenidos para http://www.foo.com/¿Cómo permito detrás de punto en los encabezados de host en IIS

Me han pedido a encaminar adecuadamente http://www.foo.com./ (tenga en cuenta los puntos) . Si usted choca con esa página ahora, obtendrá un error de IIS:

Bad Request - Invalid Hostname

HTTP Error 400. The request hostname is invalid.

Esto sucede incluso para http://www.microsoft.com. He visto algunos sitios enrutar períodos finales con éxito (como http://www.amazon.com./), pero parece que la mayoría de ellos usaban Apache, no IIS.

Agregué un encabezado de host en IIS para www.foo.com. que está permitido. Sin embargo, no le permitirá iniciar el sitio. No va a iniciar y hace aparecer una caja de mensaje que dice:

Value does not fall within the expected range.

¿Alguien sabe cómo servir a los dominios con arrastrarse puntos en IIS?

+0

Aquí hay otra pregunta que se ve igual. Y lamentablemente no hay respuesta: http://forums.iis.net/t/1170489.aspx –

Respuesta

5

El punto final es una parte absolutamente legal del nombre de host; simplemente es que normalmente es invisible porque está implícito en DNS. Si el punto final está presente se llama un nombre de dominio "totalmente calificado" (FQDN).

Tenga en cuenta que en el cable DNS siempre se trata de FQDN.

§3.2.2 de RFC 3976 (la definición de la sintaxis URI) dice que esto (el subrayado es mío):

A host identified by a registered name is a sequence of characters usually intended for lookup within a locally defined host or service name registry, though the URI's scheme-specific semantics may require that a specific registry (or fixed name table) be used instead. The most common name registry mechanism is the Domain Name System (DNS). A registered name intended for lookup in the DNS uses the syntax defined in Section 3.5 of [RFC1034] and Section 2.1 of [RFC1123]. Such a name consists of a sequence of domain labels separated by ".", each domain label starting and ending with an alphanumeric character and possibly also containing "-" characters. The rightmost domain label of a fully qualified domain name in DNS may be followed by a single "." and should be if it is necessary to distinguish between the complete domain name and some local domain.

un informe de error con EM.

+1

Estoy de acuerdo en que MS está equivocado aquí, solo estoy tratando de averiguar si podría haber una solución alternativa. –

+0

id también me encanta una solución (al igual que con los encabezados de los comodines), pero MS parece querer ignorar este tipo de cosas. –

+0

El punto final no es legal, según RFC 1718. El "." está implícito, el nombre de host es implícitamente un FQDN. La URL debería haber fallado la validación del navegador, pero la mayoría de los navegadores parecen no hacer esto correctamente. – benc

-1

Estoy seguro de que hay un error en alguna parte, pero la pregunta es cuál es el error.

Creo que el error es que IIS le permite establecer un encabezado de host con un "." Final. El encabezado del host no es lo mismo que un FQDN. El encabezado de host está destinado para que coincida con la directiva de host en la petición HTTP:

GET/HTTP/1.0 
HOST: www.doilooklikeicare.com 

Sin duda, es válido en la URL escrito en el navegador por ejemplo: http://www.doilooklikeicare.com./default.aspx ya que esto se resuelva para averiguar dónde enviar la solicitud .

Intente eliminar el punto final en el encabezado del host y debería funcionar correctamente. Todavía podrá usarlo en la URL.

Esperanza esto ayuda

Jonathan

+0

El nombre se ha resuelto, IIS maneja su solicitud, pero obtiene una solicitud no válida de 400 cuando hace clic en el enlace que proporcionó. Eso es exactamente lo que quiero evitar. Puedo publicar ** www.foo.com ** sin problema. No puedo Seve ** www.foo.com. ** –

+1

lo siento, esta respuesta es completamente incorrecta. aparentemente, IIS está arrebatando la url del punto final antes de que pueda ser manejada en otro lugar. Si pudiera añadir un encabezado de host adicional con el punto, lo haría ... –

+0

El encabezado del host lo hace el navegador, no el servidor. El error del servidor es que el servidor rechaza el encabezado del host. – benc

2

Esto es efectivamente un error en IIS7 +, al parecer con ninguna solución. Me está afectando también. Por favor, vaya a votar la solicitud de MS solucionar este problema:

https://connect.microsoft.com/WindowsServerFeedback/feedback/details/648242/trailing-dot-in-fqdn-causing-bad-request-invalid-hostname

+0

Esto no es un error, la URL no es válida. Un FQDN se escribe literalmente como una cadena terminada en punto, sin embargo, en las URL, se asume el FQDN (sin dominios parcialmente calificados y sin punto final). De hecho, su navegador no debería enviar esto. – benc

+2

@benc está equivocado en ambos aspectos: los nombres de dominio no calificados y el punto final están absolutamente permitidos en un URI. Vea mi respuesta actualizada para capítulo y versículo. Amablemente invierta su voto negativo incorrecto! – Alnitak

+0

@benc Si se asumió que una URL siempre especifica implícitamente un FQDN, las URL como http: // myinternalmachine/foo no funcionarían, porque si siempre se interpretara como un FQDN, se aplicaría un punto final antes de la resolución, y "myinternalmachine". generalmente no se puede resolver en DNS (para hacerlo así esencialmente necesitaría agregar lo que es esencialmente un nuevo dominio "raíz" en mi servidor DNS privado. –

-1

El navegador tiene la culpa. No debe aceptar un punto final en la parte del hostip (nombre de host) de la URL.

En concreto, para FF y otros navegadores basados ​​en Mozilla:

Bug 124565 - DNS: URL: FQDN usage in "hostip"

Desde una perspectiva de diseño, la biblioteca de red (necko) debe estar rechazando esto, pero la docshell (la parte fácil de usar) probablemente debería atrapar una cadena con una respuesta del usuario y arreglarla (eliminar el "." y limpiar el encabezado Host:).

Por cierto, necko también tiene un problema en el que es fqdn-flojo, no pega el "." al final del fqdn cuando envía la solicitud al resolver, lo que hace que cada fqdn sea tratado por la lógica pqdn del resolvedor local.

+3

No estoy de acuerdo Primero, un punto final es una parte legal de un nombre de host: observe el RFC publicado por @Alnitak. Segundo: no es un problema del navegador sino un problema con el servidor (IIS). Ninguna solicitud con un punto final tendrá éxito. a un sitio web alojado en IIS vinculado a un nombre de dominio, independientemente del navegador utilizado. –

0

Este tema se discute en los foros de Microsoft here y es visto como un cambio de comportamiento entre IIS 6 y 7.

Este sitio here ofrece una solución alternativa para volver a escribir la URL en el lado de IIS.

El cambio de configuración requerido para varios servidores web se reproduce a continuación en caso de que el sitio anterior desaparezca.

Apache (.htaccess) 
RewriteCond %{HTTP_HOST} !^domain\.zone$ 
RewriteRule ^(.*)$ http://domain.zone/$1 [L,R=301] 

Nginx (nginx.conf) 
if ($http_host != 'domain.zone') { 
    return 301 http://domain.zone$request_uri; 
} 

IIS (web.config) 
<httpRuntime relaxedUrlToFileSystemMapping="true"/> 
<rule name="point" stopProcessing="true"> <match url="^(.*)\.$" /> 
    <action type="Redirect" url="{R:1}" redirectType="Temporary" /> 
</rule> 
+0

Intenté la solución de IIS que me proporcionó, pero sigo teniendo el mismo resultado: 400 solicitudes incorrectas. ¿Has probado la solución para verificarlo? No creo que IIS transfiera el control a las reglas de reescritura antes de expulsar un error 400. –

Cuestiones relacionadas