URI 和 URL的一些研究笔记

原文链接:http://www.ixna.net/articles/16731

photo

1. 关键字回顾:

RFC(Request For Comments) ,RFC文档是一系列关于Internet(早期为ARPANET)的技术资料汇总,于1969年开始发布。它制定了我们很多常见和不常见的Internet的各种文字资料和规范。


URI(Universal Resource Identifiers) 统一资源标识符, RFC 文献1630中定义了它详细的规范(1994年6月)

|- URL(Uniform Resource Locators) 统一资源定位符,RFC文献1738中定义了它详细的规范(1994年12月)


在URI的规范中,资源描述文字,只允许使用字母,数字,安全字符,特殊字符,和转义字符

转义字符在URL中规定是使用%和两个hex进行表示,所以也就是为什么浏览器的form post会自动进行转义成%xx的关系而不使用unicode的关系。

 

photo

但是值得注意的是在URI中,空格是作为保留字的,所以URI规范中空格被辅以一个快速标记符号(short hand notation)来进行标识,就是我们看到的+号。所以在php中提供的urlencode方法是为了把字符串转换成URI规范用的, 保留空格转换成+号,可以模拟出浏览器form post的结果。

 

2. 说说 URL

URL 其实是 URI 中的一个子集,URI是一个很宽泛的定义,而且也在URI的基础上做了自己的特殊规范,例如

photo

另外 URL 中把 # 规定成锚点是用来定位使用,使用了URI规定的保留字中的一个字符。

当然URL的escape也遵循了URI的规范使用 %和两个hex的格式。

值得注意的是URL的保留字和URI是不一样的,这些字符都是有特殊意义的

photo

有没有注意到空格在里面?在URL规范中,空格只是认为不安全(unsafe)的存在,因为可能会因为排版和打印关系,可能会被忽略,所以URL中是需要把空格转换成%20的。对应的php提供的rawurlencode 方法是用来把字符串转换成URL的标准。

JS中的 encodeURI和encodeURIComponent 对字符的转义,虽然也是按照URI规范转义,但是它并没还有转换空格成+号,而是%20,后者会把URI的保留字; : / ?也进行转义。为什么浏览器和流行的server遇到 “ “,%20,+ 都会转换成空格?其实是为了更好兼容URI标准。

其实很多流行的http server都已经根据标准自动把url进行decode后给到后面的CGI进行处理,而我们自己的server很多时候需要开发来对这些进行decode。如果对这些标准不了解就很容易在decode的时候使用错误的decode手段。

而unicode目前使用场景最多的是在我们的脚本语言和页面展示中,为了支持更宽的字符集,用一种统一的编码来规范处理文字而使用,浏览器会根据资源的定义(charset) 对目标的文字先进行unicode转义后再进行统一的处理,这样就可以保证一个utf-8 的页面也可以同时支持请求GB2312的资源,而不会因此显示出错。

 

3. 附件:

除了URI和URL以外,还有一个不太流行的URN(Uniform Resource Name), 有兴趣的同学可以自己研究:P,它同样也是属于URI的子集。


接下来良格葛的这篇文章也很详细的阐述了:

http://caterpillar.onlyfun.net/Gossip/Encoding/URLEncoding.html


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值