일단 쉽게 말하자면 Get은 가져온다는 개념이고 , Post는 수행한다는 개념이다 생각하면 쉽다.
즉,
GET
method는 클라이언트에서 서버로 어떠한 리소스로부터 정보를 요청하기 위해 사용되는 메서드이다.
좀 더 쉽게 말하자면, 데이터를 읽거나(Read) 검색(Retrieve)할 때에 사용되는 method라고 할 수 있다.
GET은 요청을 전송할 때 URL 주소 끝에 파라미터로 포함되어 전송되며, 이 부분을 쿼리 스트링(QueryString)이라고 부른다.
www.test.com/resources?name1=테스터&name2=테스터2
name1
,name2
를 통해 값을 전달받을 수 있다. 만약, 요청 파라미터가 여러개이면 &
로 연결한다.그리고 GET
요청은 오로지 데이터를 읽을 때만 사용되고 수정할 때는 사용하지 않는다. 따라서 데이터 변형 없이 사용할 수 있기에 안전하다고 간주된다.
POST
method는 리소스를 생성/업데이트 하기 위해 서버에 데이터를 보내는 데 사용된다.
GET
과 달리 전송해야될 데이터를 HTTP메세지의 Body에 담아서 전송한다.
그리고 그 BODY의 타입은 요청 헤더의 Content-Type
에 요청 데이터의 타입을 표시 따라 결정된다.
(POST로 요청을 보낼때는 해야한다)
HTTP메세지의 Body는 기리의 제한없이 데이터를 전송할 수 있따. 그래서 POST요청은 GET과 달리 대용량 데이터를 전송할 수 있다.
이처럼 POST는 데이터가 Body로 전송되고, 내용이 눈에 보이지 않아 GET보다 보안적인 면에서 안전하다고 생각할 수 있지만, POST요청도 크롬의 개발자 도구,Fiddler와 같은 툴로 요청 내용을 확인할 수 있기 때문에 민감한 데이터의 경우에는 반드시 암호화해 전송해야 한다.
GET과 POST의 리소스 전달 방식의 차이를 설명한 사진
연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질 이란 뜻으로 즉, 동일한 연산을 여러 번 수행하더라도 동일한 결과가 나타나야 한다.
GET
은 idempotent, POST
는 Non-idempotent하게 설계되었다.
여기서 GET
이 idempotent하도록 설계 되었다는 것은 GET
으로 서버에게 동일한 요청을 여러번 전송하더라도 동일한 응답이 돌아와야 한다는 것을 의미한다. 이에 따라 GET
은 설계 원칙에 따라 서버의 데이터나 상태를 변경시키지 않아야 idempotent하기 때문에 주로 조회를 할 때 사용해야 한다.
예를 들어, 브라우저에서 웹페이지를 열어보거나 게시글을 읽는 등 조회를 하는 행위는 GET
으로 요청하게 된다.
반대로 POST
는 Non-impotent하기 때문에 서버에게 동일한 요청을 여러 번 전송해도 응답은 항상 다를 수 있다.
이에 따라 POST
는 서버의 상태나 데이터를 변경시킬 때 사용한다.
게시글을 쓰면 서버에 게시글이 저장이 되고, 게시글을 삭제하면 해당데이터가 없어지는 등 POST
로 요청을 하게 되면 서버의 무언가는 변경되도록 사용된다. 이처럼 POST
는 생성, 수정, 삭제에 사용할 수 있지만, 생성에는 POST
, 수정은PUT
또는 PATCH
, 삭제는 DELETE
가 더 용도에 맞는 method이다.