프로젝트를 진행하면서 GET이나 POST로 요청 할 때 데이터를 받아오는데 지장이 없었어서 별차이가 없을거라 생각했습니다. 하지만 이 두 메서드는 확고한 차이가 있었고 RESTful한 API를 설계하기 위해선 HTTP메서드에 대한 명확한 이해가 필요했습니다. 그래서 이 두가지 메서드의 차이를 정리 해보고자 합니다.
우선 GET & POST요청은 대표적인 HTTP메서드이다. 클라이언트에서 서버로 자원을 요청 할 때 사용한다.
GET은 지정된 리소스에서 데이터를 요청하는 데 사용됩니다.
쉽게 말해 데이터를 읽거나, 조회, 검색 할 때 사용하는 메서드입니다.
GET은 요청을 전송 할 때 URL 주소 끝에 파라미터로 포함되어 전송되며, 이부분을 쿼리 스트링(QueryString)이라고 부릅니다.
/test/demo_form.php?name1=value1&name2=value2
쿼리 문자열(이름/값 쌍)은 GET 요청의 URL로 전송됩니다.
⭕ GET요청 참고 사항!
GET 요청을 캐시할 수 있습니다.
GET 요청은 브라우저 기록에 남아 있습니다.
GET 요청을 북마크할 수 있습니다.
GET 요청은 민감한 데이터를 처리할 때 사용해서는 안 됩니다.
GET 요청에는 길이 제한이 있습니다.
GET 요청은 데이터를 요청하는 데만 사용됩니다(수정 아님).
POST요청은 생성 및 업데이트하기 위해 서버에 데이터를 보내는데 사용합니다. GET과 달리 데이터를 HTTP메세지의 Body에 담아서 전송합니다. 그리고 그 Body의 타입은 요청 헤더의 Content-Type에 요청 데이터의 타입 표시에 따라 결정 됩니다. 이처럼 POST는 데이터가 Body로 전송되고, 눈에 보이지 않아 GET보다는 보안적인면에서 안전 할 수 있습니다.
⭕ POST요청 참고 사항!
POST 요청은 캐시되지 않습니다
POST 요청은 브라우저 기록에 남아 있지 않습니다.
POST 요청은 북마크할 수 없습니다.
POST 요청에는 데이터 길이에 대한 제한이 없습니다.
연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질을 멱등이라고 하는데 GET요청은 서버에게 동일한 요청을 여러번 전송하더라도 돌아오는 응답값은 변하지 않습니다. 그래서 GET은 멱등성을 가지고 있으며 반대로 POST는 데이터의 상태를 변경시킬 수 있어 멱등성을 가지고 있지 않습니다.
⚫ keyword 정리
🔴 GET은 QueryString, POST는 Body
🔴 GET은 먹등성(Idempotent), POST는 비먹등성(Non-idempotent)
https://www.w3schools.com/tags/ref_httpmethods.asp
https://ideveloper2.tistory.com/61
https://velog.io/@songyouhyun
https://noahlogs.tistory.com/35