Tomcat의 최대 URL 길이는 얼마입니까?


43

그리고 그것은 구성 가능합니까? 검색어 매개 변수가 200K 인 URL이 포함 된 서블릿으로 성공적으로 전달되도록 Tomcat을 설정할 수 있습니까?

예, 많은 데이터가있을 때 POST를 사용해야한다는 것을 알고 있습니다. 이 특별한 경우에는 덜 유쾌한 옵션입니다. 포함 된 애플리케이션 (검색 엔진)은 GET 요청이 검색을 수행 할 것으로 예상합니다.

답변:


60

tomcat / conf / server.xml의 HTTP / 1.1 커넥터 항목을 편집하고 maxHttpHeaderSize = "65536"을 추가하여 기본 최대 8K 정도에서 64K로 증가시킬 수 있습니다. 필자는이 숫자를 필요한만큼 높일 수 있다고 생각하지만 64K는 현재 내 요구에 충분하므로 시도하지 않았습니다.

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

3
매우 유용하며 Solr 관련 문제를 해결했습니다. 우리는 server.xml구성 의 기본 8192 제한을 알지 못하고 갑자기 긁은 것처럼 보입니다 . 고통스러운 문제 : 아무것도 기록되지 않았으며 연결이 자동으로 끊어졌습니다 (더 이상 HTTP 상태를 기억하지 않습니다). 이전 에 tomcat.apache.org/tomcat-5.5-doc/config/http.html 의 문서를 우연히 발견 했지만 maxHttpHeaderSizeGET 요청 쿼리 매개 변수 자체와 관련이있는 이름이나 설명으로 연결하지 않았습니다 .
Mark

우리는 또한 Solr에서도 같은 한계에 도달했습니다. 빈 흰색 페이지 만 있습니다 ... :( maxHttpHeaderSize가 트릭을 수행했습니다.
user85116

maxHttpHeaderSize = "100000"은 불가능하다고 생각합니다. 1024를 곱해야합니다. 1024 * 1024 인 maxHttpHeaderSize = "1048576"을 변경했지만 여전히 작동하지 않습니다.

3
허용되는 답변 "maxHttpHeaderSize ="65536 " 이 작동하지 않습니다 . Tomcat 의 버그 로 인해 이전에 작동 했습니다 . URL / URI는 HTTP 헤더와 관련이 없습니다.
Fuad Efendi

1
@FuadEfendi 그러면 최대 크기는 얼마입니까?
mjaggard

5

Microsoft가 IE 최대 길이 지원 페이지에 대해보고 한 것처럼 RFC2616 에서는 HTTP GET 요청 길이를 적용하지 않습니다 .

따라서 최대 GET 길이는 클라이언트 (브라우저) 관련 문제 입니다. 사람들이 앱을 사용하는 경우 특정 브라우저를 사용하도록 강요하면이 브라우저가 지원하는 길이를 간단히 찾을 수 있습니다.

모든 경우에 나는 쿼리 문자열 (서버 쪽 앱에 매개 변수를 가져 오는 요청 부분, 결국 "?"다음에 오는 요청)에 대한 브라우저 관련 문제에 대해 Wikypedia 페이지를 살펴볼 것을 제안합니다 .

물론 바람둥이는 서버 쪽에서도 한계를 둘 것입니다. RFC는 말합니다 :

서버는 서비스를 제공하는 모든 리소스의 URI를 처리 할 수 ​​있어야하며, 이러한 URI를 생성 할 수있는 GET 기반 양식을 제공하는 경우 무제한 길이의 URI를 처리 할 수 ​​있어야합니다. 서버가 처리 할 수있는 것보다 URI가 긴 경우 서버는 414 (Request-URI Too Long) 상태를 반환해야합니다 (섹션 10.4.15 참조).

따라서 Tomcat에 한계가 있는지 쉽게 테스트하고 오류가 발생하고 절반으로 내려가는 매우 긴 요청으로 시작하는 다른 요청을 사용 하여이 한계가 무엇인지 알아낼 수 있습니다. 그런 다음 이분법을 사용하여 정확한 값을 빠르게 찾으십시오.


앨버트, 나는 Tomcat이 8K와 같은 제한을 가지고 있음을 알고 있었다. 심지어 구성조차도 극복 할 수없는 한계가 있는지 궁금했습니다.
Michael Gundlach

2

AJP 커넥터의 경우 packetSize속성 을 조정해야 합니다.

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

1
mod_proxy를 사용하는 경우 ProxyIOBufferSize 65536 httpd 구성에서도 설정해야합니다 .
자살

1

Tomcat 서버에서 구성을 변경할 수 있습니다 (.. \ Tomcat 6.0 \ conf \ server.xml)

<커넥터 포트 = "8983"maxHttpHeaderSize = "100000"protocol = "HTTP / 1.1"connectionTimeout = "20000"redirectPort = "8443"/>


코드를 형식화하고 왜 OP 질문에 대답하는지 설명하면이 답변을 개선 할 수 있습니다.
james.garriss
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.