如何使用托管IIS模块正确设置HTTP标头

Dob*_*007 34 .net c# asp.net iis arr

我在C#中编写了自己的托管IIS HTTP模块.它的目的是在某些条件下简单地设置X-Forwarded-For和X-Forwarded-Proto请求头(这不能用路由规则处理).该模块必须部署到我们的负载均衡器(除了安装了ARR和配置的服务器场的IIS之外).由于某些原因,标头已设置但不会传输到负载平衡器后面的Web服务器.我知道,因为我检查了失败的请求跟踪输出日志. 失败的请求跟踪日志

以下是我们的负载均衡器上安装的所有IIS模块的屏幕截图:

有序模块列表

如您所见,我的托管模块"QA.XForwardedHeadersModule"在ApplicationRequestRouting(ARR)本机模块之前加载.但无论如何都不会传输标题.我甚至用Wireshark跟踪了我的请求.根本没有任何X-Forwarded标头.

这是否意味着托管模块与本机模块不完全兼容,而本机模块(如ARR)无法查看使用托管模块设置的请求标头(如我的自定义编写模块)?这个问题有可能解决方法吗?

小智 1

这是一个旧的“未答复”帖子,所以我想我会添加我的两分钱。添加请求标头通常可能不起作用,具体取决于 ARR 模块/处理程序将如何处理请求。正如塔伦所说,现在可能已经太晚了,但还有另一个原因。ARR 模块可能正在抓取正在接收的原始数据,在这种情况下肯定为时已晚。或者 ARR 处理程序可能正在查看包含在通知之前设置的原始标头的特定服务器变量(例如,如果您添加其他请求标头,我认为 ALL_RAW 不会更新。)在可能的情况下,ARR 模块正在获取原始缓冲区,您需要提前更新原始数据,如果可能的话,这将是一个全新的复杂性水平。