[JSP] GET 방식 전송과 POST 방식 전송

- 웹 브라우저는 GET 방식과 POST 방식 두가지 방식중 하나를 이용해 파라미터를 전송.

 

 

get 방식 지정방법
<form action="주소" method="GET">

GET 방식은 요청 URL에 파라미터를 붙여서 전송하게 된다.

https://sas-study.tistory.com/manage/newpost/?type=post&returnURL=%2Fmanage%2Fposts%2F

현재 글을 쓰고 있는 티스토리 블로그의 주소를 가져와봤다. ?type=post& 부터 파라미터값이다. 이름=값으로 매핑하고 &(앤퍼센트)로 파라미터들을 구분하고 있다.(%기호는 인코딩된 문자열이므로 저 자체가 문자열이라고 보면된다. 실제로 type과 returnURL이라는 파라미터가 넘어온 것이다.)

 

- get 방식은 Query String이라는 문자열로 파라미터를 전송하는 것으로 길이에 제한이 있다. 각각의 환경마다 길이제한은 다르겠지만 어느정도 선이 있다는 것을 알아두길 바란다.

 

- 또한 Post 방식보다는 속도면에서 빠르다고 한다. 파라미터를 어떤 박스에 담아서 보내는 것이 POST 방식이라면 박스를 포장하는 단계가 없는 GET 방식이 더 빠르지 않을까...? (개발자가 이렇게 말해도 되는지는 모르겠다...)

 

post 방식 지정 방법
<form action="주소" method="POST">

 

요청 파라미터와 인코딩

웹 브라우저는 웹 서버에 파라미터를 전송할 때 지정된 캐릭터 셋을 이용해서 파라미터값을 인코딩하는 과정을 거친다. 반대로 웹서버는 지정된 캐릭터셋을 이용해서 브라우저가 보낸 파라미터 데이터를 디코딩하는 과정을 거친다.

 

두개의 과정중 하나라도 어긋나게되면...?

>> 다음과 같은 한글이 깨진다라는 현상을 보게 될 것이다.

 

어떤 캐릭터셋을 사용할 지는 두 전송방식에 따라 달라진다.

 

Post 방식

- 입력 폼을 보여주는 응답화면이 사용하는 캐릭터셋 사용. 즉, 페이지 상단에 ContentType에 있는 charset값에 따라 인코딩하게 된다. 따라 인코딩한다. 그리고 도착하는 페이지의 charset이 출발 페이지와 같아야 한다.

- request객체의 setCharacterEncoding("캐릭터셋"); 을 이용해서 파라미터를 디코딩할 수도 있다. 만약 setCharacterEncoding() 메소드로 지정하지 않을 경우는 ISO-8859-1 인코딩 방식을 기본으로 한다.

String name = request.getParameter("name");
request.setCharaterEncoding("utf-8");
String address = request.getParameter("address");

//name 파라미터는 setCharacterEncoding 이전에 파라미터를 받았기 때문에 기본 인코딩셋인 ISO-8859-1인코딩을 적용받는다.
//address 파라미터는 utf-8인코딩셋에 적용 받아 파라미터를 받아오게 된다.
//이렇게 순서를 고민해보면서 파라미터를 받아야 한다.

 

Get 방식

- Get방식은 쿼리 스트링형식으로 파라미터를 전달하기 때문에 웹 브라우저 종류에 영향을 많이 받게 된다.

- 크롬과 IE의 파라미터 인코딩 방식부터가 다르다. 크롬은 UTF-8이고 IE는 MS949 이다.

- HTTP 표준에는 GET 방식으로 전달되는 파라미터 값을 인코딩할 때 어떤 인코딩방식을 사용할 지에 대한 규칙이라는 것이 정의되어 있지는 않다. 그렇기 때문에 브라우저마다 다른 인코딩 셋을 사용하게 되는 것이다.

 

주의

- POST 방식은 파리미터를 데이터 영역으로 전달하므로 setCharacterEncoding 메소드에 의해서 지정한 인코딩방식이 적용된다. 하지만 Get 방식은 쿼리스트링 형식으로 브라우저를 통해 전송되기 때문에 setCharacterEncoding메소드에서 지정한 인코딩 방식이 적용되지 않는다.

- 하지만 GET 방식도 server.xml 파일에 <Connector> 태그의 useBodyEncodingForURI 속성의 값을 true로 해두면 setCharacterEncoding 메소드를 이용해서 GET방식의 파라미터 인코딩 방식을 지정할 수 있다.

 

GET, POST 방식에 대해서 쉽게 쓰여져 있는 블로그를 같이 공유하고자 합니다.

https://mommoo.tistory.com/m/60

댓글

Designed by JB FACTORY