URI
URI是Universal Resource Identifier通用资本标志符,是一个用于标识某一互联网资本称号的字符串。 该种标识许可用户对任何(包括当地和互联网)的资本经由过程特定的协定举行交互操纵。URI由包括肯定语法和相干协定的计划所定义。
URI的初识
多少部份
协定/scheme name
类似 https、http、file、ed2k主机名
这部份比较熟习的是 //baidu.com 收集主机,也多是其他的情势的资本:mailto:称号@域名 用户邮箱,query/参数
类似a=1&b=2标识符/锚点
有的URI指向的不是全部资本,而是某个资本的内部某个模块,这也是我们熟习的锚点:https://baidu.com#test,这是指向资本内部的某一部份。相对URI
有的时刻要求的资本多是相对当前资本的途径来完成的,<img src=”../icons/logo.gif” alt=”logo”> 如许的,
团体的誊写体式格局以下:
<scheme name> : <hierarchical part> [ ? <query> ] [ # <fragment> ]
比方:
file:///c:/WINDOWS/clock.avi
Git://github.com/user/project-name.git
ftp://user1:1234@地点
ed2k://|file|%5BMAC%E7%89%88%E6%9E%81%E5%93%81%E9%A3%9E%E8%BD%A69%EF%BC%9A%E6%9C%80%E9%AB%98%E9%80%9A%E7%BC%89%5D.%5BMACGAME%5DNeed.For.Speed.Most.Wanted.dmg|4096933888|2c55f0ad2cb7f6b296db94090b63e88e|h=ltcxuvnp24ufx25h2x7ugfaxfchjkwxa|/
这些都是一个URI Scheme。
个中:
<scheme name>:很明显,这是scheme的称号,关于上面五个scheme,它们scheme名分别是http,file, git, ftp, ed2k(电驴协定),实际上,它们也代表着协定称号。
<hierarchical part>:实际上,平常状况,它包括 authority 和 path【//baidu.com、///c:/WINDOWS/clock.avi】。
<query>:可选项目,平常运用;离隔或&离隔的键值对<key>=<value>【a=1&b=2】
<fragmentg> :可选项目包,别的分外的标识信息[#href#anchor]
和URL的差别
这URI和URL长得也很类似,URL是Uniform Resource Locator的缩写,译为“一致资本定位符”。花样类似
协定【http、https】://主机名【baidu.com】/详细地点【test/test.html】【能够另有参数】
这里有三个观点:
URI :Uniform Resource Identifier,一致资本标识符;
URL:Uniform Resource Locator,一致资本定位符;
URN:Uniform Resource Name,一致资本称号。是URL的一种更新情势,一致资本称号(URN,,Uniform Resource Name)不依赖于位置,并且有能够削减失效衔接的个数。然则其盛行还需假以时日,由于它须要更邃密精美软件的支撑。
个中,URL,URN是URI的子集。
URI编解码
uri中会碰到的两个题目:
在URI常常会涌现一些明文内容,比方 https://baidu.com?query=破裂&t=知乎, 如许的uri的内容人人都是可见的,这就须要把一些特别字符举行编码,
要领:encodeURI() ,把uri举行编码,然则并不会对uri中具有特别寄义的的字符举行编码,详细不会编码的部份包括括号中的字符【, / ? : @ & = + $ #】,
encodeURI(‘my test.asp?name=ståle&car=saab’)
// my%20test.php?name=st%C3%A5le&car=saab
解码的话能够运用 decodeURI()
decodeURI(‘my%20test.php?name=st%C3%A5le&car=saab’)
// my test.asp?name=ståle&car=saab有的时刻uri的某些构成部份本身含有一些特别字符,这些特别字符在uri本身在有着特别意义,如许会致使毛病的剖析uri,比方:
test.asp?name=sta&le //这里 query的name的值sta&le,包括了页数字符&,是的剖析name的值为 sta 就住手了
这个时刻也须要举行处置惩罚。一样也是对举行编码操纵,
要领:encodeURIComponent(),这回对除了字母、数字、(、)、.、!、~、*、’、-和_以外的一切字符,而类似【 :;/?:@&=+$,#】 这些用于分开 URI 组件的标点符号都会由一个或多个十六进制的转义序列替代的。<scheme name> : <hierarchical part> [ ? <query> ] [ # <fragment> ] //上面的形貌是一个uri的完全构成,每一个部份都能够认为是uri的组件,能够举行零丁的编码 //用户输入的数据作为query参数,用户输入了'test&test=测试'如许的字符串时,只是一个查询参数 var uri = '//test.com'; var queryValue = 'test&test=测试'; //须要编码,不然会被当做两个键值对了 var uri += '?query=' + encodeURIComponent(queryValue); //如许就是 query = 'test&test=测试';真正的效果, //而不是 query = 'test'; test= '测试' 如许的两个键值对
解码要领:decodeURIComponent()
参考:http://blog.csdn.net/woyaowen…
https://baike.baidu.com/item/…
https://www.zhihu.com/questio…
http://blog.csdn.net/nicolas_…