2010-07-22 1 views
8

ich eine IIS 7.5-Website leite die für Inhalt dient http://www.foo.com/Wie kann ich erlaube abschließenden Punkt in Host-Header in IIS

Ich habe richtig Route http://www.foo.com./ (man beachte den abschließenden Punkt) gebeten worden, . Wenn Sie diese Seite jetzt treffen, werden Sie eine IIS-Fehlermeldung erhalten:

Bad Request - Invalid Hostname

HTTP Error 400. The request hostname is invalid.

Dies auch für http://www.microsoft.com passiert. Ich habe einige Seiten gesehen, die nachgestellte Punkte erfolgreich routen (wie http://www.amazon.com./), aber es sieht so aus, als ob die meisten von ihnen Apache und nicht IIS benutzen würden.

Ich habe einen Host-Header in IIS für www.foo.com hinzugefügt. was erlaubt ist. Sie können die Site jedoch nicht starten. Es wird nicht gestartet und öffnet sich ein Meldungsfeld auf und sagte:

Value does not fall within the expected range.

Wer weiß, wie Domänen dienen mit Punkten in IIS nachlauf?

+0

Hier ist eine andere Frage, die gleich aussieht. Und leider keine Antwort: http://forums.iis.net/t/1170489.aspx –

Antwort

5

Der abschließende Punkt ist ein absolut legaler Teil des Hostnamens - er ist normalerweise unsichtbar, da er implizit in DNS enthalten ist. Wenn der abschließende Punkt vorhanden ist, wird er als "vollqualifizierter" Domänenname (FQDN) bezeichnet.

Beachten Sie, dass auf dem Draht DNS immer Angebote in FQDNs behandelt.

3.2.2 von RFC 3976 (die Definition für URI-Syntax) sagt diese (Hervorhebung von mir):

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.

Datei ein Bug-Report mit MS.

+1

Ich stimme zu, dass MS hier falsch ist, nur um herauszufinden, ob es einen Workaround geben könnte. –

+0

id lieben einen Workaround auch (wie mit Wildcard-Host-Header), aber MS scheint zu lieben, diese Art von Sache zu ignorieren. –

+0

Der abschließende Punkt ist nicht zulässig, per RFC 1718. Das "." Implizit ist der Hostname implizit ein FQDN. Die URL sollte die Überprüfung des Browsers nicht bestanden haben, aber die meisten Browser scheinen dies nicht richtig zu tun. – benc

-1

Ich bin sicher, dass es irgendwo einen Fehler gibt, aber die Frage ist, was der Fehler ist.

Ich denke, dass der Fehler ist, dass IIS Ihnen erlaubt, einen Host-Header mit einem abschließenden "." Der Host-Header ist nicht dasselbe wie ein FQDN. Der Host-Header sollte in der HTTP-Anforderung die Host-Richtlinie entsprechen:

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

Es ist sicherlich gültig in der URL eingegeben an den Browser zB: http://www.doilooklikeicare.com./default.aspx wie dies beseitigt, um herauszufinden, die Anfrage zu senden .

Versuchen Sie, den abschließenden Punkt im Host-Header zu entfernen, und es sollte OK funktionieren. Sie können es weiterhin in der URL verwenden.

this helps

Jonathan

+0

Der Name ist aufgelöst, IIS bearbeitet Ihre Anfrage, aber Sie erhalten eine 400 ungültige Anfrage, wenn Sie auf den von Ihnen angegebenen Link klicken. Genau das möchte ich vermeiden. Ich kann ** www.foo.com ** ohne Problem anbieten. Ich kann nicht se ** ** www.foo.com. ** –

+1

Entschuldigung, diese Antwort ist völlig falsch. Offensichtlich schnappt IIS die nachgestellte Punkt-URL, bevor sie irgendwo anders behandelt werden kann. Wenn ich einen zusätzlichen Host-Header mit dem Punkt hinzufügen könnte, würde ich ... –

+0

Der Host-Header wird vom Browser erstellt, nicht vom Server. Der Serverfehler ist der Server, der den Host-Header ablehnt. – benc

2

Dies ist effektiv um einen Fehler in IIS7 +, offenbar ohne Abhilfen. Es betrifft mich auch. Bitte gehen Sie den Antrag stimmen Sie sich für MS dieses Problem zu beheben:

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

+0

Dies ist kein Fehler, die URL ist ungültig. Ein FQDN wird buchstäblich als eine mit einem Punkt abgeschlossene Zeichenfolge geschrieben, in URLs wird jedoch der FQDN angenommen (keine teilweise qualifizierten Domänen und kein abschließender Punkt). Eigentlich sollte Ihr Browser dies nicht senden. – benc

+2

@benc Sie irren sich in beiden Fällen - unqualifizierte Domänennamen und der abschließende Punkt sind in einem URI absolut zulässig. Siehe meine aktualisierte Antwort für Kapitel und Vers. Bitte stornieren Sie Ihre falsche Downvote! – Alnitak

+0

@benc Wenn eine URL immer implizit einen FQDN angibt, funktionieren URLs wie http: // myinternalmachine/foo nicht, denn wenn sie immer als FQDN interpretiert wird, wird vor der Auflösung ein abschließender Punkt angewendet "Meineinterne Maschine." ist normalerweise nicht in DNS auflösbar (um es so zu machen, dass ich im Wesentlichen eine neue "root" -Domäne in meinem privaten DNS-Server hinzufügen müsste. –

-1

Der Browser fehlerhaft ist. Es sollte keinen abschließenden Punkt im Host-Host-Abschnitt der URL akzeptieren.

Speziell für FF und andere Mozilla-basierte Browser:

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

Aus gestalterischer Sicht die Vernetzung Bibliothek (necko) sollte dies zurückgewiesen, aber die docshell (die benutzerfreundliche Teil) sollte wahrscheinlich einen User-inputed string abfangen und reparieren (entfernen Sie das ".", und bereinigen Sie den Host: header).

Übrigens hat necko auch ein Problem, wo es fqdn-faul ist, es klebt nicht das "." am Ende des FQDN, wenn es die Anfrage an den Resolver sendet, wodurch jeder FQDN von der PQDN-Logik des lokalen Resolvers behandelt wird.

+3

stimme ich nicht zu Erstens ist ein abschließender Punkt ein legaler Teil eines Hostnamens - siehe RFC, der von @Alnitak gepostet wird Zweitens ist dies kein Browserproblem, sondern ein Problem mit dem Server (IIS) .Keine Anfrage mit einem abschließenden Punkt wird erfolgreich sein auf einer von IIS gehosteten Website, die an einen Domänennamen gebunden ist, unabhängig vom verwendeten Browser. –

0

Dieses Problem wird diskutiert auf Microsoft Foren here und wird als eine Änderung im Verhalten zwischen IIS 6 und 7.

Diese Seite here ein Work-around auf der IIS-Seite die URL neu schreiben gesehen.

Die für verschiedene Webserver erforderlichen Konfigurationsänderungen werden unten wiedergegeben, falls die oben genannte Website jemals verschwindet.

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

Ich habe versucht, die IIS-Problemumgehung, die Sie geliefert haben, aber ich bekomme immer noch das gleiche Ergebnis: 400 schlechte Anfrage. Haben Sie die Problemumgehung tatsächlich versucht, um es zu überprüfen? Ich glaube nicht, dass IIS die Kontrolle auf die Rewrite-Regeln überträgt, bevor ein 400-Fehler gemacht wird. –

Verwandte Themen