sungyup's.

Web_Miscellaneous / 기초 개념 / 1.4 GET과 POST

1.4GET과 POST

HTTP 요청에서 GET과 POST의 차이점과 특징 비교

TL;DR

개요

GETPOST는 둘 다 HTTP 메소드로, 클라이언트에서 서버에 데이터를 요청할 때 사용한다. 단순히 GET은 정보를 받아오기 위해, POST는 정보를 생성/업데이트하기 위해 사용한다고 알고 있을 수 있지만 이 둘은 그것보다 많은 차이가 있다.

1. 데이터 전송 방식

GET은 요청할 때 필요한 데이터를 쿼리 스트링으로 전송한다.

www.example.com/resources?name1=value1&name2=value2

파라미터에 내용이 노출되기 때문에, 민감한 데이터는 GET으로 요청하면 안된다.

반면, POST는 전송할 데이터를 HTTP 메시지의 Body에 담아서 전송한다. 따라서 URL이나 브라우저 주소창에 노출되지 않는다. 또, 길이 제한이 없고 단순한 문자열이 아닌 구조화된 데이터(JSON등)를 담기에도 적절하다.

2. 브라우저 히스토리

GET 요청은 브라우저 히스토리에 남아, 뒤로가기/새로고침이 된다. 또, URL만으로 요청을 재현할 수 있기에 북마크도 쉽고 캐싱도 기본적으로 된다.

POST는 브라우저 히스토리에 남지 않는다. 또, 요청 본문(Body)을 포함하므로 새로고침 시 브라우저가 "데이터를 다시 보낼지" 묻는다.

3. 멱등성(idempotent)

멱등이란, 연산을 여러번 적용하더라도 결과가 달라지지 않는 성질이다.

GET은 멱등하다. 즉, 여러번 조회해도 결과가 같다.

POST는 멱등하지 않다. 같은 요청을 여러번 보내면 데이터가 중복 생성될 수도 있다. 따라서, 서버에서 어떤 동작이 한번만 수행되어야 하는 경우 POST를 쓴다면 신중하게 처리해야 한다.

4. 보안

GET은 URL에 데이터를 담기 때문에 브라우저 히스토리, 서버 로그, 북마크, 프록시 등 여러 곳에 기록된다. 보안에 취약한 것이다.

POST는 body에 데이터를 담아 보내므로 안전한 편이나, 암호화가 되는 것은 아니므로 HTTPS가 아니라면 여전히 데이터가 노출될 수 있다.