GET, POST 방식의 차이점

Ouroboros·2023년 11월 28일
0

네트워크

목록 보기
16/20

GET은 클라이언트가 서버에서 어떤 리소스의 정보를 요청하기 위해 사용한다.
POST는 서버에 어떤 리소스를 생성하거나 수정하기 위해 데이터를 보낼 때 사용한다.
GET은 SELECT, POST는 CREATE, UPDATE에 가깝다.



GET

GET은 서버에 정보를 요청하기 위해 사용한다.
게시판을 조회할 때 GET을 쓴다고 생각하면 이해하기 쉽다.
GET을 통해서 요청할 때는 URL 끝에 '?'을 붙이고 파라미터를 넣어 전송한다.
이 부분을 쿼리스트링(Query String)이라고 한다.

www.songsong.com/show?name1=value1&name2=value2

서버는 value1과 value2라는 파라미터를 전달받는다.

  • GET 요청은 캐시가 가능하다. 클라이언트가 서버에 리소스 정보를 요청하면, 캐시가 그 요청을 가로채서 리소스를 반환할 수 있다. 이때 리소스는 서버로부터 다시 다운 받은 리소스가 아닌 복사본이다.
    이러한 과정은 이미지, CSS, JS 등과 같은 정적 컨텐츠를 요청할 때 많이 사용한다. 정적컨텐츠는 데이터 양이 크고 변경될 가능성도 적기 때문이다. 따라서 캐시에 저장해두고 GET 요청이 들어오면 리소스를 반환한다. 하지만 정적컨텐츠가 변경되면 캐시로 인해 내용이 변경되지 않을 수 있다. 따라서 이때는 캐시를 지워야하며, 지운 후 GET요청을 하면 서버에 요청이 전송된다.
    캐시 옵션은 HTML헤더의 cache-control에서 조정할 수 있다.

  • GET요청은 브라우저 히스토리에 남는다.

  • GET요청을 북마크할 수 있다.

  • GET요청에는 길이 제한이 있다. 길이 제한에 표준은 없고 브라우저마다 GET요청에 따른 길이 제한이 다르다.

  • GET요청은 보안에 취약하다. GET 요청을 하면 파라미터가 모두에게 보여지기 때문에 중요한 정보를 요청할 때에는 GET 요청을 자제해야 한다.



POST

POST는 클라이언트가 리소스를 생성하거나 업데이트할 때 서버에 보내는 메소드이다.
게시판에서 글을 생성하거나 수정할 때 사용한다고 생각하면 쉽다.
POST 방식은 전송할 데이터를 HTML의 BODY에 담아서 보낸다. 암호화하지 않으면 볼 수 있기는 하지만 외부적으로 그 정보가 드러나지는 않는다. 따라서 보안이 필요한 부분에 POST 방식이 많이 사용된다.

  • POST 요청은 GET과 달리 캐시되지 않는다.
  • POST 요청은 브라우저 기록에 남지 않는다.
  • POST 요청은 북마크할 수 없다.
  • POST 요청은 데이터 길이의 제한이 없다.



GET과 POST 차이

위에서 살펴보았듯이 GET은 서버에 리소스의 정보를 요청할 때, POST는 클라이언트가 데이터를 생성, 업데이트 후 서버에 전송할 때 사용한다는 차이가 있다.
또한 GET는 URL에 파라미터를 담아 보내기 때문에 HTML에 BODY 부분이 없다. 반면 POST는 HTML의 BODY 부분에 정보를 담아 서버에 보낸다.
두 개의 다른 차이점은 멱등성에 있다. 멱등성이란 연산을 여러번 하더라도 결과가 변하지 않는 것을 의미한다.
GET요청은 리소스를 조회하는 것이기 때문에 몇 번을 요청하더라도 결과는 똑같다. 즉 GET요청은 멱등한 성질을 가지고 있다. 그러나 POST요청은 서버의 상태나 데이터를 변경시킨다. 게시글을 생성하거나 삭제하면서 데이터를 없애는 등에 쓰이는 POST 요청은 서버에 무언가는 변경시킨다. 따라서 POST요청은 멱등하지 않다.
참고로 POST 요청은 생성, 수정, 삭제 모두 가능하지만 생성에는 POST, 수정은 PUT 또는 PATCH, 삭제는 DELETE 가 더 용도에 맞는 메소드라고 할 수 있다.
마지막으로, GET의 HTTP 응답 코드는 200(Ok)이고 POST의 HTTP 응답코드는 201(Created)이다.

참고자료

1) https://noahlogs.tistory.com/35
2) https://whales.tistory.com/120

0개의 댓글