HTTP 400 錯誤要求(要求標頭過長)回應 HTTP 要求

當需要 Kerberos 驗證的超文字傳輸通訊協定(HTTP)要求從瀏覽器傳送至 Microsoft Internet information Services (IIS)所主控的網站,且設定為使用 Kerberos 驗證時,本文會協助您解決 HTTP 400 錯誤。

原始產品版本:  Windows Server 2016
原始 KB 編號:  2020943

徵狀

需要 Kerberos 驗證的 HTTP 要求會從瀏覽器傳送至 IIS 所主控的網站。 網站已設定為使用 Kerberos 驗證。 不過,您會收到類似下列的錯誤訊息,而不是接收預期的網頁:

HTTP 400-錯誤要求(要求標頭過長)

任何包含 Windows Remote Management (WinRM)的 HTTP 要求都可能會產生此回應。

原因

如果使用者是許多 Active Directory 使用者群組的成員,可能會發生此問題。

對伺服器的 HTTP 要求包含標頭中的 Kerberos 權杖 WWW-Authenticate 。 標頭大小會隨著使用者群組數目增加。如果 HTTP 標頭或封包大小已增加伺服器上設定的限制,則伺服器可能會拒絕要求並傳送錯誤訊息作為回應。

解決方法1:減少 Active Directory 群組的數目

減少使用者所屬之 Active Directory 群組的數目。

解決方法2:設定 MaxFieldLength 和 MaxRequestBytes 登錄專案

增加 MaxFieldLength MaxRequestBytes 伺服器上的和登錄專案設定,讓使用者的要求標題不會超過這些值。若要判斷適當的設定,請使用下列計算:

  1. 使用當使用者屬於許多群組時,kerberos 驗證發生問題所述的公式,計算使用者 kerberos 權杖的大小。

  2. 將  MaxFieldLength MaxRequestBytes 伺服器上和的值設為 4/3 * T 位元組,其中 T 是使用者的權杖大小(以位元組為單位)。HTTP 使用 base64 編碼對 Kerberos 權杖進行編碼。

    注意

    這會以四個 base64 編碼的位元組取代標記中的每三個位元組。重新開機 HTTP 服務後,對登錄所做的變更才會生效。 此外,您可能必須重新開機任何相關的服務,例如 IIS 服務。

根據您的應用程式環境,您也可以將網站設定為使用 Windows NT LAN Manager (NTLM)而非 Kerberos,以解決此問題。 不過,某些應用程式環境需要 Kerberos 驗證才能用於委派。我們認為 Kerberos 驗證的安全性高於 NTLM。 因此,建議您不要停用 Kerberos 驗證,再考慮執行這項作業的安全性和委派。

詳細資訊

根據預設,沒有  MaxFieldLength 登錄專案。 此專案指定每個 HTTP 要求標頭的大小上限。 MaxRequestBytes登錄專案會指定要求行和標頭的總大小上限。 一般來說,此登錄專案會與 MaxRequestBytes 登錄專案一起設定。 如果 MaxRequestBytes 值小於 MaxFieldLength 值,則 MaxFieldLength 會調整此值。在大型的 Active Directory 環境中,如果這兩個專案的值未設定為足夠的高值,使用者可能會遇到登入失敗。

針對 IIS 6.0 和更新版本, MaxFieldLength and 登錄機 MaxRequestBytes 碼位於下列子機碼:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters

如下表所示,設定機碼值:

名稱 值類型 值資料
 MaxFieldLength  DWORD  (4/3 * T 個位元組) + 200
 MaxRequestBytes  DWORD  (4/3 * T 個位元組) + 200

您也可以將登錄機碼設為最大值,如下表所示。 若使用者對登錄設定進行任何變更,您應該考慮所有潛在的安全性影響。

名稱 值類型 值資料
 MaxFieldLength  DWORD  65536(Dec)或10000(十六進位)
 MaxRequestBytes  DWORD  16777216(Dec)或100000(十六進位)

重要

變更這些登錄機碼應視為非常危險。 這些金鑰可讓您將較大的 HTTP 封包傳送至 IIS。 這反過來會導致 Http.sys 使用更多記憶體。 因此,這類變更可增加電腦遭受惡意攻擊的弱點。

如果 MaxFieldLength 設定為 64 KB 的最大值,則登錄 MaxTokenSize 值應設定為 3/4 * 64 = 48 KB。如需有關設定的詳細資訊 MaxTokenSize ,請參閱當使用者屬於許多群組時,Kerberos 驗證發生問題

參考