URI、request-URI 和 URL 之间有什么不同?
What's different between URI, request-URI and URL?
我正在学习网络技术,老师不能给我一个满意的解释。
我想举几个例子,请大家帮我指出是否正确。
- 我知道 URL 是 URI
的一个子集
- http://www.example.org:56789/a/b/c.txt?t=win&s=chess#para5
是一个 URL 也是一个 URI
- 我们在浏览器中输入的每个地址都可以调用URL
- http://www.example.org:56789/ 也是一个 URI
- 部分:
a/b/c.txt?t=win&s=chess
是 request-URI
- 部分:
para5
不属于request-URI只是一个片段
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
,这些将是:
Scheme: http
Authority: www.example.org:56789
User Information:不存在
Host: www.example.org
Port: 56789
Path: /a/b/c.txt
Query: t=win&s=chess
Fragment: 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
AuthType 基本
授权名 "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 东西。
我正在学习网络技术,老师不能给我一个满意的解释。 我想举几个例子,请大家帮我指出是否正确。
- 我知道 URL 是 URI 的一个子集
- http://www.example.org:56789/a/b/c.txt?t=win&s=chess#para5 是一个 URL 也是一个 URI
- 我们在浏览器中输入的每个地址都可以调用URL
- http://www.example.org:56789/ 也是一个 URI
- 部分:
a/b/c.txt?t=win&s=chess
是 request-URI - 部分:
para5
不属于request-URI只是一个片段
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
,这些将是:
Scheme:
http
Authority:
www.example.org:56789
User Information:不存在
Host:
www.example.org
Port:
56789
Path:
/a/b/c.txt
Query:
t=win&s=chess
Fragment:
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
AuthType 基本
授权名 "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 东西。