为什么'http:// dd'是有效的网址?

时间:2009-10-28 20:08:05

标签: c# .net regex uri

我正在编写.NET 3.5应用程序并使用URI.IsWellFormedUriString(string uriString, UriKind uriKind)来验证用户输入的URI;使用UriKind.Absolute。我只是在玩这个应用程序,我有点担心和混淆为什么会这样:

http://ddd

是有效的URI吗?是什么赋予了?我知道这是因为它是RFC的一部分,但为什么它首先有效?

我见过这样的URI的唯一一次是企业内部的内部网,比如

http://companyinet

http://localhost(非常受欢迎,但也是特例)

我不想使用我自己的正则表达式,因为有很多不同的URI正则表达式。但是,我真的不希望用户输入那些不能公开访问的URI。

任何想法或想法?感谢。

6 个答案:

答案 0 :(得分:20)

有效,因为它确实指向唯一资源。在这种情况下,它指向本地网络上计算机“ddd”的Web服务器(希望如此)。

URI是唯一的资源标识符,而不是唯一的万维网资源标识符。 file:///blah.txt也是一个有效的URI

答案 1 :(得分:16)

那是因为它是一个完全有效的URI,正如你所提到的那样。

我会略微改变你的策略......如果你想要的URI不仅有效(如格式正确),而且有效,在他们实际指向网站的意义上,你必须再添一步。

在字符串验证之后,发出一个HEAD请求来ping该URL。如果它返回2xy状态代码,那么你可能会很高兴。这在大多数情况下都有效,但并非没有警告和例外。

答案 2 :(得分:6)

因为它符合RFC 1738(以及RFC 2396的URI规范)。

RFC对仅包含方案和方案特定元素的资源路径进行特定限制 - 在本例中为主机名。只要它识别出唯一的资源并符合URI的语法,它就是有效的。

答案 3 :(得分:3)

你自己回答了这个问题。它是RFC规范定义ipso facto的“有效”(格式良好)URI。

为了帮助您解决所需的任务,请在正则表达式中对一个或多个点进行一些额外检查(不要忘记逃避它们!)或者可能尝试点击资源本身以查看它是否实际响应。

答案 4 :(得分:2)

它是一个有效的URI,因为它遵循URI的语法:它有一个方案,一个特定于方案的组件('http'是方案',':'将两者分开,'// ddd'是特定计划的部分。)

对于HTTP URI,它也遵循这些语法的语法,“ddd”是有效的主机名。

URI的语法在http://www.ietf.org/rfc/rfc2396.txt

中定义

答案 5 :(得分:1)

以下是一个简单的实验,可以了解该网址有效的原因:

0)使用digping实用程序获取google.com的IP地址。我得到了:74.125.53.100

1)编辑/ etc / hosts文件(在Windows上,它类似于C:\ Windows \ system32 \ drivers \ etc \ hosts,您可能需要创建它)。在您的hosts文件中,添加如下所示的行:

74.125.53.100 ddd

不要忘记保存您的修改。

2)在网络浏览器中,转到以下网址: http://ddd

3)您刚刚使用网址访问了Google。这就是为什么它是一个有效的URL。