[Issue] Error Parsing HTTP request header ~ / The valid characters...

[Issue] Error Parsing HTTP request header ~ / The valid characters...

728x90

반응형

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

스프링부트 설정

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

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

728x90

반응형

from http://jackjeong.tistory.com/163 by ccl(A) rewrite - 2021-12-17 10:01:54