通知Web浏览器,协议服务器正在使用

时间:2018-01-24 15:59:33

标签: java browser http2

作为位于服务器和浏览器之间的代理程序,我们如何通知浏览器使用http1.1或http2.0协议

1 个答案:

答案 0 :(得分:0)

答案取决于您的"代理"是在浏览器上配置的转发代理,或在服务器上配置的反向代理。

在第一种情况下(转发代理),由于目标方案是https,浏览器将向转发代理发出HTTP CONNECT,转发代理将创建到服务器的隧道。 创建隧道后,浏览器和服务器将直接与转发代理通信,仅在两个方向上转发字节。

在这种情况下,客户端和服务器将通过ALPN直接协商协议,因为它们直接通信,转发代理仅转发字节(但不检查或以其他方式更改它们)。

因此,在这种情况下,您不需要通知客户任何事情,因为客户端和服务器直接通信。

在第二种情况下(反向代理),浏览器将连接到反向代理,认为它是最终目的地。 对于https://example.com的请求,DNS将解析反向代理地址,反向代理必须为example.com提供有效证书。

如果反向代理需要将请求转发给服务器,那么它将使用什么协议并不重要,因为客户端永远不会知道反向代理和服务器之间的这种通信。

如果反向代理仅支持HTTP / 1.1且服务器支持HTTP / 2,则反向代理无法告诉客户端服务器支持HTTP / 2,因为客户端从不直接与服务器通信:客户端只看到反向代理,因为反向代理只支持HTTP / 1.1,所以即使服务器也支持,它们也永远无法说HTTP / 2.

如果反向代理支持HTTP / 1.1和HTTP / 2,则客户端和反向代理将使用HTTP / 2。反向代理与服务器说什么协议无关紧要:它可以是HTTP / 1.1,HTTP / 2,FastCGI等。但是反向代理与服务器一起使用的协议对客户端没有兴趣,因为客户端将永远无法直接与服务器通信。

客户端只与反向代理通话,因此他们协商的协议是唯一对客户端重要的协议。

在这种情况下,您也不需要通知客户端任何内容,因为客户端只能与代理进行通信,并且只能使用与代理协商的协议。