我的问题基本上是对Can you set the Host header using fetch API的扩展问题
我有一个同样的问题,我的反向代理服务器(nginx)需要将请求重定向到相应的服务。最初我不知道Host是一个禁止的标头名称,因此在阅读其解释https://tools.ietf.org/html/rfc7230#page-44之后,我以为可以在获取请求中将其设置为不同的值,以使反向代理服务器区分请求并转发给相应的服务。
现在在Google之后,我认为也许X-Forwarded-Host可以胜任这项工作,但是我找不到足够的材料。
我的第二个问题是,如果不能以编程方式修改Host,谁会修改/设置其值以使其有用?
顺便说一句,我的提取请求很简单,
let response = await fetch(url, // The reverse proxy server address
{
headers: {
'X-Forwarded-Host' : "..."
}
});
答案 0 :(得分:0)
我的第二个问题是,如果不能以编程方式修改Host,谁会修改/设置其值以使其有用?
我将首先解决这个问题,因为我认为背景对于回答其余问题很重要。
Host标头是从URL派生的。鉴于:
fetch("http://www.example.com/foo/bar")
...主机标头将为www.example.com
。这与任何其他HTTP请求相同。例如<img src="http://www.example.com/foo.png">
将通过Host: www.example.com
触发请求。
同样,路径(GET /foo/bar HTTP/1.1
和方案(客户端如何首先连接到服务器)也从URL派生。
我以为可以在获取请求中将其设置为不同的值,以使反向代理服务器区分请求并转发到相应的服务。
您似乎误解了反向代理的工作原理。
客户端不向反向代理提出请求,并要求它为您提供任意URL(正向代理的工作方式)。
相反,操作网站的人员将所需的URL配置为指向反向代理,然后将反向代理配置为根据请求进行转发。
例如您可以配置面向公众的DNS,将www.example.com
指向反向代理的面向Internet的一面,然后配置反向代理以通过向{{1}发出请求来响应对https://www.example.com/foo/bar
的请求}。
然后http://private.on.my.lan:8012/myservice/foo/bar
只会请求fetch
,其他所有内容将由反向代理透明地处理。
仅通过使用不同的URL和可能的主机名来完成不同的请求。
https://www.example.com/foo/bar
…都可以指向同一个反向代理,该代理可以具有以不同方式处理它们的逻辑。