빨간색코딩

tomcat에서 PUT, DELETE request body 파싱 문제 본문

Java

tomcat에서 PUT, DELETE request body 파싱 문제

빨간색소년 2018. 4. 1. 19:29

1. 문제상황

HTTP 메소드 DELETE로 request body를 이용하여 spring 컨트롤러에 요청을 쐈는데, 파라미터가 전부 null 로 넘어가는 것이 아닌가?? 띠용?

2. 문제점

tomcat의 문제라고 한다. tomcat은 request body를 POST 일때만 파싱하고 있었다.

코드까보기

  • 톰캣버전 : 8.0.48 (로컬 윈도우에 깔린거)
  • 경로 : org.apache.catalina.connector.Connector.java
  • 관련 코드
    • 76라인 : 생성자호출에서 this.parseBodyMethods = "POST";

    • 196~212라인 : getter, setter 메소드

        public String getParseBodyMethods() {
            return this.parseBodyMethods;
        }
      
        public void setParseBodyMethods(String methods) {
            HashSet<String> methodSet = new HashSet();
            if (null != methods) {
                methodSet.addAll(Arrays.asList(methods.split("\\s*,\\s*")));
            }
      
            if (methodSet.contains("TRACE")) {
                throw new IllegalArgumentException(sm.getString("coyoteConnector.parseBodyMethodNoTrace"));
            } else {
                this.parseBodyMethods = methods;
                this.parseBodyMethodsSet = methodSet;
            }
        }
      
  • 이해 : POST만 디폴트로 초기화하고, server.xml 에서 parseBodyMethods="POST,DELETE" 이런식으로 넣어줘야 set되겠다.

동일이슈

마찬가지로 PUT 도 requestBody에 넣으면 못알아먹는다.

DELETE의 스펙이해

https://stackoverflow.com/questions/299628/is-an-entity-body-allowed-for-an-http-delete-request

애초에 delete 메소드에 request body 로 넘기는 것이...ㅠㅠ

3. 해결

톰캣서버 server.xml 에 추가 <Connector parseBodyMethods="POST,PUT,DELETE" />

Comments