Mam sytuację, w której rozmiar nagłówek żądania autoryzacji HTTP jest więcej niż 64 KB (około 90 kB) dla określonego użytkownika. Powodem dużej wielkości jest dlatego, że nagłówek zawiera token na okaziciela, a użytkownik, który zainicjował żądanie HTTP ma wiele roszczeń.

Problem polega na tym, że dla tego konkretnego użytkownika serwer WWW zawsze zwraca błąd stwierdzający:

"HTTP Error 400. The size of the request headers is too long".

Aplikacja internetowa jest hostowana w aplikacji konsoli za pomocą Microsoft Owin, więc IIS nie jest zaangażowany.

Patrząc w ten problem, natknąłem się na następujący dokument. Oznacza to maksymalna wartość dla maxfieldlength jest 64 KB, która oznacza maksymalną długość nagłówka obsługiwanego przez http.sys, a mój serwer jest ustawiony na maksymalną wartość I, E 65 536.

Próbowałem zwiększyć wartość dalej do 131 072 z ciekawości, ale zgodnie z oczekiwaniami nie rozwiązała problemu.

Czy jest jakiś inny sposób na zwiększenie maksymalnej długości nagłówka?

1
Durga Prasad 10 luty 2021, 15:45

2 odpowiedzi

Najlepsza odpowiedź

Po uświadomieniu sobie, że nie ma możliwego rozwiązania z serwera HTTP.SYS w celu zwiększenia limitu rozmiaru poza podanym maksimum, wdrożono następujące rozwiązanie w celu przezwyciężenia problemu w ręku.

Zastrzeżenie: jest bardziej obejście niż odpowiednie rozwiązanie.

Utwórz nową wersję (V2, ponieważ są one łamanie zmian) istniejących kontrolerów o następujących zmianach:

  • Konwertuj każdą prośbę do żądania pocztowego i przekazać odpowiednie parametry zapytań jako parach kluczowych w korpusie żądania.
  • Dodaj dodatkowy klucz "access_token" W każdym korpusie żądania z wartością bearer token do obsługi autoryzacji. Ignorowane do niezabezpieczonych punktów końcowych.
  • Zaktualizuj dokumentację i poinformuj wszystkich użytkowników końcowych o zmianach wykonanych z przykładami przejrzystymi.
  • Udekoruj starej wersji z "Deprecated" tag.
0
Durga Prasad 12 marzec 2021, 14:14

Spotkałem go i rozwiązałem, zwiększając limity ustawione w rejestrze. (Otwórz polecenie i regedit typu).

Miałeś jednak modyfikować MaxFieldLength, jednak również musisz modyfikować MaxRequestBytes, jak jest podana w Dokumentacja:

Obejście 2: Ustaw wpisy rejestru maxfieldlength i maxrequestbytes:

Domyślnie nie ma wpisu rejestru maxfieldlength. Ten wpis określa maksymalny limit rozmiaru każdego nagłówka żądania HTTP. Wpis rejestru MAXREQUESTBYTES Określa górną granicę całkowitego rozmiaru linii żądania i nagłówków. Zazwyczaj ten wpis rejestru jest skonfigurowany wraz z wpisem rejestru MAXREQUESTBYTES.

Jeśli wartość MaxRequestbytes jest niższa niż wartość maxfieldLength, Wartość maxfieldlength jest regulowana . W dużym Active Directory Środowiska, użytkownicy mogą doświadczyć awarii logowania, jeśli wartości dla Oba te wpisy nie są ustawione na wystarczająco wysoką wartość.

Musisz dodać / zmodyfikować te wpisy w:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters 

W przypadku IIS 6.0, a następnie klawisze rejestru maxfieldlength i maxrequestbytes znajdują się przy następnym podsumowaniu: HKEY_LOCAL_MACHINE System CurrentControlset Usługi HTTP Parametry

0
Antonin GAVREL 21 luty 2021, 05:04