在Web领域,我们常见三个专业词汇URI,URL,URN,在这里我将对这3个概念进行分析,理清其内在逻辑。
URL
URL是统一资源定位符的缩写,它对网络中的资源的定位提供了一种统一方案。它的语法格式:
<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<fragment>
URN
URN是统一资源名称的缩写,它对网络中的资源的名称提供了一种统一方案。它要求全球唯一,并在资源不存在或不再可用时依然保持不变。它的格式如下:
"urn:" <NID> ":" <NSS>
URN基于这样一种想法:就像人可能搬家一样但人的姓名一生几乎不会改变,网络中的URL是不会持久的,网络资源也可能被移动,导致URL失效,如果给资源也采用不会改变的名称URN,这样就能避免URL的失效问题。要实现这一点需要采取某些策略实现URN与实际资源的映射,但这里可以忽略。
20多年过去URN似乎并没实用价值,这是很正常的,技术发展中很多技术标准都沉默于历史
URI
URI是统一资源标志符的缩写,它是对URL和URN的统一化抽象,URI为识别资源提供了一种简单且可扩展的手段。其格式如下:
URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
hier-part = "//" authority path-abempty
/ path-absolute
/ path-rootless
/ path-empty
总结
本篇分析了URL,URN,URI的具体定义,理解三者的关键在于,理解"location","name","identifier"三个词的内涵。
由于URN没有实用价值,URL表示的是抽象概念,作为开发者的我们,对URI和URL的区别通常只在于命名,我的看法是:
- 根据接口来命名,要什么,给什么
- 在Web中通常需要的是具体的资源位置,因此一般使用URL