일단 GET과 POST의 차이를 보기 전에 GET
은 무엇이고 POST
는 무엇일까?
먼저 두 가지 모두 HTTP Method
중 일부이며 HTTP란 Hypertext Transfer Protocol의 줄임말로 하이퍼텍스트 전송 규약이라고 직역할 수 있다.
즉, 클라이언트와 서버 간의 통신 규약으로 보면 된다.
HTTP Method는 아래의 종류가 있다.
이렇게 있으며 그 중 가장 보편적으로 사용되는 method는 GET과 POST이다.
이번 글에서는 가장 보편적으로 활용되는 GET과 POST의 차이를 알아보려고 한다.
GET은 클라이언트에서 서버로 어떠한 리소스 정보를 요청하기 위해 사용되는 method로 우리가 인터넷을 한다면 누구나 GET요청을 할 수 있다.
바로 인터넷 브라우저를 사용해서 URL을 직접 입력해 특정 사이트를 찾아 들어가는 것이다.
예시) GET /test/demo_form.php?name1=value1&name2=value2
GET 요청은 아래와 같은 특징을 지니고 있다.
- 캐시 될 수 있다.
- 브라우저 히스토리에 남는다.
- 북마크 될 수 있다.
- 민감한 정보는 절대 담아선 안됀다.
- 요청 할 때 길이의 제한이 있다.
- 데이터를 요청 할 때만 사용된다.
금지되어있는 것은 아니지만 GET요청에 본문이나 페이로드가 담겨있으면 의미가 정의되지 않아 기존에 존재하는 구현체에게 요청을 거부 당할 수 있어 이러한 이유로 GET요청에는 무언가 내용을 담는 것은 적절하지 않다.
POST는 클라이언트에서 서버로 리소스를 생성하거나 업데이트 하기 위해 데이터를 보낼 때 사용되는 method이다. URL에 내용물이나 변수들을 노출시키지 않고 BODY에 담아서 보내기 때문에 보안성을 갖추고 있다.
예시) POST /test/demo_form.php HTTP/1.1
Host: w3schools.com
name1=value1&name2=value2
POST 요청은 아래와 같은 특징을 지니고 있다.
- 캐시가 절대 되지 않는다.
- 브라우저 히스토리에 남지 않는다.
- 북마크 될 수 없다.
- 데이터의 길이 제한이 없다.
특 징 | GET | POST |
---|---|---|
URL에 데이터 노출여부 | O | X |
가시성 | URL에 모든 데이터가 보여짐 | URL에 노출되지 않음 |
URL예시 | http://localhost:8080/test/demo_form.php?name1=value1&name2=value2 | http://localhost:8080/test/demo_from.php |
데이터의 위치 | Header(헤더) | Body(바디) |
캐싱 가능 여부 | O | X |
인코딩 타입 | application/x-www-form-urlencoded | application/x-www-form-urlencoded or multipart/form-data |
보안성 | URL에 노출되고 브라우저 히스토리에도 남기에 민감한 정보는 절대 GET요청을 통해 보내지 말것! | GET요청에 비해 노출되는 URL에 노출되는 것 없이 Body에 담겨 가기 때문에 보안성은 GET에 비해 우수 |