什么是 URI, URL 和 URN? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
logto
V2EX    程序员

什么是 URI, URL 和 URN?

  •  2
     
  •   logto
    logto-io 2024 年 6 月 18 日 2191 次点击
    这是一个创建于 578 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在开发 Web 应用时,我们经常需要调用不同的服务。在配置不同服务的通信和连接时,我们经常遇到 URI 、URL 和 URN 的概念。通常,用户很难区分它们,导致混淆或错误的使用。在本文中,我们将通过实例解释它们之间的区别,帮助大家更好地理解这些概念,并在阅读技术博客、文档或与其他工程师交流时正确地解读和使用它们。

    什么是 URL ?

    URL (统一资源定位符)提供了互联网上资源的网络地址或位置。它通常用于指定网页、文件或服务的位置。URL 提供了一种标准化的格式来访问网络上的资源。它是网络浏览、链接和互联网通信的关键组成部分。

    URL 由几个部分组成,这些部分一起定义了资源的地址和用于访问它的协议。让我们解析下面的 URL 作为例子,一一解释每个部分的功能。

    https://example.logto.io:8080/blogs/index.html?param1=value1&param2=value2#introduction 
    1. Scheme: 指定了用于访问资源的协议或方案,如 HTTP (超文本传输协议)、HTTPS (安全的 HTTP )、FTP (文件传输协议)或 其他

      此 URL 中的 scheme 是 https

    2. Host: 主机指定了托管资源的服务器的域名或 IP 地址。

      此 URL 中的 host 是 example.logto.io

    3. Port: (可选)端口表示在主机上访问资源的特定端口号。如果没有指定端口,它默认为给定方案的标准端口。

      HTTP 的默认端口是 80 ,而 HTTPS 的默认端口是 443 。

      此 URL 中的 port 是 8080

    4. Path: (可选)路径指示服务器上资源所在的特定位置或目录,可以包括目录和文件名。

      此 URL 中的 path 应为 /blogs/index.html

    5. Query parameters: (可选)查询参数是传递给资源的额外参数,通常用于动态网络应用。它们出现在路径之后,由 ? 符号分隔。

      此 URL 中的 query parameters 是 params1=value1&param2=value2,通常以键值对的形式表示,对之间由 & 符号分隔。在实际使用场景中,通常需要编码以避免空格等字符。

    6. Fragment identifier: (可选)它也可以被称为锚,用于定位资源中的特定位置。

      此 URL 中的锚是 #introduction

    此外,使用文件服务或许多网页上的 "联系我们" 按钮都链接到 URL ,例如:

    什么是 URI ?

    URI 代表 "统一资源标识符"。它是一个字符串,用于标识特定的资源,如网页、文件或服务。URI 提供了一种使用标准化格式唯一标识和定位资源的方法。

    URI 主要由两个组成部分组成:

    1. Scheme: 指示用于访问资源的协议或方案。
    2. Resource identifier: 标识正在访问或引用的特定资源。资源标识符的格式取决于使用的方案。

    从语法角度看,URI 大多遵循 URL 的相同格式,如 RFC 3986 中所述。

    尽管这种 URI 格式与 URL 的相似,但它并不能保证访问 Web 上的所有资源。使用这种格式可以减少命名空间名称冲突。

    在上面的部分中,我们介绍了 URL ,它不仅标识资源,还帮助定位资源。所以,实际上,URL 是 URI 的一个适当的子集。

    什么是 URN ?

    URN 可能不如 URL 和 URI 常见。它代表 "统一资源名称",其范围是以持久的方式标识资源,即使这些资源不再存在。

    与 URL 不同,URN 不提供任何关于如何定位资源的信息;它只是标识它,就像一个纯 URI 一样。具体来说,URN 是一种带有 "urn" 方案的 URI ,其结构如 RFC 2141 中所述:

    <URN>:<NID>:<NSS>

    1. URN: 通常为 urn
    2. 命名空间标识符( NID ): 代表一个唯一的命名空间或标识符系统,定义和管理 URN 。它提供上下文,并确保标识符的唯一性。命名空间的例子包括 ISBN (国际标准书号)等。
    3. 命名空间特定字符串( NSS ): 它是一个字符串,唯一地在指定的命名空间内标识一个资源。标识符本身并不传达任何关于资源位置或访问方法的信息。

    例如,一本非常著名的介绍计算机系统的书 CS: APP 的 ISBN 号表示为 URN urn:isbn:9780134092669

    URN 经常用于各种标准协议中,如 SAML 协议中的断言,对应于 URN urn:oasis:names:tc:SAML:2.0:assertion

    在软件工程中,我们也可以根据 URN 命名规则为我们自己的系统中的特定目的定义 URN 。例如,在 Logto 中,要启用 Organization ,你需要在使用 SDK 时在配置中添加 urn:logto:scope:organizations 这个 scope 。每个 Organization 也有自己的专用 URN urn:logto:organization:{orgId}

    结论

    URI 、URL 和 URN 之间的关系可以用以下的文氏图来说明:

    关系图

    URI 、URL 和 URN 都可以用来标识不同的资源,但只有 URL 可以精确地定位资源的位置。

    URI 和 URL 可以支持各种方案,如 HTTP 、HTTPS 、FTP ,但 URN 可以被认为只支持 urn 方案。

    所有的 URL 或 URN 都是 URI ,但并非所有的 URI 都是 URL 或 URN 。


    如果有任何想法,欢迎大家讨论。更多文章请见我们的 博客

    目前尚无回复
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2212 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 00:28 PVG 08:28 LAX 16:28 JFK 19:28
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86