URI语法

标准URI格式:

scheme:[//[user[:password]@]host[:port]][/path][?query][#fragment]

包含:

  • scheme: 命名以字母开头,字母、数字、加号(+)、句点(.)、短横线(-)都是合法字符。不区分大小写,但是推荐全用小写。名字后面跟着一个冒号(:)。举例:http(s)、ftp、mailto、file、data和irc。URI的scheme应该在Internet Assigned Numbers Authority注册,但是实际上也有没有注册的scheme正在使用中。
  • <span id="double_slash">双斜杠</span>(//):有些scheme需要有些不需要。authority部分空缺的时候,path部分不能以双斜杠开始。
  • authority

    • 由用户名和密码组成的身份认证部分,用户名和密码以冒号隔开,后面跟着@
    • host是注册名(包括但不限于主机名)或IP地址中的一个。IPv4必须为点分十进制格式,IPv6必须用[]括起来。
    • 可选的port number,用冒号和host隔开
  • path包含数据信息,通常为层级式结构的序列,每层之间以斜杠(/)分割开。这个序列类似于文件系统,或者就是对应于真实的文件系统。如果authority存在的话,path必须以斜杠(/)开始。如果authority空缺的话,path也是以斜杠(/)开始,但是不能以双斜杠(//开始。path一定存在,尽管有时候长度为0,因此path后面没有斜杠。path的最后可能会跟一个slug。
  • 可选的query,用?与前面的部分隔开。query的文法没有很好的定义,但是一般来说都是用分隔符分开的键值对。
  • 可选的fragment,用#和前面分开。fragment部分通常含有一个标识符用来指定二级资源,比如章节标题。当一级资源为HTML时,二级资源通常为某一个元素的id,网页会自动定位到元素的位置。

URI中的字符可以用ASCII表示大小写字母、数字、-._~。其他字符需要百分号编码。

ASCII中的: / ? # [ ] @是URI中的保留字,所以也需要百分号编码。! $ & ' ( ) * + , ; =在用作用户信息、host和path分隔符时可以不用编码。另外,:@在path、query和fragment中时可以不编码;?/在query和fragment的数据中可以不编码。

以下两个例子:

                    hierarchical part
        ┌───────────────────┴─────────────────────┐
                    authority               path
        ┌───────────────┴───────────────┐┌───┴────┐
  abc://username:password@example.com:123/path/data?key=value&key2=value2#fragid1
  └┬┘   └───────┬───────┘ └────┬────┘ └┬┘           └─────────┬─────────┘ └──┬──┘
scheme  user information     host     port                  query         fragment

  urn:example:mammal:monotreme:echidna
  └┬┘ └──────────────┬───────────────┘
scheme              path
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值