티스토리 뷰

GET 방식으로 전달되는 파라미터 값에 대한 표준 인코딩 규칙이 정해져 있지 않다.

그래서 WAS마다 GET 방식의 파라미터 값을 읽어올 때 사용하는 기본 charSet도 다르다. 일례로, 톰캣 8은 GET방식으로 전달되는 파라미터 값을 읽어올 때 별다른 설정이 없으면 UTF-8을 사용하지만, 톰캣 7의 경우는 ISO-8859-1을 사용한다. 만약 웹 브라우저가 EUC-KR을 이용해서 GET방식의 파라미터를 인코딩 했다면, 톰캣 8과 톰캣 7은 모두 올바른 파라미터 값을 읽어오지 못한다.

 

위에 언급한것과 같이 톰캣 8 버전에서 GET방식으로 전달된 파라미터 값을 읽어올 때 사용하는 charSet의 기본값이 UTF-8이다. 따라서 GET 방식으로 전송한 파리미터를 UTF-8로만 디코딩한다면, 톰캣 8에 별도 설정을 하지 않아도 된다.

 

하지만, UTF-8이 아닌 다른 charSet을 이용해서 GET 방식의 파라미터를 전송하는 경우가 있다면, 아래와 같은 설정을 추가해주면 된다.

 

● server.xml 파일에서 <Connector>의 useBodyEncodingForURI 속성의 값을 true로 지정하면 된다.

 

<Connector port="8080" protocol="HTTP/1.1"

connectionTimeout="20000"

redirectPort="8443" />

 

위와 같은 server.xml의 default 값에 아래와 같이 속성을 추가하고 값을 설정해준다.

 

<Connector port="8080" protocol="HTTP/1.1"

connectionTimeout="20000"

redirectPort="8443"

useBodyEncodingForURI="true" />

 

useBodyEncodingForURI 속성값을 true로 지정하면 GET 방식으로 전달된 파라미터 값을 읽어올 때 request.setCharacterEncoding() 메서드로 지정한 charSet을 사용한다.

 

참고: https://tomcat.apache.org/tomcat-8.0-doc/config/http.html

댓글