본문 바로가기
IBM - old/WAS 문제&해결

Ajax post 방식을 사용하고 있는데 Content-Length 에 비해 보다 작은 body 가 들어오거나 body 가 잘못 들어오는 경우

by freeman98 2016. 5. 30.

1. WAS 버전 : IBM WAS All

2. OS : All

3. Error 발생 시점 : request 의 body 가 firewall 등에 의해서 잘리거나 잘못들어온 경우 or
     Ajax post 방식을 사용하고 있는데 Content-Length 에 비해 보다 작은 body 가 들어오거나 body 가 0 인 경우
     IHS 의 Timeout 값인 300 초를 기다린 후에 IO 관련 Timeout 발생

4. Error message :                   
SRVE0133E: An error occurred while parsing parameters. java.io.IOException: post body contains less bytes than specified by content-length
at com.ibm.ws.webcontainer.servlet.RequestUtils.parsePostData(RequestUtils.java:521)
at com.ibm.ws.webcontainer.srt.SRTServletRequest.parseParameters(SRTServletRequest.java:789)
at com.ibm.ws.webcontainer.srt.SRTServletRequest.getParameter(SRTServletRequest.java:412)

5. 예상 이유 :
  주로 Browser 의 이슈(특히 IE7 or 8) 이거나 Network 방화벽등이 Body 를 제대로 Web Server 로 전달하지 못하는 경우에 발생
  특히, Timeout 후에 client 는 200 code 를 return 받고 Content-length : 0 이 들어와서 error handling 도 어려움

6. 조치 방안:
  근본적인 원인은 Browser 의 버그등을 해결하여 올바르게 HTTP body 를 보내주는 것이나 해결이 쉽지 않으므로
  다음과 같은 대안을 사용가능

  IBM HTTP Server 6.1.0.41, 7.0.0.21, 8.0.0.2 and later 에서 mod_reqtimeout 모듈을 사용 가능
 (단, 내부 plugin bug 가 있어서 7.0.0.25  이상의 fixpack 필요, 6.1 과 8.0  도 최신 fixpack 필요해 보임)

  IBM HTTP Server(웹서버) 차원에서 RequestReadTimeout 을 사용하여 body 가 잘못들어온 경우에 빠르게 Timeout 을 발생시키고
  정상적인 400 Bad Requets error code 를 client 에 return 하여 정상적인 handiling 을 가능하도록 할수 있음

참고:
http://serverfault.com/questions/432932/how-to-debug-apache-timeouts
http://publib.boulder.ibm.com/httpserv/manual60/mod/mod_reqtimeout.html
http://www-01.ibm.com/support/docview.wss?uid=swg1PM44816

댓글