기능 구현 배우는 것에만 신경쓰다보니 정말 기본적인 부분들을 놓치고 있었던 것 같다. 오늘은 헷갈리던 GET과 POST의 차이점 정리!
GET과 POST는 HTTP메서드로 클라이언트에서 서버로 무언가를 요청할 때 사용한다.
GET은 클라이언트에서 서버로 어떠한 리소스로부터 정보를 요청하기 위해 사용되는 메서드이다. 예를 들면 게시판의 게시물을 조회할 때 쓸 수 있다.
GET을 통한 요청은 URL주소 끝에 파라미터로 포함되어 전송되며, 이 부분을 쿼리 스트링 (query string)이라고 부른다. 방식은 URL 끝에 "?"를 붙이고 그 다음 변수명1=값₩&변수명2=값2... 형식으로 이어 붙인다.
예를 들어 다음과 같은 방식이다.
www.example.com/show?name1=value1&name2=value2
서버에서는 name1과 name2라는 파라미터명으로 각각 value1과 value2의 파라미터 값을 전달 받을 수 있다.
GET 요청은 캐시가 가능하다.
: GET을 통해 서버에 리소스를 요청할 때 웹 캐시가 요청을 가로채 서버로부터 리소스를 다시 다운로드하는 대신 리소스의 복사본을 반환한다. HTTP헤더에서 cache-control 헤더를 통해 캐시 옵션을 지정할 수 있다.
GET 요청은 브라우저 히스토리에 남는다.
GET 요청은 북마크 될 수 있다.
GET 요청은 길이 제한이 있다.
: GET 요청의 길이 제한은 표준이 따로 있는 건 아니고 브라우저마다 제한이 다르다고 함.
GET 요청은 중요한 정보를 다루면 안된다. (보안)
: GET 요청은 파라미터에 다 노출되어 버리기 때문
GET은 데이터를 요청할 때만 사용된다.
POST는 클라이언트에서 서버로 리소스를 생성하거나 업데이트하기 위해 데이터를 보낼 때 사용되는 메서드이다. 예를 들면 게시판에 게시글을 작성하는 작업 등을 할 때 사용된다.
POST는 전송할 데이터를 HTTP 메시지 body부분에 담아서 서버로 보낸다. (body의 타입은 Content-Type헤더에 따라 결정된다.) GET에서 URL의 파라미터로 보냈던 name1=value1&name2=value2 가 body에 담겨 보내진다 생각하면 된다.
POST로 데이터를 전송할 때 길이 제한이 따로 없어 용량이 큰 데이터를 보낼 때 사용하거나 GET처럼 데이터가 외부적으로 드러나는 건 아니라서 보안이 필요한 부분에 많이 사용된다. (하지만 데이터를 암호화하지 않으면 body의 데이터도 결국 볼 수 있는 건 똑같다.)
POST를 통한 데이터 전송은 보통 HTML form을 통해 서버로 전송된다.
https://hongsii.github.io/2017/08/02/what-is-the-difference-get-and-post/