主机标头可以与URL不同

时间:2016-08-04 13:11:19

标签: wcf http proxy

我们运营一个使用WCF托管的网站。 该网站托管在:https://jsfiddle.net/a72t14j0/上,并使用以下命令注册ssl certicate:

netsh http add sslcert hostnameport=foo.com:443

当我们浏览服务器上的网站时,一切正常,证书有效。

服务器前面有一个负载均衡,可以监听bar.com,然后将请求重定向到我们的服务器。 负载均衡器不会重写get URL,而只会重写Host Header。

重写的标题如下所示:

GET https://foo.com/ HTTP/1.1
Host: bar.com
Connection: keep-alive

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

Loadbalancer本身已注册一个监听https://foo.com

的证书

问题:

  • 是否可以/允许http头中的获取URL和主机不同?
  • 如果标题中有不同的值,我们应该在哪个网址下运行该网站?获取网址或主机网址?

1 个答案:

答案 0 :(得分:2)

好吧,参考RFC2616:

  

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

那么,回到你的问题: 它是允许的但是一个坏主意,因为它会造成混乱,更好地使用相对路径。即

GET /path HTTP/1.1 

而不是

GET https://foo.com/path HTTP/1.1. 

修改loadbalance配置以执行此操作。或者使两个值相同。

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