http - 为什么基于主机 header 路由请求是代理流量的好方法?

标签 http proxy http-headers api-gateway kong

proxy documentation for Kong ,提到了

Routing a request based on its Host header is the most straightforward way to proxy traffic through Kong, especially since this is the intended usage of the HTTP Host header

但是,为了使其发挥作用,来自客户端的任何传入请求现在都必须将其 Host header 设置为特定值。一般来说,HTTP 客户端不会故意修改这个值,那么它在实际中是如何使用的呢?

换句话说,客户端通常不会像文档中的 curl 示例中那样修改请求中的 HTTP 主机 header ,例如: curl --url http://proxy.mydomain.com:8000/--header '主机:service.example.com'

鉴于代理旨在对客户端透明,为什么会出现“这是 HTTP 主机 header 的预期用途”?

最佳答案

如果代理对客户端是透明的,则客户端通常不知道使用了代理,因此通过 DNS 解析 IP 地址。然后客户端相应地建立到该 IP 地址的 TCP 连接。

(透明)代理现在拦截流量。主机 header 现在是获取服务器 FQDN 的唯一机会。如果连接是 HTTPS,这一点很重要,因此代理可以使用主机 header 值作为 SNI/验证服务器的证书。

独立于透明代理的使用,主机 header 应包含允许使用同一服务器硬件托管多个网页的服务器名称。

示例:

服务器IP 1.2.3.4,有4个网站:www.a.com、www.b.com、www.c.com、www.d.com。

客户端必须在主机 header 中提供网站的值,以便服务器能够区分不同的网站。

关于http - 为什么基于主机 header 路由请求是代理流量的好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58208382/

相关文章:

http - REST:更正被忽略的 POST 的 HTTP 响应代码

http - Flutter http请求上传mp3文件

.net - 在 OSX 上的 Mono 中,如何访问当前代理?

asp.net-mvc - ASP.NET MVC 页面不通过 3G 或某些代理服务器提供服务

controller - 如何从 Controller 中的 header 获取 JWT token

java - 在 jsp 文件中将 Content-Type 设置为 application/json

java - Android ByteArrayOutputStream.write - "int off"参数,什么是

http - 为什么 foo.example.com 可以为 example.com 设置 cookie?

proxy - Squid 服务器(NAT 后面)通过​​互联网进行基本身份验证