URI、request-URI 和 URL 之间有什么不同?

What's different between URI, request-URI and URL?

我正在学习网络技术,老师不能给我一个满意的解释。 我想举几个例子,请大家帮我指出是否正确。

URI 标准是STD 66, which currently maps to RFC 3986

URI 与 URL

Section 1.1.3 描述了 URI 和 URL(以及 URN)之间的区别。

组件

Section 3 描述了 URI 可以包含的组件。

对于 URI http://www.example.org:56789/a/b/c.txt?t=win&s=chess#para5,这些将是:

request-URI

STD 66 / RFC 3986 中未定义甚至未使用术语“request-URI”。

我知道这是一个老话题,但我在目前的研究中遇到了它,也许其他人会有相关问题:

你可以在 apache 服务器语言中找到术语 "Request_URI",我不知道那是不是... 在这里它类似于 "Path",即用于通过 .htaccess 锁定对特定 URL 的访问,就像这样:

URL: www.example.de/lockthissite/

.htaccess 代码:

SetEnvIfNoCase Request_URI ^/lockthissite/$ SECURED=yes

A​​uthType 基本
授权名 "restricted access"
AuthUserFile /path/to/my/.htpasswd
需要有效用户
满足任何
订单允许,拒绝
允许所有
来自 env=SECURED

的拒绝

术语“Request-URI”由 HTTP 标准 (RFC 2616, §5.1.2) 定义,指的是实际 HTTP 请求中给出的 URL。

在正常的HTTP请求中,URL scheme和host在发送请求的时候已经处理好了(URL片段在HTTP协议层根本不存在) ,这意味着 Request-URI 是 path-absolute-URL string, possibly followed by ? and a URL-query string.

也就是说这部分完整URL:

https://example.org/path/to/file?param=42#fragment
                   ^^^^^^^^^^^^^^^^^^^^^^

请注意,它包括前导 /

例外情况包括:

  • 例如OPTIONS HTTP 方法,Request-URI 可能只是 *.
  • 当HTTP服务器作为代理时,Request-URI可能是一个完整的absolute-URL string(仍不包括片段)。
  • 其他,更多 elaborate/non-standard 东西。