📜  HTTP 标头 | X-转发主机(1)

📅  最后修改于: 2023-12-03 14:42:00.226000             🧑  作者: Mango

HTTP 标头 | X-转发主机

HTTP 头是在 HTTP 请求和响应消息中传递了相关信息的一组属性。HTTP 头可以被用来描述 HTTP 消息语义、控制缓存、指定认证信息等。X-转发主机(HTTP 标头 | X-Forwarded-Host)是 HTTP 请求头之一,该头中包含了当前请求真实访问的主机名和端口。当请求被代理到下游服务器时,该头将会被使用。

为什么需要 X-转发主机 头

在常规的 HTTP 的情况下,访问一个 web 应用的 URL 中包含了主机名和端口,代理服务器转发这个请求时,需要传送到下游服务器,保证下游服务器正确的处理请求。否则,下游服务器无法确定究竟是那个域名访问,可能会造成一些功能异常。例如,在下游服务器上通过相对路径加载资源,因为缺失主机名导致资源返回 404。

X-转发主机的格式

下面是X-转发主机(HTTP 标头 X-Forwarded-Host)标头的格式:

X-Forwarded-Host: <host>[:<端口>]
  • <host>:代理请求所使用的主机名,在代理转发中可能被修改。
  • <port>(可选):代理请求所使用的端口号,默认取当前 URL 中包含的端口。
如何使用 X-转发主机

有些 web 应用需要知道究竟是那个 URL 在访问,常常通过获取主机名解决这个问题。在代理服务器场景下,如果服务器不为每一个应用程序指定定制的主机名,那么请求是通过代理进行转发的。这时候,web 应用需要获取请求的真实主机名。

我们可以通过请求头 X-转发主机来获取请求的真实主机名。以下是一个使用 X-转发主机头的 HTTP请求示例:

GET /index.html HTTP/1.1
Host: www.example.com
X-Forwarded-Host: proxy.example.com

在此请求中,代理服务器接受了在 "proxy.example.com" 上的请求。代理在 HTTP 头中添加了"X-Forwarded-Host"头。在这种情况下,接受请求的应用程序会看到从"proxy.example.com"转发的真实请求。

结论

X-转发主机头是 HTTP 请求头中的一部分,用于跟踪在代理服务器下游服务器上的用户请求。解析该头可帮助后端服务器识别它们实际处理的需要更具体的请求(例如,根据端口号进行区分),并用于构建可登记的 URL,而不是基于它们自己的 URL。

在编写需要经过代理的 web 应用程序时,使用 X-转发主机头是很重要的,这大大降低了在代理服务器下游服务器上出现功能异常的风险。