origin 和 x-forwarded-host http 标头之间的区别

War*_*rok 3 header http

在工作中,我们使用多个带有多个虚拟主机的网站。

我了解虚拟主机Origin是什么,但我不明白和标头之间的区别X-forwarded-Host。(我们在工作中使用这两个标头。)

来自 MDN 的示例:

  • X-转发主机=X-转发主机:==>X-Forwarded-Host: id42.example-cdn.com
  • 来源==来源:“://”[“:”]==>Origin: https://developer.mozilla.org

从上面的例子中我推断出:X-forwarded-Host只包含主机并Origin包含主机加上方法,也许还有端口。

如果我错了,有人可以告诉我吗?

Iva*_*var 9

当向网站发出请求时,用户代理(浏览器)将向Host请求添加标头。该标头的值将是请求所针对的域名。服务器可以使用此标头来区分您尝试访问的网站,例如当同一服务器托管多个网站时。

如果您使用反向代理,标Host头将包含反向代理本身的值。为了知道原来的主机,X-forwarded-Host可以使用。该标头包含代理最初收到的内容Host

示例:如果您向 发出 GET 请求https://stackoverflow.com,则Host(或在代理之后X-forwarded-Host)标头将始终具有值stackoverflow.com

标题Origin与此无关。此标头告诉您请求是从哪个站点发出的。
例如,如果您有一个<form>onexample.com向 发出 POST 请求stackoverflow.com,则Host将为stackoverflow.com(请求发送到的域),而 的Origin值为https://example.com


如需演示,您可以访问此链接: https: //jsfiddle.net/parcqhn4/

如果您在开发人员工具中打开“网络”选项卡并点击“提交”按钮,您可以看到标Host头包含该值example.com(位于 的action<form>,而Origin包含该值https://fiddle.jshell.net(这是 Fiddle 运行的容器)在)。