1.4GET과 POST
HTTP 요청에서 GET과 POST의 차이점과 특징 비교
TL;DR
개요
GET
과 POST
는 둘 다 HTTP 메소드로, 클라이언트에서 서버에 데이터를 요청할 때 사용한다. 단순히 GET
은 정보를 받아오기 위해, POST
는 정보를 생성/업데이트하기 위해 사용한다고 알고 있을 수 있지만 이 둘은 그것보다 많은 차이가 있다.
1. 데이터 전송 방식
GET
은 요청할 때 필요한 데이터를 쿼리 스트링으로 전송한다.
파라미터에 내용이 노출되기 때문에, 민감한 데이터는 GET
으로 요청하면 안된다.
반면, POST
는 전송할 데이터를 HTTP 메시지의 Body에 담아서 전송한다. 따라서 URL이나 브라우저 주소창에 노출되지 않는다. 또, 길이 제한이 없고 단순한 문자열이 아닌 구조화된 데이터(JSON등)를 담기에도 적절하다.
2. 브라우저 히스토리
GET
요청은 브라우저 히스토리에 남아, 뒤로가기/새로고침이 된다. 또, URL만으로 요청을 재현할 수 있기에 북마크도 쉽고 캐싱도 기본적으로 된다.
POST
는 브라우저 히스토리에 남지 않는다. 또, 요청 본문(Body)을 포함하므로 새로고침 시 브라우저가 "데이터를 다시 보낼지" 묻는다.
3. 멱등성(idempotent)
멱등이란, 연산을 여러번 적용하더라도 결과가 달라지지 않는 성질이다.
GET
은 멱등하다. 즉, 여러번 조회해도 결과가 같다.
POST
는 멱등하지 않다. 같은 요청을 여러번 보내면 데이터가 중복 생성될 수도 있다. 따라서, 서버에서 어떤 동작이 한번만 수행되어야 하는 경우 POST를 쓴다면 신중하게 처리해야 한다.
4. 보안
GET
은 URL에 데이터를 담기 때문에 브라우저 히스토리, 서버 로그, 북마크, 프록시 등 여러 곳에 기록된다. 보안에 취약한 것이다.
POST
는 body에 데이터를 담아 보내므로 안전한 편이나, 암호화가 되는 것은 아니므로 HTTPS가 아니라면 여전히 데이터가 노출될 수 있다.