본문 바로가기
Issue

[Issue] Error Parsing HTTP request header ~ / The valid characters are defined in RFC 7230 and RFC 3986 해결

by 잭피 2021. 12. 17.

The valid characters are defined in RFC 7230 and RFC 3986

Error parsing HTTP request header
Note: further occurrences of HTTP request parsing errors will be logged at DEBUG level.
The valid characters are defined in RFC 7230 and RFC 3986

로그에서 위와 같은 에러가 발견되었다

서버에러가 아니라 APM에서는 발견되지 않았다

확인해보니 클라이언트쪽에서 GET 방식으로 호출할 때, 특수문자로 인해 발생한 이슈였다

 

SpringBoot는 내장 톰캣을 사용하는데,

톰캣 7 특정버전 이상부터 파라미터 값에 특수문자를 받을 수 없도록 수정되었다고 한다

(RFC 3986 규격이 적용됨)

 

해결방법

1. 클라이언트쪽에서 호출할 때, 인코딩을 해서 보냄

ex) 프론트쪽에서 호출할 때, encodeURI(param)을 사용

 

2. relaxedQueryChars 옵션을 주어 특수문자를 허용하도록 설정 (권장하는 방식은 아님)

(톰캣 공식홈페이지에서 relaxedQueryChars를 검색)

https://tomcat.apache.org/tomcat-8.5-doc/config/http.html

 

Apache Tomcat 8 Configuration Reference (8.5.73) - The HTTP Connector

This Connector supports all of the required features of the HTTP/1.1 protocol, as described in RFCs 7230-7235, including persistent connections, pipelining, expectations and chunked encoding. If the client supports only HTTP/1.0 or HTTP/0.9, the Connector

tomcat.apache.org

스프링부트 설정

@Configuration
public class TomcatWebCustomConfig implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> {

    @Override
    public void customize(TomcatServletWebServerFactory factory) {
        factory.addConnectorCustomizers((TomcatConnectorCustomizer)
                connector -> connector.setAttribute("relaxedQueryChars", "<>[\\]^`{|}"));
    }
}

 

3. 톰캣을 하위 버전으로 다운그레이드

댓글