我们有一个使用Windows 2019 Server IIS 10的环境,该环境充当反向代理(ARR)用于我的IIS服务器场(应用程序请求路由3.0和URL重写2.1)。我们在HTTP头中发送用户名。但是我的ARR不知怎么搞砸了编码(我们使用的是德语特殊字符,例如ö,ü,ß...),所以当我检查WebServer的响应时,它显示:H%C3%B6lmuth M%C3%A4%C3%9Fterm%C3%BCller代替了霍尔穆特·梅斯特米勒。
我有一个配置相同的Windows 2012 R2 Server的旧环境,在这个环境中名称的显示是正确的。我已经检查了旧服务器和新服务器之间的各种设置,但没有发现任何差异。
此外,我已经使用失败的请求登录和网络监视器,看看什么服务器接收和发送,下面找到的结果。
在IIS ARR上收到的请求(旧的和新的):X-身份验证-系列名称:M%C3%A4%C3%9Fterm%C3%Bcller X-身份验证-给定名称:通过X-验证-cn:第三节
请求发送到IIS(新):X-身份验证-系列名称:M%C3%A4%C3%9Fterm%C3%BC证书颁发者X-身份验证-给定名称:通过X-验证-cn:第三节
发送到IIS的请求(旧):X-身份验证-系列名称:最高条款X-认证-给定名称:赫尔穆特X-认证-cn:赫尔穆特·梅斯特米勒
有人知道我该如何改变这种行为吗?帮助将不胜感激。
3条答案
按热度按时间6jjcrrmo1#
您能给予我一个如何使用{UNENCODED_URL}变量的示例吗?目前我们正在使用重写模块将请求路由到特定的服务器场,请参阅下面的规则:
如何修改规则以使用{UNENCODED_URL}变量?
rt4zxlrg2#
当HTTP请求到达Windows时,最新的HTTP.sys会对URL和HTTP标头进行编码,并将原始URL放入
UNENCODED_URL
服务器变量中,以便以后可以恢复。然而,原始头文件(如
X-AUTHENTICATE-FamilyName: Mäßtermüller
)似乎没有被保留(没有明确的文档),因此没有任何简单的方法来恢复它们。如果您想将头从
X-AUTHENTICATE-FamilyName: M%C3%A4%C3%9Fterm%C3%BCller
修改回X-AUTHENTICATE-FamilyName: Mäßtermüller
,我能想到的唯一方法是编写一个自定义IIS模块来执行解码步骤。或者,您可以修改其他代码以接受这样的编码头值(并在代码中需要时对它们进行解码),因为无论如何,这就是Windows/IIS现在的行为方式,您无法与之对抗。
vs91vp4v3#
请尝试将
useOriginalURLEncoding
设置为false,在规则中使用{UNENCODED_URL}变量时,URL重写将不再对URL进行编码。要设置标志以转到IIS管理器,请选择
Configuration Editor
并转到system.webServer/rewrite/rules
部分,在那里您将找到useOriginalURLEncoding
标志。