关于URI URL URN
刚琢磨、整理了关于escape、encodeURIComponent、encodeURI的知识。突然又对URI有点模糊了,遂整理了以下资源 :
资源一: URL,URI 和URN 的举例理解
资源二: 分清 URI、URL 和 URN
资源三: 百度百科URI
以下分享自: URI和URL及URN的区别
对于URL,大家都比较熟悉,其他两个词就比较陌生了。URI、URL和URN是识别、定位和命名互联网上的资源的标准途径。1989年Tim Berners-Lee发明了互联网(World Wide Web)。WWW被认为是全球互连的实际的和抽象的资源的集合–它按需求提供信息实体–通过互联网访问。实际的资源的范围从文件到人,抽象的资源包括数据库查询。
因为要通过多样的方式识别资源(人的名字可能相同,然而计算机文件只能通过唯一的路径名称组合访问),所以需要标准的识别WWW资源的途径。为了满足这种需要,Tim Berners-Lee引入了标准的识别、定位和命名的途径:URI、URL和URN。
- URI:Uniform Resource Identifier,统一资源标识符;
- URL:Uniform Resource Locator,统一资源定位符;
- URN:Uniform Resource Name,统一资源名称。
在这个体系中的URI、URL和URN是彼此关联的。URI的范畴位于体系的顶层,URL和URN的范畴位于体系的底层。这种排列显示URL和URN都是URI的子范畴。

