Jaka jest maksymalna możliwa długość ciągu zapytania?


559

Czy to zależy od przeglądarki? Czy różne stosy internetowe mają różne ograniczenia dotyczące ilości danych, które mogą uzyskać z żądania?


możesz również sprawdzić ten stackoverflow.com/questions/417142/...
Xinus,

To jest tylko dla żądań GET! Maksymalny rozmiar żądań POST (z danymi wieloczęściowymi lub bez danych) jest tutaj nieznany!
peterh - Przywróć Monikę

Odpowiedzi:


996

RFC 2616 (Hypertext Transfer Protocol - HTTP / 1.1) stwierdza, że ​​nie ma ograniczenia długości ciągu zapytania (sekcja 3.2.1). RFC 3986 (Uniform Resource Identifier - URI) również stwierdza, że ​​nie ma limitu, ale wskazuje, że nazwa hosta jest ograniczona do 255 znaków z powodu ograniczeń DNS (sekcja 2.3.3).

Chociaż specyfikacje nie określają maksymalnej długości, praktyczne ograniczenia są nakładane przez przeglądarkę internetową i oprogramowanie serwera. Na podstawie badań, które niestety nie są już dostępne na oryginalnej stronie (prowadzi do podejrzanej, pozornej strony pożyczkowej), ale które nadal można znaleźć na stronie Internet Archive Of Boutell.com :

  • Microsoft Internet Explorer (przeglądarka)
    Microsoft stwierdza, że ​​maksymalna długość adresu URL w Internet Explorerze wynosi 2083 znaków, przy czym nie więcej niż 2048 znaków w części adresu URL ścieżki. Próby użycia dłuższych adresów URL spowodowały wyraźny komunikat o błędzie w programie Internet Explorer.

  • Microsoft Edge (przeglądarka)
    Limit wydaje się wynosić około 81578 znaków. Zobacz Ograniczenie długości adresu URL Microsoft Edge

  • Chrome
    Przestaje wyświetlać adres URL po 64 000 znaków, ale może obsłużyć ponad 100 000 znaków. Poza tym nie przeprowadzono żadnych dalszych testów.

  • Firefox (przeglądarka)
    Po 65 536 znakach pasek adresu nie wyświetla już adresu URL w Windows Firefox 1.5.x. Dłuższe adresy URL będą jednak działać. Po 100 000 znaków nie przeprowadzono dalszych testów.

  • Safari (przeglądarka)
    Przynajmniej 80 000 znaków będzie działać. Testy nie były próbowane poza tym.

  • Opera (przeglądarka)
    Przynajmniej 190 000 znaków będzie działać. Przerwano testowanie po 190 000 znaków. Opera 9 dla Windows nadal wyświetlała w pełni edytowalny, kopiowalny i wklejalny adres URL na pasku lokalizacji, nawet przy 190 000 znaków.

  • Apache (serwer)
    Wczesne próby zmierzenia maksymalnej długości adresu URL w przeglądarkach internetowych zderzyły się z limitem długości adresu URL serwera wynoszącym około 4000 znaków, po czym Apache generuje błąd „413 Entity Too Large”. Wykorzystano aktualną kompilację Apache znalezioną w Red Hat Enterprise Linux 4. Oficjalna dokumentacja Apache wspomina o 8192 bajtowym limicie dla pojedynczego pola w żądaniu.

  • Microsoft Internet Information Server (serwer)
    Domyślny limit to 16 384 znaków (tak, serwer internetowy Microsoft akceptuje dłuższe adresy URL niż przeglądarka internetowa Microsoft). To jest konfigurowalne.

  • Perl HTTP :: Daemon (serwer)
    Będzie działać do 8 000 bajtów. Konstruktorzy serwerów aplikacji WWW z modułem Perla HTTP :: Daemon napotkają limit 16 384 bajtów na łączny rozmiar wszystkich nagłówków żądań HTTP. Nie obejmuje to danych formularza POST, przesyłania plików itp., Ale zawiera adres URL. W praktyce powodowało to błąd 413, gdy adres URL był znacznie dłuższy niż 8 000 znaków. To ograniczenie można łatwo usunąć. Poszukaj wszystkich wystąpień 16x1024 w Daemon.pm i zastąp je większą wartością. Oczywiście zwiększa to Twoje narażenie na ataki typu „odmowa usługi”.


8
Dlaczego nie powiesz też numeru wersji zamiast „Microsoft Internet Explorer (przeglądarka)”?
LCJ

5
Wygląda na to, że domyślny limit IIS w ciągu zapytania jest znacznie mniejszy niż 16 384 znaków - cytowany tutaj jako 2048: iis.net/configreference/system.webserver/security/…
JTech


Myślę, że podałeś typ, a ograniczenia DNS są omówione w sekcji „3.2.2. Host” RFC3986, a nie 2.2.3. „Producenci URI powinni używać nazw zgodnych ze składnią DNS, nawet jeśli użycie DNS nie jest od razu widoczne, i powinny ograniczać te nazwy do nie więcej niż 255 znaków.”
Craig Hicks

Przyczyny java.lang.IllegalArgumentException: Request header is too largena serwerze aplikacji Tomcat Spring Boot.
Paramvir Singh Karwal

12

Chociaż oficjalnie nie ma limitu określonego przez RFC 2616, wiele protokołów bezpieczeństwa i zaleceń stanowi, że maxQueryStrings na serwerze powinien być ustawiony na maksymalny limit znaków 1024. Podczas gdy cały adres URL, w tym kwerenda, powinien być ustawiony na maksimum 2048 postacie. Ma to na celu uniknięcie luki w zabezpieczeniach DDOS powolnego żądania HTTP na serwerze WWW. Zazwyczaj pojawia się to jako luka w skanerze aplikacji sieci Web Qualys i innych skanerach bezpieczeństwa.

Zobacz poniższy przykładowy kod dla serwerów Windows IIS z Web.config:

<system.webServer>
<security>
    <requestFiltering>
        <requestLimits maxQueryString="1024" maxUrl="2048">
           <headerLimits>
              <add header="Content-type" sizeLimit="100" />
           </headerLimits>
        </requestLimits>
     </requestFiltering>
</security>
</system.webServer>

Działa to również na poziomie serwera przy użyciu machine.config.

Uwaga: Ograniczenie ciągu zapytania i długości adresu URL może nie całkowicie zapobiec atakowi DDOS z powolnymi żądaniami HTTP, ale jest to jeden krok, który można temu zapobiec.


2
A teraz mam powód, dla którego mogę powiedzieć inżynierom zaplecza, że ​​nie przyjmiemy listy stu 36-znakowych UUID-ów w zapytanieParams żądania GET. Dzięki!
Mordred,

1

Różne stosy sieciowe obsługują różne długości żądań HTTP. Wiem z doświadczenia, że ​​wczesne stosy Safari obsługiwały tylko 4000 znaków i dlatego miały trudności z obsługą stron ASP.net z powodu USER-STATE. Dotyczy to nawet testu POST, więc musisz sprawdzić przeglądarkę i zobaczyć, jaki jest limit stosu. Myślę, że możesz osiągnąć limit nawet w nowszych przeglądarkach. Nie pamiętam, ale jeden z nich (myślę, że IE6) miał limit 16 bitów, 32 768 lub coś takiego.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.