Windows IIS ARR反向代理HTTP头特殊字符编码异常问题
问题根因
Windows Server 2019 搭载的 IIS 10 变更了 HTTP 头的默认编码处理逻辑,和 Windows Server 2012R2 的 IIS 8.5 默认行为不一致:IIS 10 默认不会自动解码请求头中 URL 编码的特殊字符,会直接将编码后的内容转发给后端服务器,因此出现德语特殊字符显示为百分号编码格式的问题。
解决方案
以下两种方案二选一即可,优先推荐第一种全局配置方案,和旧环境行为完全对齐:
方案1:全局调整IIS编码逻辑(对齐2012R2旧环境行为)
使用管理员身份打开命令提示符,执行以下命令:
%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/proxy -useOriginalURLEncoding:true
也可以直接修改 IIS 全局配置文件C:\Windows\System32\inetsrv\config\applicationHost.config,找到system.webServer/proxy节点,添加/修改属性为useOriginalURLEncoding="true":
<system.webServer> <proxy useOriginalURLEncoding="true" /> </system.webServer>
方案2:仅针对自定义认证头单独解码(无全局影响)
如果不想修改全局配置影响其他业务,可以通过URL重写规则仅对X-AUTHENTICATE系列头做解码处理:
- 打开IIS管理器,定位到ARR反向代理对应的站点,打开「URL重写」功能
- 点击右侧「查看服务器变量」,添加三个允许修改的服务器变量:
HTTP_X_AUTHENTICATE_FAMILYNAME、HTTP_X_AUTHENTICATE_GIVENNAME、HTTP_X_AUTHENTICATE_CN,保存后返回规则列表 - 新建空白入站规则:
- 匹配URL:请求路径选择
*,匹配所有请求 - 条件:无需额外配置(如有需要可以限定仅处理携带指定头的请求)
- 服务器变量:依次添加三个变量,值分别填写
{UrlDecode:{HTTP_X_AUTHENTICATE_FAMILYNAME}}、{UrlDecode:{HTTP_X_AUTHENTICATE_GIVENNAME}}、{UrlDecode:{HTTP_X_AUTHENTICATE_CN}},全部勾选「替换现有值」 - 操作:操作类型选择「无」,勾选「停止处理后续规则」
- 匹配URL:请求路径选择
- 保存规则即可生效
验证步骤
配置修改完成后,执行iisreset重启IIS服务,重新发起请求后抓包查看ARR转发给后端的请求头,确认X-AUTHENTICATE系列头已经是解码后的正常德文字符即可。
内容的提问来源于stack exchange,提问作者user16899386
相关产品推荐
相关产品推荐

