https://atoz-develop.tistory.com/entry/HTTP-GET-%EB%A9%94%EC%86%8C%EB%93%9C%EC%99%80-POST-%EB%A9%94%EC%86%8C%EB%93%9C%EC%9D%98-%EB%B9%84%EA%B5%90
1. GET
GET 요청의 특징
- URL에 데이터를 포함하여 데이터 조회에 적합하다.
- 바이너리 및 대용량 데이터 전송이 불가하다.
- 요청 라인과 요청 헤더에 최대 크기 제한이 있다.
- 대용량 URL로 인한 문제가 발생하기 때문에 웹 서버에 따라 최대 크기를 제한한다.
GET 요청의 종류
-
웹 브라우저 주소창에 URL을 입력하는 경우
ex) 'GET http://www.daum.net/ HTTP/1.1'
-
링크를 클릭하는 경우
- HTML의 < a > 태그는 GET 요청을 만들기 때문에 링크를 클릭할 때 GET으로 요청한다.
- 입력 폼의 method 속성값이 get인 경우
GET 요청의 데이터 전달 형식
GET으로 요청하는 경우 서버에 보낼 데이터는 URI에 붙인다.
ex)
http://localhost:8080/web/CalculatorServlet?v1=1&op=%2B&v2=1
- ? : URI와 보낼 데이터를 구분
- & : 데이터들을 구분
- = : 매개변수 이름과 값을 구분
GET의 사용
- 자료 검색
- 게시글 조회
- 특정 상품의 정보 조회
와 같이 데이터를 조회하는 경우에 적합하다.
GET 요청 매개변수 인코딩
GET 요청은 매개변수 값이 URI에 포함되기 때문에 서블릿 컨테이너의 지침에 따라 URI의 인코딩을 설정해야 한다.
톰캣 서버에서 URI 인코딩을 설정하려면 server.xml을 열고 <Connector>
에 URIEncoding="UTF-8"을 추가한다.
GET의 문제점과 개선방안
-
보안 문제
GET 요청은 주소창에 사용자가 입력한 정보가 그대로 노출된다.
-
바이너리 데이터 전송 불가
이미지, 동영상 같은 바이너리 파일의 데이터는 URL에 붙여서 보낼 수 없다. 데이터를 인코딩해도 URI나 헤더 정보가 너무 크면 웹 서버에서 처리할 수 없기 때문에 불가능하다.
2. POST
POST 요청의 특징
- URL에 데이터가 포함되지 않아 외부에 노출되지 않는다.
- 메시지 본문에 데이터를 포함한다.
- 바이너리 및 대용량 데이터 전송이 가능하다.
POST 요청 매개변수 인코딩
ServletRequest.setCharacterEncoding() 사용