IIS Bad Request для сайта, настроенного с перезаписью URL с ARR - PullRequest
0 голосов
/ 15 мая 2019

У меня есть веб-сайт, созданный под IIS 8.0 в Windows 2012. На этом сайте создана перезапись URL-адреса с ARR, которая указывает на машину linux (в основном на веб-службу, развернутую в Tomcat), и через IIS будет выполняться запрос «GET», где URL превышает более 5000 символов вместе со строкой запроса. При обращении к URL-адресу через программу или в браузере IIS выдает «Неверный запрос» с кодом состояния, равным 400, и без кода подстатуса. То же самое работает, когда он напрямую попадает в веб-сервис (для tomcat Linux). Я подозревал, что проблема заключается в избыточных символах в URL, потому что, когда я пытаюсь уменьшить длину URL-адреса до 3500 символов, это работает без каких-либо ошибок. Ниже приведены настройки и параметры, которые я пробовал в IIS web.config, а также в реестре http.sys, но, похоже, ничего не работает.

<configuration>
    <system.webServer>
        <security>
            <requestFiltering allowDoubleEscaping="true">
                <requestLimits maxAllowedContentLength="4294967295" maxUrl="10999" maxQueryString="2097151">
                    <headerLimits>
                        <add header="Content-Type" sizeLimit="100000000" />
                    </headerLimits>
                </requestLimits>
            </requestFiltering>
        </security>
        <urlCompression doDynamicCompression="false" />
    </system.webServer>
    <system.web>
        <httpRuntime maxRequestLength="8192" maxUrlLength="8192" maxQueryStringLength="8192" requestPathInvalidCharacters="" />
    </system.web>
</configuration>

http.sys Настройки реестра

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters\MaxFieldLength - DWORD - 65534
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters\MaxRequestBytes - DWORD - 16777216
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters\UrlSegmentMaxCount - DWORD - 16383
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters\UrlSegmentMaxLength - DWORD - 32766

Я перезагружал сервер Windows после выполнения всех вышеуказанных настроек и настроек.

Эти параметры и конфигурация соблюдаются IIS без перезаписи URL. Если я попробую другой URL с длиной 5000 символов для того же сайта, он работает без каких-либо ошибок. Это появляется только для URL, который попал под конфигурацию перезаписи URL. Существуют ли какие-либо конкретные конфигурации, которые необходимо выполнить в отношении длины URL в ARR, помимо вышеупомянутого? Пожалуйста, предложите и помогите. Заранее спасибо.

1 Ответ

0 голосов
/ 06 июня 2019

Ответ на мой вопрос.

Проблема была на стороне Linux Tomcat, а не на IIS, в журналах catalina.out было указано следующее

INFO: Error parsing HTTP request header
 Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.
java.lang.IllegalArgumentException: Request header is too large

Я добавил конфигурацию maxHttpHeaderSize= "65536" в файле server.xml tomcat / conf.После внесения изменений эта проблема была решена.

...