I czy można to skonfigurować? Czy mogę skonfigurować Tomcat, aby adres URL zawierający, powiedzmy, 200 000 par zapytań został pomyślnie przesłany do zawartego serwletu?
Tak, wiem, że należy używać POST, gdy masz dużo danych; w tym konkretnym przypadku jest to mniej przyjemna opcja. Zawarta aplikacja (wyszukiwarka) oczekuje żądania GET w celu wykonania wyszukiwania.
server.xml
konfiguracji, nie zauważając go i nagle go osiągnęliśmy. Bolesna gotcha: nic nie zostało z tego powodu zarejestrowane, połączenia zostały po cichu zerwane (nie pamiętam już statusu HTTP). Wcześniej natknąłem się na dokumentację na tomcat.apache.org/tomcat-5.5-doc/config/http.html , jednak nie skojarzyłemmaxHttpHeaderSize
jej z nazwą ani opisem, aby była powiązana z samymi parametrami zapytania żądania GET.Długość żądania GET HTTP nie jest wymuszana przez RFC2616 , ponieważ Microsoft zgłasza swoją stronę wsparcia dla maksymalnej długości IE .
Zatem maksymalna długość GET to problem związany z klientem (przeglądarką) . Jeśli Twoja aplikacja jest używana przez osoby, możesz zmusić ją do korzystania z danej przeglądarki, możesz po prostu znaleźć długość obsługiwaną przez tę przeglądarkę.
W każdym przypadku proponuję zajrzeć na stronę Wikypedia w sprawie problemów związanych z przeglądarką w ciągu zapytania (część żądania zawierająca parametry aplikacji po stronie serwera, ta po znaku „?” Ostatecznie pojawiająca się w żądaniu.
Oczywiście może tomcat też nałoży limit, po stronie serwera. RFC mówi:
dzięki czemu możesz łatwo przetestować, czy Tomcat ma limit i dowiedzieć się, jaki jest ten limit, po prostu używając różnych żądań, zaczynając od bardzo długiego zgłaszającego błąd i zmniejszającego się o połowę. Następnie użyj metody bisekcji, aby szybko znaleźć dokładną wartość.
źródło
W przypadku złącza AJP musisz dostosować
packetSize
atrybut:źródło
ProxyIOBufferSize 65536
w konfiguracji httpd.Możesz zmienić konfigurację na serwerze Tomcat (.. \ Tomcat 6.0 \ conf \ server.xml)
<Port złącza = „8983” maxHttpHeaderSize = protokół „100000” = „HTTP / 1.1” connectionTimeout = „20000” redirectPort = „8443” />
źródło