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

时间:2017-12-26 15:24:38

标签: c# asp.net .net iis arr

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

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

Ordered module list

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

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

1 个答案:

答案 0 :(得分:1)

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