HTTP:主机 header 字段中是否允许使用 IP 地址?
HTTP: Is an IP address allowed in the host header field?
我看过RFC 2616 (HTTP/1.1),我觉得对上面的问题不是很清楚。
据我了解,主机 header 字段的目的是能够在一个 IP 地址下提供多个域。因此主机 header 字段中的 IP 地址没有多大意义。但 RFC 2616 并未明确禁止这样做。
所以我的第一个问题是:如果我编写一个 HTTP 服务器,我是否应该执行检查,客户端是否在主机 header 字段中发送 IP 地址,或者这是不必要的,因为没有客户端会这样做吗?
第二个问题:如果客户端在主机 header 字段中发送 IP 地址,服务器应该将其视为有效还是应该 return “400 Bad Request”?
Host
header 可以是原始 IP 文字。适当的 RFC 引用是:
- RFC7230§5.4:主持人header
- RFC7230§2.7:统一资源标识符 - 定义
uri-host
- RFC3986§3.2.2:主机 - 定义
host
RFC3986 中 host
的定义是:
host = IP-literal / IPv4Address / reg-name
至于返回400 Bad Request
,我当然不会。如果您键入“http://172.217.3.100/”,那么浏览器(或至少是 curl)将在请求中发送 Host: 172.217.3.100
。
我看过RFC 2616 (HTTP/1.1),我觉得对上面的问题不是很清楚。
据我了解,主机 header 字段的目的是能够在一个 IP 地址下提供多个域。因此主机 header 字段中的 IP 地址没有多大意义。但 RFC 2616 并未明确禁止这样做。
所以我的第一个问题是:如果我编写一个 HTTP 服务器,我是否应该执行检查,客户端是否在主机 header 字段中发送 IP 地址,或者这是不必要的,因为没有客户端会这样做吗?
第二个问题:如果客户端在主机 header 字段中发送 IP 地址,服务器应该将其视为有效还是应该 return “400 Bad Request”?
Host
header 可以是原始 IP 文字。适当的 RFC 引用是:
- RFC7230§5.4:主持人header
- RFC7230§2.7:统一资源标识符 - 定义
uri-host
- RFC3986§3.2.2:主机 - 定义
host
RFC3986 中 host
的定义是:
host = IP-literal / IPv4Address / reg-name
至于返回400 Bad Request
,我当然不会。如果您键入“http://172.217.3.100/”,那么浏览器(或至少是 curl)将在请求中发送 Host: 172.217.3.100
。