1.7 URI 和 URL

1.7 URI 和 URL

​ 与URI(统一资源标识符)相比,我们更熟悉URL(Uniform Resource Locator,统一资源定位符)。URL 正是使用 Web 浏览器等访问 Web 页面时需要输入的网页结构。比如,http://hackr.jp/ 就是URL

1.7.1 统一资源标识符

URIUniform Resource Identifier 的缩写。RFC2396 分别对这 3 个单词进行了如下定义。

Uniform

规定统一的格式可方便处理多种不同类型的资源,而不用根据上下文环境来识别资源指定的访问方式。另外,加入新增的协议方案(如 http:ftp: )也更容易

Resource

资源的定义是“可标识的任何东西”。除了文档文件、图像或服务(例如当天的天气预报)等能够区别于其他类型的,全都可作为资源。另外,资源不仅可以是单一的,也可以是多数的集合体。

Identifier

表示可标识的对象。也称为标识符。


综上所述,URI 就是某个协议方案表示的资源的定位标识符。协议方案是指访问资源所使用的协议类型名称。

​ 采用 HTTP 协议时,协议方案就是 http。除此之外,还有 ftp、mailto、telnet、file等。标准的 URI 协议方案有 30 种左右,由隶属于国际互联网资源管理的非盈利社团 ICANN(Internet Corporation for Assigned Names and Numbers,互联网名称与数字地址分配机构)的 IANA (Internet Assigned Numbers Authority,互联网号码分配局)管理颁布。

URI 用字符串标识某一互联网资源,而 URL 标识资源的地点(互联网上的位置)。可见 URLURI 的子集。

“RFC3986:统一资源标识符(URI)通用语法”中列举了几种 URI 例子,如下所示。

ftp://ftp.is.co.za/rfc/rfc1808.txt
http://www.ietf.org/rfc/rfc2396.txt
ldap://[2001:db8::7]/c=GB?objectClass?one
mailto:John.Doe@example.com
news:comp.infosystems.www.servers.unix
tel:+1-816-555-1212
telnet://192.0.2.16:80/
urn:oasis:names:specification:docbook:dtd:xml:4.1.2

1.7.2 URI 格式

​ 表示指定的URI,要使用涵盖全部必要信息的绝对 URI、绝对 URL 以及相对 URL 。相对 URL,是指从浏览器中基本 URI处指定的 URL ,形如 /image/logo.gif。

1.7 URI 和 URL

​ 使用 http:https: 等协议方案名获取资源时要指定协议类型。不区分字母大小写,最后附一个冒号( : )

​ 也可使用data:javascript: 这类指定数据或脚本程序的方案名

登录信息(认证)

指定用户名和密码作为从服务器端获取资源时必要的登录信息(身份认证)。此项是可选项。

服务器地址

使用绝对 URI 必须指定待访问的服务器地址。地址可以是类似 hackr.jp 这种 DNS 可解析的名称,或是 192.168.1.1 这类 IPv4 地址名,还可以是[0:0:0:0:0:0:0:1] 这种用方括号括起来的 IPv6 地址名。

服务器端口名

指定服务器连接的网络端口号。此项也是可选项,若用户省略则自动使用默认端口号。

带层次的文件路径

指定服务器上的文件路径来定位特指的资源。这与 UNIX 系统的文件目录结构相似。

查询字符串

针对已指定的文件路径内的资源,可以使用查询字符串传入任意参数。此项可选

片段标识符

使用片段标识符通常可标记出已获取资源中的子资源(文档内的某个位置)。但在 RFC 中并没有明确规定其使用方法。该项也为可选项。


并不是所有的应用程序都符合 RFC

​ 有一些用来制定 HTTP 协议技术标准的文档,它们被称为 RFC(Request for Comments,征求修正意见书)。

​ 通常,应用程序会遵照有 RFC 确定的标准实现。可以说, RFC是互联网的设计文档,钥匙不按照 RDC标准执行,就有可能导致无法通信的状况。比如,有一台 Web 服务器内的应用服务没有遵照 RFC 的标准实现,那 Web 浏览器就很可能无法访问这台服务器。

​ 由于不遵照 RFC 标准实现就无法进行 HTTP 协议通信,所以基本上客户端和服务器端都会以 RFC 为标准来实现 HTTP 协议。但也存在某些应用因客户端或服务器端的笔筒,而未遵照 RFC 标准,反而将自成一套的“标准”扩展的情况。

​ 不按 RFC 标准来实现,当然也不必劳心费力让自己的“标准”符合其他所有的客户端和服务器端。但设想一下,如果这款应用程序的使用者非常多,那会发生什么情况?不难想象,其他的客户端或服务器端必然都不得不去配合它。

​ 实际在互联网上,已经实现了 HTTP 协议的一些服务器端和客户端里就存在上述情况。

上一篇:在请求目标中找到无效字符。有效字符在RFC 7230和RFC 3986中定义


下一篇:php 8.0新特性