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正在使用中。
  • 双斜杠//):有些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:[email protected]:123/path/data?key=value&key2=value2#fragid1
  └┬┘   └───────┬───────┘ └────┬────┘ └┬┘           └─────────┬─────────┘ └──┬──┘
scheme  user information     host     port                  query         fragment

  urn:example:mammal:monotreme:echidna
  └┬┘ └──────────────┬───────────────┘
scheme              path

你可能感兴趣的:(总结,uri)