如何在IIS中的主机头中允许尾随点

时间:2010-07-22 22:59:18

标签: iis url dns

我正在运行一个IIS 7.5网站,该网站为 http://www.foo.com/

提供内容

我被要求正确路由 http://www.foo.com./ (请注意尾随点)。如果您现在点击该页面,则会出现IIS错误:

  

错误请求 - 主机名无效

     

HTTP错误400.请求主机名无效。

即使对于 http://www.microsoft.com也会发生这种情况。我看到一些网站成功路由过尾期(例如 http://www.amazon.com./ ),但它看起来像大多数那些人使用的是Apache,而不是IIS。

我在IIS中为 www.foo.com。添加了一个主机标头,这是允许的。但是,它不会让您启动该网站。它不会启动并弹出一个消息框说:

  

价值不在预期范围内。

有人知道如何在IIS中提供带尾随点的域名吗?

5 个答案:

答案 0 :(得分:5)

尾随点是主机名的绝对合法部分 - 它只是通常不可见,因为它隐含在DNS中。如果存在尾随点,则称为“完全合格”域名(FQDN)。

请注意,在线路DNS 始终处理FQDN。

RFC 3976的<§3.2.2(URI语法的定义)说明了这一点(我的重点):

  

由注册名称标识的主机是一系列字符   通常用于在本地定义的主机或服务中进行查找   name注册表,尽管URI的特定于方案的语义可能需要   改为使用特定的注册表(或固定名称表)。该   最常见的名称注册机制是域名系统(DNS)。   用于在DNS中查找的注册名称使用语法   在[RFC1034]的第3.5节和[RFC1123]的第2.1节中定义。这样   名称由一系列以“。”分隔的域标签组成   域标签以字母数字字符开头和结尾   可能还包含“ - ”字符。 最右边的域名标签   DNS中的完全限定域名后面可能会跟一个域名   “”并且应该是有必要区分的   完整的域名和一些本地域。

向MS提交错误报告。

答案 1 :(得分:2)

这实际上是IIS7 +中的一个错误,显然没有解决方法。它也影响了我。请对MS的请求进行投票以解决此问题:

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

答案 2 :(得分:0)

此问题在Microsoft论坛here中进行了讨论,并被视为IIS 6和7之间行为的变化。

此网站here提供了在IIS端重新编写网址的解决方法。

如果以上网站消失,将在下面复制各种网络服务器所需的配置更改。

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>

答案 3 :(得分:-1)

我确信某处有一个错误,但问题是错误是什么。

我认为该错误是IIS允许您设置一个尾随“。”的主机头。主机头与FQDN不同。主机头用于匹配HTTP请求中的Host指令:

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

在输入浏览器的URL中肯定有效,例如:http://www.doilooklikeicare.com./default.aspx 因为这解决了找出WHERE发送请求。

尝试删除主机标头中的尾随点,它应该可以正常工作。您仍然可以在URL中使用它。

希望这有帮助

乔纳森

答案 4 :(得分:-1)

浏览器有问题。它不应该接受URL的hostip(主机名)部分中的尾随点。

具体来说,对于FF和其他基于Mozilla的浏览器:

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

从设计的角度来看,网络库(necko)应该拒绝这一点,但docshell(用户友好的部分)可能应该捕获一个用户输入的字符串,然后修复(删除“。”,并清理Host:header)。

顺便说一句,necko也有一个问题,它是fqdn-lazy,它不会坚持“。”在fqdn结束时,它将请求发送到解析器,这使得每个fqdn都被本地解析器的pqdn逻辑处理。