http - X-Original-For 标头:它的目的是什么?
问题描述
在记录我的 Web 应用程序(位于负载均衡器 + 防火墙后面)接收到的 HTTP 标头时,我注意到我收到了 X-Original-For 和 X-Original-Proto 标头(除了传统的 X -Forwared-XXX 标头)。
他们的目的是什么?
解决方案
简短答案:X-Original-*
表示在和中收到的原始标头值。HttpContext.Connection
HttpContext.Request
长版:使用Nginx
//设置反向代理时,和将被更改为header中最左边的值, headers用于保存原始和值:IIS
Apache
HttpContext.Connnection
HttpContext.Request
X-Forwarded-*
X-Original-*
HttpContext.Connection
HttpContext.Request
- 原来的
HttpContext.Request.Scheme
会保存为 headerX-Original-Proto: ...
,然后HttpContext.Request.Scheme
会改成 header 中最左边的 schemeX-Forwarded-Proto: o1, o2, ...
- 原来的
HttpContext.Request.Host
会保存为 headerX-Original-Host: <original-host>
,然后HttpContext.Request.Host
会改成 header 中最左边的主机X-Forwarded-Host: o1, o2, ...
- 原来的
HttpContext.Connection.RemoteIpAddress
和HttpContext.Connection.RemotePort
将保存为 headerOriginalForHeaderName: <original-endpoint>
,然后这个值将更改为 header 中最左边的 IP 和端口X-Forwarded-For: o1, o2, ...
requestHeaders[_options.OriginalForHeaderName] = new IPEndPoint(connection.RemoteIpAddress, connection.RemotePort).ToString();
requestHeaders[_options.OriginalProtoHeaderName] = request.Scheme;
requestHeaders[_options.OriginalHostHeaderName] = request.Host.ToString();
推荐阅读
- python - 从列表到数据框获取未知列
- android - Android 材质日期范围选择器问题
- python - 连接到数据库/postgresql/python 时出错
- node.js - 在nodejs中如何设置像laravel这样的Mutators?
- c# - 如何使用 C# 在 Excel 中选择分层静态字段
- angular - 是否可以将独立过滤器与列过滤器一起使用?
- javascript - 使用我自己的类的应用程序架构
- android - 如何在 Android 中实现影子?
- c# - 在 .Net Core 2.2 中,如何使用带有默认 .Net UserManager 的自定义 UserStore 或者我必须从头开始构建 UserManager?
- python-3.x - 在 Odoo 的字段中显示警报图标?