IIS не удается перенаправить / переписать без замены;от & (пытаясь избежать этого) - PullRequest
0 голосов
/ 29 января 2019

Я использую IIS8 в Windows Server 2012 R2 в качестве обратного прокси-сервера HTTPS для моего микросервиса JAVA.

Я ожидаю получить координаты в URL.IIS переписывает точку с запятой ';'на '&', и мой микросервис не работает.

Если я смотрю журналы, когда я вызываю свой микросервис напрямую, я получаю это:

10.0.0.36 - - [28/Jan/2019:09:12:19 +0000] "GET /myTransform.json?outSrs=epsg:3857&points=2.324456,48.798607;-0.609223,49.093723;2.324456,48.798607;-0.609223,49.093723 HTTP/1.1" 200 236

Если я прохожу через IIS, я получаю это:

10.0.0.36 - - [28/Jan/2019:09:12:57 +0000] "GET /myTransform.json?outSrs=epsg%3A3857&points=2.324456%2C48.798607&-0.609223%2C49.093723=&-0.609223%2C49.093723=&2.324456%2C48.798607= HTTP/1.1" 200 98

вот мой Web.config:

<configuration>
<system.web>
<compilation targetFramework="4.5.2" />
<httpRuntime targetFramework="4.5.2" maxUrlLength="500" />
</system.web>
<system.webServer>
<rewrite>
<allowedServerVariables>
<add name="HTTP_X_FORWARDED_HOST" />
<add name="HTTP_X_FORWARDED_SCHEMA" />
<add name="HTTP_X_FORWARDED_PROTO" />
</allowedServerVariables>
</rewrite>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE,OPTIONS" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
</customHeaders>
</httpProtocol>
<modules runAllManagedModulesForAllRequests="true" />
<rewrite>
<rules>
<rule name="HTTP/S to HTTPS Redirect" enabled="true" stopProcessing="true">
<match url="(.*)" />
<conditions logicalGrouping="MatchAny">
<add input="{SERVER_PORT_SECURE}" pattern="^0$" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" />
</rule>
<rule name="Reverse Proxy to my microservice" stopProcessing="true">
<match url="(.*)" />
<action type="Rewrite" url="http://localhost:18443/{R:1}" />
<serverVariables>
<set name="HTTP_X_FORWARDED_HOST" value="{HTTP_HOST}" />
<set name="HTTP_X_FORWARDED_SCHEMA" value="https" />
<set name="HTTP_X_FORWARDED_PROTO" value="https" />
</serverVariables>
</rule>
</rules>
<outboundRules>
<rule name="Add Strict-Transport-Security when HTTPS" enabled="true">
<match serverVariable="RESPONSE_Strict_Transport_Security" pattern=".*" />
<conditions>
<add input="{HTTPS}" pattern="on" ignoreCase="true" />
</conditions>
<action type="Rewrite" value="max-age=31536000; includeSubDomains; preload" />
</rule>
</outboundRules>
</rewrite>
<security>
<requestFiltering>
<requestLimits maxQueryString="32768" />
<requestFiltering allowDoubleEscaping="true" />
</requestFiltering>
</security>
<handlers>
<add name="httpPlatformHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified" />
</handlers>
<proxy enabled="true" preserveHostHeader="true" reverseRewriteHostInResponseHeaders="false" />
</system.webServer>
</configuration>

Как я могу попросить IIS переслать запрос URI как есть, не перекодируя его?

С наилучшими пожеланиями,

...