URI URL URN

URI

  • 定义
    Uniform Resource Identifier,统一 资源 标识,是一组紧凑的字符序列,用于标识抽象资源或物理资源。URI规范定义了URI需要满足的基本语法,以及解析URI的过程。该规范没有为URI具体定义语法,该任务由每个URI方案的各个规范执行。

    具体含义为:

    • Uniform:统一,对不同类型的资源标示符进行统一语义解释

      这使得资源类型不受限,资源使用场景不受限。

    • Resource:资源,可以是任何内容

      如:电子文档、图像、服务;甚至是非互联网资源,如人、书。

    • Identifier:标示符,将资源唯一标识出来所需要的信息。

      达到这一目的方法是可以是多样的,只要达到将资源区别出来的目的即可。所以,标识不一定包含资源的特征(虽然大多是通过特征来实现该目的),也不一定包含资源的位置。

  • 特点

    • 简单
    • 通用
    • 易扩展
  • 功能

    通过URI,可以通过某种协议,在网络上和资源(如,人)的某种表示(人在网络中的存在形式,如文字描述文档或声音描述音频)进行交互。典型应用场景是万维网,使用的是URL。

  • 语法

    URI syntax diagram

    // URI 采用层次结构,包含 5 部分:scheme, authority, path, query, fragment
    // 其中,scheme 和 path 是必选项(虽然 path 的值可以为空)。authority 的格式 会影响到 path 的表示
    // 1、scheme:指定标示符使用的规范,即如何处理这个文件。
    // 2、authority:层次结构的命名权威,以便将剩余部分名称空间的管理委托给该命名权威。包括:
    //		a)userinfo:可能包含一个用户名,以及关于如何获得访问资源的授权的特定于模式的信息
    //		b)host:主机
    //		c)port:端口
    // 3、path:通常采用层次结构,用于标识 特定 scheme 和 authority(如果有)下的资源
    // 4、query:非层次结构,和 path 一起,用于标识 特定资源(如资源内的某个片段),某些 scheme 会用这个组件传递参数,通常是"键-值"对形式
    // 5、fragment:间接识别主要资源的二级资源(如主要资源的一部分)。在客户端内部使用的,不会传送给服务器
    URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
    
                  	 hier-part = "//" authority path-abempty
                              	   / path-absolute
                              	   / path-rootless
                              	   / path-empty
    // 上面的定义和下面等同:
    URI = scheme:[//authority]path[?query][#fragment]
        
                    authority = [userinfo@]host[:port]
    
  • 例子

         userinfo     host        port
              ┌─┴────┐ ┌────┴────────┐ ┌┴┐ 
      https://john.doe@www.example.com:123/forum/questions/?tag=networking&order=newest#top
      └─┬─┘ └───────┬────────────────────┘└─┬─────────────┘└──┬───────────────────────┘└┬─┘  
      scheme     authority                 path              query                 fragment
    
      ldap://[2001:db8::7]/c=GB?objectClass?one
      └─┬┘ └───────┬─────┘└─┬─┘ └──────┬──────┘
     scheme    authority  path       query
    
      mailto:John.Doe@example.com
      └──┬─┘ └─────────┬────────┘
      scheme         path
    
      news:comp.infosystems.www.servers.unix
      └─┬┘ └───────────────┬───────────────┘
     scheme              path
    
      tel:+1-816-555-1212   //电话号码格式 也可以作为 URI格式
      └┬┘ └──────┬──────┘
    scheme     path
    
      telnet://192.0.2.16:80/
      └──┬─┘ └──────┬──────┘│
      scheme    authority  path
    
      urn:oasis:names:specification:docbook:dtd:xml:4.1.2
      └┬┘ └──────────────────────┬──────────────────────┘
    scheme                     path
    

URL

  • 定义
    URL(Uniform Resource Locator),统一资源定位符。

  • 格式

    // 协议类型可以是 http,ftp,https,telnet,file。主要在`万维网`中应用(对应http协议),俗称Web地址。
    // "服务器地址"通常为域名,有时为IP地址
    // 标准格式:
    协议类型:[//服务器地址[:端口号]][/资源层级UNIX文件路径]文件名[?查询][#片段ID]
    
    // 完整格式:
    协议类型:[//[访问资源需要的凭证信息@]服务器地址[:端口号]][/资源层级UNIX文件路径]文件名[?查询][#片段ID]
    
  • 特点

    • 基于资源位置访问资源

URN

  • 定义

    Uniform Resource Name,统一资源名称。可以在不知道其网络位置及访问方式的情况下讨论资源。

  • 格式

    // 大小写不敏感
    // 使用 urn: 作为 URI scheme
    // <NID>是命名空间标识,它是一个“命名空间特定”的字符串,决定了如何解释<NSS>的句法
    
    urn:<NID>:<NSS>
    
  • 特点

    • 持久性:即使资源已经不存在或者不可用,其URN仍然存在。
    • 位置无关性:不提供资源位置或者访问该资源的方法。

URI URN URL - 关系

URI可以是一个统一资源定位符号(URL),也可以是一个统一资源名称(URN),又或者两者都是。即 URI 是 URL 和 URN 的超集,URL 和 URN 都是是 URI 的一种实现形式。URI可能同时拥有名字(URN)和位置(URL)。

常见问题

URL最后斜杠/的作用

当Web服务器接收到对某个末尾不含斜杠的url请求时,例如“http://www.abc.com/abc”,这时服务器会搜索网站根目录下有没有名为“abc”的文件,如果没有就把abc当做目录处理,然后返回abc目录下的默认首页。当Web服务器接收到的是末尾带斜杠的请求时就会直接当做目录处理。


参考文献

https://en.wikipedia.org/wiki/Uniform_Resource_Identifier URI - wiki

https://tools.ietf.org/html/rfc3986#section-1.2.1 URI - RFC

https://blog.youkuaiyun.com/gogzf/article/details/78261340 URL的语法

https://blog.youkuaiyun.com/u010525694/article/details/78591355 URL最后斜杠/的作用

### URLURIURN 的区别与使用 #### 定义与概念 统一资源定位符(URL)、统一资源标识符(URI)以及统一资源名称(URN)都是用于识别网络上的资源的方式,但它们的具体定义和用途有所不同。 - **URI** 是一种广义的概念,表示任何可以用来唯一标识某个资源的方法。它是一个超集,涵盖了 URLURN[^1]。 - **URL** 是 URI 的子集,主要用于指定如何访问特定的资源。它不仅提供资源的位置信息,还包含了协议(如 `http` 或 `ftp`),主机名以及其他必要的参数来实现对资源的实际获取[^1]。 - **URN** 同样也是 URI 的一种形式,但它更侧重于命名而非定位。URN 提供了一种持久不变的方式来指代某物,而不依赖其物理位置。它的结构通常由三部分组成:“urn:”前缀后面跟着命名空间标识符(NID),再接着是该命名空间内的具体字符串(NSS)[^1]。 #### 使用场景对比 - 当开发者需要明确指出一个文件在网络中的确切地址并能够立即打开这个链接时,则会选用 URL 。例如,在 HTML 中通过 `<a>` 标签创建指向其他网页的超级链接就经常采用 HTTP 协议下的 URL 地址。 ```html <a href="https://www.example.com/page.html">Visit Example Page</a> ``` - 如果只是想表达某种抽象意义上的对象而不需要关心实际存储地点的话,那么可以选择使用 URN 来代替具体的路径描述。比如 ISBN 号码就可以作为书籍的标准 URN 表达方式之一: ```text urn:isbn:978-3-16-148410-0 ``` - 对于那些既希望保持灵活性又要求一定程度标准化的应用程序来说,可能就会综合运用到以上两种甚至更多类型的 URI 形式。例如 RESTful API 设计中经常会遇到这样的情况——某些端点可能会接受基于 ID 查询请求的同时也允许按照分类标签检索相关内容;此时便可以通过组合不同模式的 URI 实现更加丰富的交互逻辑[^2]。 #### 技术细节分析 从技术角度来看,每类 URI 都有自己的特点及适用范围: - **URL**: 包含足够的信息使得客户端可以直接连接服务器从而取得目标数据; - **URN**: 更加注重语义层面的意义传达而不是操作层面上的功能实现; - **通用规则**: 所有的 URL 均属于合法的 URI ,但是并非所有的 URI 能够充当有效的 URL [^3]. 综上所述,在 Web 开发过程中合理选择合适的 URI 类型对于构建高效稳定的服务至关重要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值