一个 URL、一个 URI 和一个 URN 的区别是什么?
当前回答
虽然 URI 和 URL 术语是严格定义的,但许多人使用这些术语的其他事物,而不是它们的定义。
如果从 Apache 服务器要求 http://example.com/foo,您将设置以下环境变量:
REDIRECT_URL: /foo REQUEST_URI: /foo
使用 mod_rewrite 启用,您还将有以下变量:
REDIRECT_SCRIPT_URL: /foo REDIRECT_SCRIPT_URI: http://example.com/foo SCRIPT_URL: /foo SCRIPT_URI: http://example.com/foo
这可能是某些混乱的原因。
其他回答
我喜欢在思考URI时使用的另一个例子是XML文件的xmlns属性:
<rootElement xmlns:myPrefix="com.mycompany.mynode">
<myPrefix:aNode>some text</myPrefix:aNode>
</rootElement>
在这种情况下,com.mycompany.mynode 将是一个独特识别“myPrefix”名称空间的 URI 对所有在我的 XML 文档中使用的元素。
正如我所理解的那样,URI是某事的描述,按照接受的格式,可以定义某事或其位置的独特名称(识别)。
有两个基本子组:
URL,定义位置(特别是试图查看网页的浏览器)和URN,定义某事的独特名称。
我倾向于认为URN类似于GUID,它们只是一个标准化的方法来为事物提供独特的名称,就像在使用公司名称的名称空间声明中一样,它并不像在某个服务器上坐着的资源在某个地方相匹配于该文本线,它只是独特地识别某些东西。
我也倾向于完全避免URI的术语,并讨论事物只有在URL或URN的意义上,因为它会导致如此多的混乱。我们应该真正试图回答问题的人不是那么多的语法,但如何识别当遇到的术语是否有任何实际的差异在他们,这将改变对一个编程情况的方法。
如果我离开基地,请告诉我!
我一直在想同样的事情,我发现了这个: http://docs.kohanaphp.com/helpers/url。
您可以看到一个清晰的例子,使用 url::current() 方法. 如果您有此 URL: http://example.com/kohana/index.php/welcome/home.html?query=string 然后使用 url:current() 给您一个 URI,根据文档,是:欢迎/home
這些是幾個非常好寫的,但很長的答案. 以下是 CodeIgniter 所涉及的差異:
地址: http://example.com/some/page.html
URI - /some/page.html
简单地说,URL是识别任何资源的完整方式,并且可以有不同的协议,如FTP、HTTP、SCP等。
URI 是当前域的资源,因此需要找到更少的信息。
在每个例子中,CodeIgniter使用这个词URL或URI,这是他们正在谈论的差异,尽管在网格的格式中,它不是100%正确的。
URI类似于URL和URN的超级类,维基百科有一个关于它们的好文章,链接到正确的RFC集。