gpt4 book ai didi

IIS 反向代理重新编码包含百分号 (%) 的 URL

转载 作者:行者123 更新时间:2023-12-04 21:16:29 24 4
gpt4 key购买 nike

我正在尝试为 Jenkins 设置反向代理使用 IIS 7.5,Application Request Routing 3.0 (ARR) 和 URL Rewrite 2.0.

我的代理大部分时间都在工作,但我遇到了包含百分比符号 (%) 的 URL 的问题。

无论我尝试什么,代理都坚持对重写 URL 中的百分号进行解码或重新编码。

这就是我希望重写 URL 的方式:

http://my.proxy/a%2Fb -> http://my.host:8080/a%2Fb

这是实际重写 URL 的方式:
http://my.proxy/a%2Fb -> http://my.host:8080/a/b
- or -
http://my.proxy/a%2Fb -> http://my.host:8080/a%252Fb

如何让 IIS\ARR\Rewrite 停止重新编码我重写的 URL?

我试过的东西:
  • 一个普通的反向代理(将 URL 重写为 http://my.host:8080/a/b ):
    <rule name="ReverseProxyInboundRule1" stopProcessing="true">
    <match url="(.*)" ignoreCase="true" />
    <action type="Rewrite" url="http://my.host:8080/{R:1}" />
    </rule>
  • 使用 UNENCODED_URL服务器变量(将 URL 重写为 http://my.host:8080/a%252Fb ):
    <rule name="ReverseProxyInboundRule1" stopProcessing="true">
    <match url="(.*)" ignoreCase="false" />
    <conditions logicalGrouping="MatchAll">
    <add input="{UNENCODED_URL}" pattern="/(.*)" />
    </conditions>
    <action type="Rewrite" url="http://my.host:8080/{C:1}" />
    </rule>
  • 只需直接输入 URL(作为测试 - 还将 URL 重写为 http://my.host:8080/a%252Fb ):
    <rule name="ReverseProxyInboundRule1" stopProcessing="true">
    <match url="(.*)" ignoreCase="false" />
    <action type="Rewrite" url="http://my.host:8080/a%2Fb" />
    </rule>
  • Scott Hanselman 出色的“Experiments in Wackiness: Allowing percents, angle-brackets, and other naughty things in the ASP.NET/IIS Request URL”中的所有想法
  • <httpRuntime requestValidationMode="2.0" requestPathInvalidCharacters="*,:,&amp;,\" relaxedUrlToFileSystemMapping="true" />
  • <security>
    <requestFiltering allowDoubleEscaping="true" />
    </security>'

  • 注意:当我的 IIS 反向代理与 Jenkins' built-in reverse proxy checking system 发生冲突时,我遇到了这种行为。它尝试对这种形式的 URL 进行 HTTP 重定向。

    最佳答案

    Joseph,这是我尝试解决完全相同问题的所有方法的一个很好的总结,让 IIS 使用 SSL 将流量路由到我的 Gerrit 实例。当我发现你的帖子时,我希望也许有人想出了一种神奇的方式来配置它,但我想这是不可能的。我还尝试了另一件事,我已经为 IIS 编写了一个自定义重写提供程序,以便我可以在路由完成之前对百分号进行解码,但后来我意识到编码发生在以后,这是毫无意义的(我忘记了你的步骤nr 3 表明它非常好)。

    然而,我无法像过去那样摆脱 IIS,所以我想出了一个解决方法。我已经实现了一个简单的服务,它充当 IIS 和 Gerrit 之间的附加代理。当您像在步骤 2 中那样配置 IIS 时,转发的请求将得到 %25代替网址中的百分比字符。 IIS 将请求转发到代理服务,而不是到达 Gerrit。该服务更改了所有出现的 %25% (解码百分比)并将其转发给 Gerrit。不需要对响应做任何事情。对于那些想要采用这种方式的人,您可以从我在 C# 中简单实现代理开始:

    https://gist.github.com/gralin/b5edfd908a41fc7268a7757698af1e66

    关于IIS 反向代理重新编码包含百分号 (%) 的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22160335/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com