我正在编写.NET 3.5应用程序并使用URI.IsWellFormedUriString(string uriString, UriKind uriKind)
来验证用户输入的URI;使用UriKind.Absolute
。我只是在玩这个应用程序,我有点担心和混淆为什么会这样:
是有效的URI吗?是什么赋予了?我知道这是因为它是RFC的一部分,但为什么它首先有效?
我见过这样的URI的唯一一次是企业内部的内部网,比如
或
http://localhost(非常受欢迎,但也是特例)
我不想使用我自己的正则表达式,因为有很多不同的URI正则表达式。但是,我真的不希望用户输入那些不能公开访问的URI。
任何想法或想法?感谢。
答案 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”是有效的主机名。
中定义答案 5 :(得分:1)
以下是一个简单的实验,可以了解该网址有效的原因:
0)使用dig
或ping
实用程序获取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。