URL字符串
actionUrl = "customscheme://www.unravel.com/path/to/myh..."
使用URL解析
js
import url from '@ohos.url';
const action0 = url.URL.parseURL(actionUrl)
可以看到URL的组成部分包括
hash、host、hostname、href、origin、password、pathname、port、protocol、search、username、params等字段
我们使用的时候有几点需要注意
- 解析出来的protocol部分带有冒号
- 解析出来的search部分带有问号
- fragment部分没有被解析出来
使用URI解析
javascript
import uri from '@ohos.uri';
const action1 = new uri.URI(actionUrl)
可以看到URI的组成部分包括
scheme、userInfo、host、port、path、query、fragment、authority、ssp这些字段
其中
- query部分被完整解析出来,但并没有解析成map的形式
- fragment被作为整体解析出来了,也没有变成map的形式
- userinfo部分也一样
也就是说:URI解析的时候各部分是作为一个整体进行解析的,不会被解析到map中
URI、URL、URN
URL
- URL 全称为 Uniform Resource Locator,意为统一资源定位符
- URL 是一串字符串,这些字符可以是字母,数字和特殊符号
- URL是给定唯一资源的地址,指向该唯一资源的位置。它通过地址进行定位资源
语法
-
scheme:通信协议,包括HTTP、HTTPS、FTP、MAILTO、IRC、FILE等。
-
authority包含两部分:
- host:主机、服务器域名系统(DNS),主机名或IP地址
- port:端口号,可选,省略时是默认端口,如HTTP的默认端口是80,HTTPS 的默认端口是 443
-
path:路径,用来表示主机上的一个目录或者文件地址。由"/"进行分割的字符串,表示主机上的目录或者文件地址
-
query:查询的参数,多个参数由 "&" 隔开,每个参数的名和值用"="号隔开。如:age=18
-
fragment:信息片段,在给定页面内跳转的目标
URI
- URI 全称为 Uniform Resource Ideyintifier,意为统一资源标识符。
- URI 是一种标准方法,用于通过Location、Name或两者来识别资源
- URI 有两个子集,即 URL 和URN。其中URL主要是通过Location识别资源,而URN主要通过Name识别资源
语法
维基百科中的 URI语法
URI 和 URL 的语法主要区别在于 authority,它包含三个内容:
- User info:可选,可能包含用户名和密码(可选),由冒号 (:) 分隔,后跟 @ 符号。
- Host:域名或者IP地址。
- Port:指向域或 IP 地址的端口号
URI 和 URL 都遵循相同的规范:RFC 3986。但是,URL 可以定位资源,URI 只是标识资源。所有的 URL 都可以是 URI,但不能所有的 URI 都是 URL,因为 URI 包含 URL 和 URN
其他例子
URN
- URN 全称为 Uniform Resource Name,意为统一资源名称。
- 统一资源名称提供有关资源本身的信息,仅包括资源的名称或标识,但不提供用于访问资源的协议或地址。其会以永久的方式来标识资源,即使该资源不再存在
- 它通过名称在给定的命名空间中标识资源,命名空间是指一组名称或标识符
语法
- scheme: 方案规范(urn: )不区分大小写
- NID: 名称空间标识符,可以包括字母、数字和连字符 (-),后跟冒号 (:)
- NSS: 特定于命名空间的字符串。NSS 可能包含 ASCII 字母、数字、标点符号和特殊字符
URN目前用的很少,不过多介绍
总结
- URL和URN都是URI的子集
- URL: 用来标识网络资源,指定了操作或获取方式,同时包含访问机制和网络位置
- URN:用特定命名空间的名字标识资源。包括名字(给定的命名空间),但不包含访问方式
资料参考
聊聊 URL、URI、URN 有什么区别? https://www.51cto.com/article/710918.html
URL的解构以及与URI的区别 https://www.cnblogs.com/blknemo/p/13198506.html
RFC3986标准 datatracker.ietf.org/doc/html/rf...
RFC3986标准-语法部分 datatracker.ietf.org/doc/html/rf...
wiki中的URI语法https://en.wikipedia.org/wiki/Uniform_Resource_Identifier#Syntax