Недопустимый http-запрос (слишком длинный заголовок запроса) в CLM

Эта статья поможет устранить проблему, из-за которой на портале CLM возникает ошибка неправильного запроса http.

Оригинальная версия продукта: службы IIS
Исходный номер базы знаний: 955585

Симптомы

Вы не можете выполнить все операции на портале CLM. Может возникнуть следующая проблема:

  • Если в интернет-Обозреватель включены понятные сообщения об ошибках HTTP, ошибки HTTP 400 будут возвращены в ответ на веб-запросы, отправляемые на сервер служб IIS.

  • Если в Интернет-Обозреватель отключены понятные сообщения об ошибках HTTP, пользователю возвращается следующее сообщение об ошибке:

    Недопустимый запрос (слишком длинный заголовок запроса)

Причина

HTTP-запрос, отправляемый на сервер IIS, имеет заголовок запроса, превышающий допустимую длину заголовка запроса, настроенную на сервере IIS. В частности, заголовок Authorization содержит большой билет проверки подлинности Kerberos. Билет Kerberos очень велик, так как пользователь является членом многих групп в Active Directory.

В целях безопасности компонент HTTP.sys на сервере IIS отклоняет входящий HTTP-запрос, так как он превышает настроенные ограничения по размеру.

Разрешение

Настройте разделы MaxFieldLength реестра HTTP и MaxRequestBytes на сервере IIS, чтобы разрешить большие размеры заголовков запросов.

Важно!

Изменение этих разделов реестра считается чрезвычайно опасным. Увеличение значений этих ключей приведет к тому, что HTTP.sys будет использовать больше памяти и может повысить уязвимость к вредоносным атакам. Если изменение этих ключей является единственным вариантом, не устанавливайте их значения больше, чем они должны быть. Сведения об определении размера заголовков запросов и, следовательно, о том, какое значение следует задать для разделов реестра, см. далее в этой статье.

Определение размера HTTP-запроса

Чтобы определить фактический размер HTTP-запроса, может быть полезно использовать трассировку сетевого монитора. С помощью этой трассировки можно вычислить размер HTTP-запроса и сравнить его с параметром на сервере IIS.

Кроме того, полезно обратиться к журналу ошибок HTTP.sys.

Расположение: %windir%\system32\logfiles\HTTPERR\httperrX.log

Ключ к решению этой конкретной проблемы заключается в том, чтобы показать, что CLM пытается отправить HTTP-запрос на сервер, который больше значения по умолчанию 16 кб или больше настраиваемого параметра в их MaxFieldLength и MaxRequestBytes. Для этого используйте сочетание:

  1. Трассировка сетевого монитора
  2. Просмотр журнала ошибок http.sys, расположенного в %windir%\system32\logfiles\HTTPERR\httperrX.log.

Пример записи из httperrX.log:

date time c-ip c-port s-ip s-port cs-version cs-method cs-uri sc-status s-siteid s-reason s-queuename 2007-04-12 07:37:51 10.201.25.27 1682 10.248.10.65 80 HTTP/1.1 GET /clm 400 — RequestLength

Wireshark

  1. Найдите кадр, который отправляет инструкцию HTTP Get
  2. Просмотрите вкладку в правом нижнем углу экрана WireShark с заголовком Reassembled TCP , и номер рядом с этим номером будет иметь размер повторно собираемого HTTP-запроса.