What's the maximum URL length in Tomcat?

108,039

Solution 1

You can edit tomcat/conf/server.xml's HTTP/1.1 Connector entry, and add a maxHttpHeaderSize="65536" to increase from the default maximum of 8K or so, to 64K. I imagine that you could up this number as high as necessary, but 64K suffices for my needs at the moment so I haven't tried it.

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

Solution 2

The length of an HTTP GET request is not enforced by RFC2616, as Microsoft reports for its IE max length support page.

So, the maximum GET length is a client (browser) related issue. If your app is used by people you can force to use a given browser then you can simply find what is the length this browser support.

In every case I suggest a look to the Wikypedia page about those browser related issues on the Query string (the part of the request bringing parameters for server side apps, the one following the "?" eventually present in a request.

Of course maybe tomcat will put a limit too, on the server side. RFC says:

Servers MUST be able to handle the URI of any resource they serve, and SHOULD be able to handle URIs of unbounded length if they provide GET-based forms that could generate such URIs. A server SHOULD return 414 (Request-URI Too Long) status if a URI is longer than the server can handle (see section 10.4.15).

so you can easily test if Tomcat has a limit and find out what this limit is simply using different requests starting with a very long one giving the error and going down by one half. Then use bisection method to fast find the exact value.

Solution 3

For AJP connector, you need to adjust the packetSize attribute:

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

Solution 4

You can change the config at Tomcat server ( ..\Tomcat 6.0\conf\server.xml )

< Connector port="8983" maxHttpHeaderSize="100000" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" />
Share:
108,039

Related videos on Youtube

Michael Gundlach
Author by

Michael Gundlach

Updated on September 17, 2022

Comments

  • Michael Gundlach
    Michael Gundlach over 1 year

    And is it configurable? Can I set up Tomcat so that a URL with, say, 200K of query params goes through successfully to the contained servlet?

    Yes, I know one should use POST when you have lots of data; that's a less pleasant option in this particular case. The contained application (a search engine) expects a GET request to perform a search.

    • Walfrat
      Walfrat about 3 years
      For those that wonder, I actually have the problem of a 12k long WMS Url.
  • Michael Gundlach
    Michael Gundlach over 14 years
    Albert, I was aware that Tomcat had a limit out of the box (something like 8K); I wondered if there were a limit that even configuration could not overcome.
  • mark
    mark about 14 years
    Very useful, solved my problem with Solr. Seems we were scratching on the default 8192 limit in the server.xml config, without noticing, and suddenly hit it. Painful gotcha: nothing nowhere was logged about that, the connections were silently dropped (I don't recall the HTTP Status anymore). I stumbled over the documentation at tomcat.apache.org/tomcat-5.5-doc/config/http.html before, however I didn't associate the maxHttpHeaderSize by its name nor its description to be related to the GET request query parameters itself too.
  • user85116
    user85116 over 11 years
    We also just hit the same limit in Solr, nothing but a blank white page... :( The maxHttpHeaderSize did the trick.
  • Fuad Efendi
    Fuad Efendi over 8 years
    An accepted answer, "maxHttpHeaderSize="65536" does not work It worked before because of bug in Tomcat. URL/URI has nothing to do with HTTP Headers.
  • suicide
    suicide almost 7 years
    If you are using mod_proxy you need to set ProxyIOBufferSize 65536 in your httpd config too.
  • Mireodon
    Mireodon almost 6 years
    @FuadEfendi what IS the maximum size now then?
  • james.garriss
    james.garriss over 5 years
    You could improve this answer by formatting your code and explaining why it answer's OP question.
  • Fuad Efendi
    Fuad Efendi almost 4 years
    Original question was "what is the maximum size of URL". HTTP protocol doesn't have "URL"; instead, it has "host" part, and "method" (which could be GET, POST, PUT, etc.); if you need huge method use POST which doesn't have any limitations. Server implementations are vendor-specific. Tomcat v.8 uses 2 megabytes for POST (default; but you can configure it 'unlimited'); and 8 kilobytes for GET (default). When you need 'unlimited' POST? For example, if you submit huge HTML FORM with a lot of key-value pairs.
  • Kasun Siyambalapitiya
    Kasun Siyambalapitiya over 2 years
    @FuadEfendi let's say I am in a scenario where the type of method cannot be changed from GET to POST. In an event like above, is there any way to configure the max URL lengh in tomcat?