配置项里有时写URI,有时写URL;浏览器地址里还会出现查询参数和#fragment。这些词值得分清,但仅靠“身份证、家庭住址”几个比喻,很难判断程序最终会请求什么。

更实用的顺序是:先确定采用哪套语法和解析规则,再看这个标识符怎样被应用使用。

URI是通用概念,URL强调访问机制

按RFC 3986的表述,URI是标识资源的通用形式;URL指其中同时提供主要访问机制的那一类。一个标识符可以具有名称、定位符或两者的特征,不宜再画成URL与URN严格互斥的两只盒子。RFC 3986第1.1.3节

现在的Web平台规范还有自己的用词背景:WHATWG URL标准统一使用URL这个词,并定义浏览器相关的解析与序列化规则。讨论某个库或字段时,应结合它依据的规范,而不是只争名字。WHATWG URL

几种引用可以这样读:

示例说明
https://example.com/docs?lang=zh#install一个HTTPS地址,包含主机、路径、查询与片段
urn:example:book-42使用示例命名空间的URN语法例子,不表示这里真有一本可下载的书
data:text/plain,hello内联数据的URL例子,没有HTTP地址那样的主机部分
../guide相对引用,需要基准地址才能确定完整目标

方案名scheme也不总等于一种网络传输协议。不能要求每个URI都具备host:port,再把不符合HTTP地址外形的字符串都判成错误。

拆开一个HTTPS地址

https://example.com:8443/docs/page?lang=zh#install
部分这个例子的值
schemehttps
主机example.com
显式端口8443
path/docs/page
querylang=zh
fragmentinstall

这里的path是服务端资源命名的一部分,不一定对应磁盘文件。query怎样解释,由相应应用决定;也不能把任意查询字符串都默认当成同一种键值表协议。

fragment则需要单独看:浏览器获取这个HTTP资源时,请求目标包含路径和查询,不会把#install作为HTTP请求目标发给服务器。片段由客户端按资源类型或应用规则解释,例如定位文档中的元素。RFC 3986片段规则

URI、URL与URN:看懂标识符,也看懂实际请求:机制示意

这是组件处理方式的示意,不是抓包记录。如果前端代码主动读取fragment后另发请求,那是应用新增的行为,不是HTTP自动携带片段。

URN描述命名,不保证浏览器能直接打开

URN使用urn方案,并在相应命名空间中分配名称。简化地看,其核心形式是:

urn:命名空间标识:命名空间内的标识

它的设计目标是持久、位置无关的资源标识。具体名称怎样管理、能否解析到某个访问地址,需要相应命名空间及解析机制支持。不能从“这是URN”推导出资源永久在线,或任意浏览器都知道怎样下载。RFC 8141

同样,资源可以有多个标识;一个地址的响应内容也可能随时间或内容协商变化。标识和定位提供了访问依据,不等于一次访问必定成功。

相对引用为什么需要关注最后的斜杠

按照Web URL的解析规则:

基准:https://example.com/docs/
引用:guide
结果:https://example.com/docs/guide

基准:https://example.com/docs
引用:guide
结果:https://example.com/guide

第二组基准路径的最后一段是docs,解析相对引用时会被新的路径段替换;第一组以斜杠结尾,guide追加到该路径下。检查页面相对链接,或显式使用URL解析器的接口基址时,需要注意这个差别;具体代理软件或客户端库若采用自己的拼接规则,还应另外核对。

实际代码中应使用对应平台的URL解析器处理基准、组件与编码,再核对结果。不要先随意解码整个字符串,再用几个字符串切割操作猜测边界。URL解析规则

修订于2026年11月1日:聚焦URI/URL/URN与相对引用,移除聊天残留,修正片段传输及标识、访问之间的边界。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