X-Original-For 标头:它的目的是什么?

Lui*_*reu 7 http kestrel-http-server asp.net-core

在记录我的 Web 应用程序接收到的 HTTP 标头(它是负载均衡器+friewall)时,我注意到我收到了 X-Original-For 和 X-Original-Proto 标头(除了传统的 X -Forwarded-XXX 标头)。

他们的目的是什么?

谢谢。

itm*_*nus 8

简答:X-Original-*代表和 中收到的原始标头值HttpContext.ConnectionHttpContext.Request

长的版本:当使用Nginx/ IIS/Apache设置一个反向代理中,HttpContext.ConnnectionHttpContext.Request将被改变,以在最左边的值X-Forwarded-*报头,X-Original-*报头被用来保存原始HttpContext.ConnectionHttpContext.Request值:

  1. 原来的HttpContext.Request.Scheme会被保存为 header X-Original-Proto: ...,然后HttpContext.Request.Scheme将更改为 header 中最左边的方案X-Forwarded-Proto: o1, o2, ...
  2. HttpContext.Request.Host将保存为 header X-Original-Host: <original-host>,然后HttpContext.Request.Host将更改为 header 中最左边的主机X-Forwarded-Host: o1, o2, ...
  3. 将原来的HttpContext.Connection.RemoteIpAddressHttpContext.Connection.RemotePort将被保存为 header OriginalForHeaderName: <original-endpoint>,然后这个值将被更改为 header of header 中最左边的 IP 和端口X-Forwarded-For: o1, o2, ...

查看保存的源代码X-Original-For

requestHeaders[_options.OriginalForHeaderName] = new IPEndPoint(connection.RemoteIpAddress, connection.RemotePort).ToString();
Run Code Online (Sandbox Code Playgroud)

查看保存的源代码X-Original-Proto

requestHeaders[_options.OriginalProtoHeaderName] = request.Scheme;
Run Code Online (Sandbox Code Playgroud)

查看保存的源代码X-Original-Host

requestHeaders[_options.OriginalHostHeaderName] = request.Host.ToString();
Run Code Online (Sandbox Code Playgroud)