三者中,其中URL和URI特别容易混淆。
URL是Internet上用来描述信息资源的字符串,主要用在各种WWW客户程序和服务器程序上。采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。
URL的格式由下列三部分组成:
- 协议(或称为服务方式);
- 存有该资源的主机IP地址(有时也包括端口号);
- 主机资源的具体地址。如目录和文件名等。
第一部分和第二部分之间用”://”符号隔开,第二部分和第三部分用”/”符号隔开。第一部分和第二部分是不可缺少的,第三部分有时可以省略。
目前最大的缺点是当信息资源的存放地点发生变化时,必须对URL作相应的改变。因此人们正在研究新的信息资源表示方法。
URI是以某种统一的(标准化的)方式标识资源的简单字符串,一般由三部分组成:
- 访问资源的命名机制。
- 存放资源的主机名。
- 资源自身的名称,由路径表示。
典型情况下,这种字符串以scheme开头,语法如下:
[scheme:] scheme-specific-part
http://www.google.com,其中http是scheme,//www.google.com是 scheme-specific-part,并且它的scheme与scheme-specific-part被冒号分开了。
有的URI指向一个资源的内部。这种URI以”#”结束,并跟着一个anchor标志符(称为片断标志符)。
相对URI不包含任何命名规范信息。它的路径通常指同一台机器上的资源。相对URI可能含有相对路径(如:“..”表示上一层路径),还可以包含片断标志符。
URI的常见问题
- 难以输入,URI不必要的冗长。
- 莫明其妙的大写字母。
- 不常见的标点符号。
- 在纸介质上显示很困难,一些字符在纸上打印出来不容易辨认。
- 主机和端口的问题除了 scheme-specific 部分,domain 和port 也可能给用户带来困惑。
设计URI应该遵循的规则(具体还可以参考上一篇:优秀的URI不会改变)
URI 是网站UI的一部分,因此,可用的网站应该满足这些URL 要求
- 简单,好记的域名
- 简短(short)的URI
- 容易录入的URI
- URI 能反应站点的结构
- URI 是可以被用户猜测和hack的(也鼓励用户如此)
- 永久链接,Cool URI don’t change
聪明的选择URI
一定要短 为了URI能被方便的录入,写下,拼写和记忆,URI 要尽可能的短,根据w3c 提供的参考数据,一个URI 的长度最好不要超过80个字节(这并非一个技术限制,经验和统计提供的数据),包括schema 和host,port 等。
大小写策略 URI的大小写策略要适当,要么全部小写,要么首字母大写,应避免混乱的大小写组合,在Unix 世界,文件路径队大小写是敏感的,而在Windows 世界,则不对大小写敏感。
允许URI管理 URI映射 管理员可以重新组织服务器上的文件系统结构,而无需改动URI,这就需要URI和真实的服务器文件系统结构之间有一个映射机制。,而不是生硬的对应。这种映射机制可以通过如下技术手段实现:
- Aliases ,别名,Apache 上的目录别名,IIS 上的虚拟目录
- Symbolic links ,符号链接,Unix 世界的符号链接
- Table or database of mappings ,数据库映射,URI 和文件系统结构的对应关系存储在数据库中。
标准的重定向 管理员可以简单的通过修改HTTP 状态代码来实现服务器文件系统结构变更之后的URI兼容,可以利用的HTTP Status Code 有:
- 301 Moved Permanently ([RFC2616] section 10.3.2)
- 302 Found (undefined redirect scheme, [RFC2616] Section 10.3.3)
- Temporary Redirect ([RFC2616] Section 10.3.8)
用独立的URI
技术无关的URI
- 提供动态内容服务时,应使用技术无关的URI。即URI不暴露服务器端使用的脚本语言,平台引擎,而这些语言,平台,引擎的变化也不会导致URI的变更。因此,sevelet,cgi-bin之类的单词不应该出现在URI 中。
- 提供静态内容服务时,应当隐去文件的扩展名取而代之的技术是content-negotiation, proxy, 和URI mapping
身份标志和Session 机制
- 使用标准的身份认证机制,而不是每个用户一个特定的URI
- 使用标准的Session 机制,而不是把Session ID 放在URI 中使用。
内容变更时使用标准转向
- 对变更的内容使用标准的重定向
- 对删除的资源使用 HTTP410
提供索引代理
索引策略
- Content-Location
- Content-MD5
提供适当的缓存信息
- 缓存相关的HTTP头
- 缓存策略
- 缓存生成内容 HTTP HEAD和HTTP GET
总结
- URI 是Web UI 的一部分,应当像对待网站Logo 和公司品牌一样对待它
- URI 是网站和普通用户之间的唯一接口,应当像对待你的商务电话号码一样对待它
读懂并记住上面两句话,你下次设计URI 的时候就会给它应有的重视了。
- URL 应当是用户友好的
- URI 应当是可读的
- URI 应当是可预测的
- URI 应当是统一的
读懂和记住上面四句话,你就知道应该设计什么样的URI了。
关于URI URL URN的更多相关文章
- uri,url.urn
uri:Web上可用的每种资源 - HTML文档.图像.视频片段.程序等 - 由一个通过通用资源标志符(Universal Resource Identifier, 简称"URI" ...
- Http权威指南笔记(一) URI URL URN 关系
定义 URI:统一资源标识符(Uniform Resource Indentifier)用来标识服务器上的资源. URL:统一资源定位符(Uniform Resouce Locator)是资源标识符最 ...
- URI/URL/URN的联系和区别
下面是我整理的一些关于他们的描述. URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源. 而URL是uniform resource locato ...
- URI URL URN 关系
我们一起来看下面这个虚构的例子.这是一个URI: http://bitpoetry.io/posts/hello.html#intro 我们开始分析 http:// 是定义如何访问资源的方式.另外 b ...
- URI URL URN的区别
一:什么是URI,URL,URN ? URI:Uniform Resource Identifier,统一资源标识符,是一个用于表示互联网上资源名称的字符串 格式:http://www.xxx.com ...
- URI/URL/URN都是什么
URI : Uniform Resource Identifier,统一资源标志符 URL : Universal Resource Locator,统一资源定位符 URN : Universal R ...
- URI, URL, and URN
URI: uniform resource identifier,统一资源标识符,用来唯一的标识一个资源. URL: uniform resource locator,统一资源定位器,它是一种具体的U ...
- URI与URN与URL详解
当没有URI时 什么是URI和URN和URL URI详解 Uniform Resource Identifier 统一资源标识符 URI的组成 案例: https://tools.ietf.org/h ...
- URL与URI与URN的区别与联系
1.什么是URL? 统一资源定位符(或称统一资源定位器/定位地址.URL地址等[1],英语:Uniform Resource Locator,常缩写为URL),有时也被俗称为网页地址(网址).如同在网 ...
随机推荐
- Java中使用二重循环打印沙漏图形
1.首先判断外层,A .B.C.D都符合条件 2.那么再看内层 A :int i=0;i<5;i++ 当i=1时;带入到第二个内层循环中 int j=0;j<Math.abs(i)*2+1 ...
- iosOpenDev-install 失败官方wiki无法解决看这里(尝试有效)
https://github.com/kokoabim/iOSOpenDev/wiki/Troubleshoot http://blog.csdn.net/bluesky_03/article/det ...
- 【初级】linux cp 命令详解及使用方法实战
cp:复制文件或者目录 前言: cp命令用来复制文件或者目录,是Linux系统中最常用的命令之一.一般情况下,shell会设置一个别名,在命令行下复制文件时,如果目标文件已经存在,就会询问是否覆盖,不 ...
- CentOS 6.4下PXE+Kickstart无人值守安装操作系统
http://www.cnblogs.com/mchina/p/centos-pxe-kickstart-auto-install-os.html
- android退出MainActivity后onDestroy不回调
问题:有时点击back键,退出MainActivity后,app已不可见,但是onDestroy却没有被调用. 原因: 1. onBackPressed被覆盖 @Override public voi ...
- STL 内存释放
C++ STL 中的map,vector等内存释放问题是一个很令开发者头痛的问题,关于 stl内部的内存是自己内部实现的allocator,关于其内部的内存管理本文不做介绍,只是 介绍一下STL内存释 ...
- MongooseJS 4.6.4 发布,MongoDB 连接包
MongooseJS 4.6.4 发布了,MongooseJS 是基于 node.js,使用 JavaScript 编程,连接 MongoDB 数据库的软件包,使MongoDB 的文档数据模型变得优 ...
- html input节点很多 json字符串提交解决方法
遇到一个页面,38个input节点,页面前端写好的,不太容易改成 js框架 容易操作的样式,只能自己想办法一个一个id获取然后 setvalue getvalue(miniui): 38个一个一个写太 ...
- mysql配置文件编写
实例: 首先建立 mysql的配置文件 dbconfig.php <?php $phpexcel=array( "host"=>'localhost',//127.0. ...
- CLR线程池
WaitCallback 表示要在 ThreadPool 线程上执行的回调方法. 创建委托,方法是将回调方法传递给 WaitCallback 构造函数. 您的方法必须具有此处所显示的签名. 如果想使用 ...