2013-07-09 5 views
3

POST에서 큰 AJAX 요청을 Spring MVC를 통해 보내려고 시도하고 있습니다. 요청에는 표에서 선택한 행의 ID를 나타내는 데이터가 들어 있습니다.AJAX 요청이 Spring MVC에서 잘린 경우

POST /foo/view? HTTP/1.1 
Host: localhost:8443 
Connection: keep-alive 
Content-Length: 618953 
Accept: text/html, */*; q=0.01 
Origin: https://localhost:8443 
X-Requested-With: XMLHttpRequest 
Content-Type: application/x-www-form-urlencoded; charset=UTF-8 
Referer: https://localhost:8443/ 
Accept-Encoding: gzip,deflate,sdch 
Accept-Language: en-US,en;q=0.8 

폼 데이터 selections 부호화 포함 : 요청 N은 약 30,000 같은 것을 보인다

selection=1 selection=2 selection=... selection=n

에 매핑 된 제어 방법 이 요청을 처리하는 데 다음과 같이 주석을 달았습니다 :

@RequestMapping(method = RequestMethod.POST, value = "/foo/view") 
public void controllerMethod(User user, @ModelAttribute CustomModelMap inModel, BindingResult result) { 
... 
} 

여기서 CustomModelMap에는 선택 항목을 컬렉션에 매핑하기위한 접근 자/변경자가 포함되어 있습니다.

내가으로 실행하고 문제는 최대한 빨리 컨트롤러를 명중 한, ModelMap 만 9,997 선택 (요청이 9,997 개 이상의 항목이 포함 된 경우가 항상이 수의)로 채워져 있다는 것입니다. 저는 실제로 AJAX 요청을 세 번 확인해 보았습니다. 실제로 AJAX 요청은 3 만 개가 넘었습니다.

웹 서버가 요청 헤더의 많은 양의 데이터를 좋아하지 않는다고 생각했지만, 요청은 약 600k이지만 Tomcat은 기본적으로 POST에 최대 2MB를 허용하는 것으로 보입니다.

내가 확인할 수있는 아이디어가 있습니까?

+2

GET 요청을 하시겠습니까? 그것들은 웹 서버에 따라 변하는 URL에 한계가 있습니다. POST 요청의 본문에 그 값을 넣는 것은 그러나 작동해야합니다. – thatidiotguy

+0

그가 사용하는 URL을 기반으로하는 @thatidiotguy는 GET처럼 보입니다. 이것은 대답 일 가능성이 높습니다. 그것을 하나 만들어라. 그러면 나는 당신에게 upvote를 줄 것이다. – digitaljoel

+0

또한 http://stackoverflow.com/questions/2659952/maximum-length-of-http-get-request – digitaljoel

답변

1

GET 요청을하는 경우 HTTP 서버/응용 프로그램 서버에 종속 된 URL의 길이에 제한이 있습니다. 이 요청을 형식으로 인코딩 된 POST 요청으로 변경하고 해당 정보를 본문에 저장하면 문제를 피할 수 있습니다.

+0

죄송합니다. 내 컨트롤러 메소드 주석만으로는 명확하지 않지만 요청 유형은 현재 POST입니다. –

+0

@BenSiver 그런 다음 URL에 정보를 전달하고 있습니까? content-type으로'application/x-www-form-urlencoded'을 사용하고 그 정보를 HTTP 본문에 넣어야합니다. – thatidiotguy

+0

content-type은 현재 application/x-www-form-urlencoded로 설정되어 있으며 정보는 인코딩 된 양식 데이터로 전달됩니다. 이 질문을 포함하도록 내 질문을 편집 할 것입니다. 원래 문제를 단순화 할 것이라고 생각했지만 중요 할 수도 있습니다. :) –

0

관심이있는 분들은 잠시 동안 Spring MVC에서 디버깅을했고 내 요청이 잘린 부분을 정확히 찾을 수 없었습니다. 루트 Tomcat 요청 처리기에서 내 요청의 잘린 버전을받은 것으로 보입니다. 일부 웹 서버 설정으로 인해 전체 요청이 전송되지 않을 수 있습니다.

내 솔루션은 단순히 콘텐츠 유형을 JSON으로 변경하고이를 처리하도록 요청 처리를 변경했습니다. 이상적은 아니지만 작동합니다.