主机标头可以与 URL 不同吗

Man*_*uel 4 wcf proxy http

我们运行一个使用 WCF 托管的网站。该网站托管在: https: //foo.com,并使用以下命令注册 ssl 证书:

netsh http add sslcert hostnameport=foo.com:443
Run Code Online (Sandbox Code Playgroud)

当我们浏览服务器上的网站时,一切都很好,并且证书是有效的。

服务器前面有一个负载均衡,它监听 bar.com,然后将请求重定向到我们的服务器。负载均衡器不会重写获取 URL,而只会重写主机标头。

重写后的标头如下所示:

GET https://foo.com/ HTTP/1.1
Host: bar.com
Connection: keep-alive
Run Code Online (Sandbox Code Playgroud)

现在我们遇到一些问题,表明 ssl 证书在这种情况下无效。

Loadbalancer本身有一个注册监听https://bar.com的证书

问题:

  • get URL 和 http header 中的 Host 不同可以吗?
  • 如果标头中可以有不同的值,那么我们应该在哪个 url 下运行该网站?获取 URL 或主机 url?

小智 7

好吧,参考RFC2616:

如果 Request-URI 是绝对 URI,则主机是 Request-URI 的一部分。请求中的任何主机头字段值都必须被忽略。

所以,回到你的问题:这是允许的,但这是一个坏主意,因为它会造成混乱,最好使用相对路径。IE

GET /path HTTP/1.1 
Run Code Online (Sandbox Code Playgroud)

代替

GET https://foo.com/path HTTP/1.1. 
Run Code Online (Sandbox Code Playgroud)

修改负载平衡配置来执行此操作。或者使两个值相同。

如果 Host 标头的值与请求 URI 不同,则 URI 优先于 Hosts 标头。