Tomcat’ta maksimum URL uzunluğu nedir?


43

Ve yapılandırılabilir mi? Tomcat'ı, 200K sorgu paragraflı bir URL'nin başarılı bir şekilde içerilen sunucu uygulamasına aktarılması için ayarlayabilir miyim?

Evet, çok fazla bilginiz varsa POST kullanması gerektiğini biliyorum; Bu, bu özel durumda daha az hoş bir seçenek. İçerdiği uygulama (bir arama motoru), arama yapmak için GET isteğinde bulunmayı bekler.

Yanıtlar:


60

Tomcat / conf / server.xml HTTP / 1.1 Bağlayıcı girişini düzenleyebilir ve varsayılan maksimum 8K'dan 64K'a çıkarmak için bir maxHttpHeaderSize = "65536" ekleyebilirsiniz. Bu sayıyı gerektiği kadar yükseltebileceğinizi hayal ediyorum, ancak şu anda ihtiyaç duyduğumda 64K yeterli.

<Connector port="8080" maxHttpHeaderSize="65536" protocol="HTTP/1.1" ... />

3
Çok faydalı, Solr ile olan problemimi çözdüm. Konfigürasyondaki 8192 limitini server.xmlfark etmeden çizdiğimizi ve aniden vurduğumuzu düşünüyoruz. Painful gotcha: hiçbir şey hakkında hiçbir şey kaydedilmedi, bağlantılar sessizce kesildi (artık HTTP Durumunu hatırlamıyorum). Daha önce tomcat.apache.org/tomcat-5.5-doc/config/http.html adresindeki belgelere rastladım , ancak maxHttpHeaderSizeismini ve onun tanımını GET isteği sorgu parametreleriyle de ilişkilendirmekle ilişkilendirmedim.
işareti

Ayrıca Solr'da da aynı limiti çarptık, boş bir beyaz sayfadan başka bir şey değil ... :( The maxHttpHeaderSize hile yaptı
user85116

MaxHttpHeaderSize = "100000" 'nin mümkün olmadığını düşünüyorum, 1024 ile çarpılması gerekiyor. MaxHttpHeaderSize = "1048576"' nın 1024 * 1024 olduğunu değiştirdim ve hala çalışmıyor.

3
Kabul edilen bir cevap, "maxHttpHeaderSize =" 65536 " çalışmıyor Tomcat'taki hata nedeniyle daha önce işe yaradı . URL / URI'nin HTTP Başlıkları ile ilgisi yok.
Fuad Efendi

1
@FuadEfendi şu anda maksimum boyut nedir?
mjaggard

5

Bir HTTP GET isteğinin uzunluğu, Microsoft, IE maksimum uzunluk destek sayfasını bildirdiği için RFC2616 tarafından zorlanmaz .

Bu nedenle, maksimum GET uzunluğu müşteri (tarayıcı) ile ilgili bir konudur . Uygulamanız insanlar tarafından kullanılıyorsa, belirli bir tarayıcıyı kullanmaya zorlayabilirsiniz, o zaman bu tarayıcının desteklediği sürenin ne olduğunu bulabilirsiniz.

Her durumda , Sorgu dizesindeki tarayıcıyla ilgili sorunlar hakkında Wikypedia sayfasına bir göz atmanızı öneririz (isteğin sonunda sunucuda uygulamalar için parametre getiren, "?" Yi izleyen bir istek.

Tabii ki Tomcat de sunucu tarafında bir sınır koyacaktır. RFC diyor ki:

Sunucular hizmet ettikleri herhangi bir kaynağın URI'sini idare edebilmelidir ve bu URI'leri üretebilecek GET tabanlı formlar sağlamaları durumunda sınırsız uzunluktaki URI'leri idare edebilmelidir. Bir URI, sunucunun idare edebileceğinden daha uzunsa, bir sunucu 414 (İstek-URI Çok Uzun) durumuna dönmelidir (bkz. Bölüm 10.4.15).

Böylece, Tomcat'ın bir limiti olup olmadığını kolayca test edebilirsiniz ve bu limitin ne olduğunu, sadece çok uzun bir hata ile başlayan ve bir buçuk oranında azalan farklı istekleri kullanarak öğrendiğinizi görebilirsiniz. Ardından kesin değeri hızlıca bulmak için bisection yöntemini kullanın.


Albert, Tomcat’in kutudan bir sınırı olduğunu biliyordum (8K gibi bir şey); Yapılandırmanın bile üstesinden gelemediği bir sınır olup olmadığını merak ettim.
Michael Gundlach

2

AJP konektörü için, packetSizeniteliği ayarlamanız gerekir :

<Connector port="8009" 
    protocol="AJP/1.3" 
    packetSize="65536" />

1
Mod_proxy kullanıyorsanız ProxyIOBufferSize 65536 , httpd config de ayarlamanız gerekir .
intihar

1

Config'i Tomcat sunucusundan değiştirebilirsiniz (.. \ Tomcat 6.0 \ conf \ server.xml)

<Bağlayıcı bağlantı noktası = "8983" maxHttpHeaderSize = "100000" protokol = "HTTP / 1.1" connectionTimeout = "20000" redirectPort = "8443" />


Bu cevabı kodunuzu formatlayarak ve neden OP sorusunun cevabını açıklayarak geliştirebilirsiniz.
james.garriss 13:18
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.