CS공부/네트워크

[네트워크/웹] HTTP GET과 POST

이숭간 2021. 7. 17. 10:55
728x90

둘다 HTTP프로토콜상에서 무언가를 요청할때 사용하는 방식이다. 하지만 둘의 특성과 생겨난 배경은 엄연히 다르므로 제대로 이해하고 기술목적에 맞게 적재적소에 사용해야 한다.

GET

  • 언제 사용하는가?
    • 단순히 서버의 데이터를 조회하는 경우
    • 서버의 값이나 상태를 변경하지 않는다.
    • SELECT적 특성
  • 요청 데이터를 어떻게 보내는가?
    • uri에 포함해서 보낸다. (?을 통한 PathVariable)
    • 노출이 쉬워 보안이 필요한 데이터의 요청에선 사용하지 않는게 좋다.
  • 멱등
    • 서버에게 여러번 요청을 하더라도 동일한 응답이 돌아와야 한다는 개념 (안전하다)
    • Ex) 여러번 요청해도 안전하다! 요청이 제대로 수행되지 않았다 하더라도 멱등한 요청은 여러번 그냥 보내서 해결할수있음, 계좌송금(post)과같은경우 안전하지 않으므로 여러번 요청하면 안된다.

 

POST

  • 언제 사용하는가?
    • 서버의 값이나 상태를 변경하기 위해
    • 서버의 새로운 자원을 추가하기 위해
    • INSERT, UPDATE, DELETE
  • 요청데이터를 어떻게 보내는가?
    • HTTP 요청메세지의 Body부분에 포함해서 전송
    • Request Header의 Content-Type에 Body의 타입을 나타내는 값이 들어간다.
      • Default: application/octet-stream
      • 단순 txt의 경우: text/plain
      • 파일의 경우: multipart/form-date

 

추가적인 차이점

  • POST의 가장큰 특징은 요청측에서 리소스의 경로를 모른다는것이다. POST 요청에 의해서 새로운 리소스가 생기고 이로인해 자원의주소가 생기기 때문이다. 반면 GET방식은 요청시점에 리소스의 주소를 알고있다.
  • GET 요청은 브라우저에서 캐싱할 수 있다. 때문에 POST로 보내야할것인데 간단고 보안도 필요없으니까~ 하면서 GET으로 보내면 기존에 캐싱된 데이터가 응답될 가능성이 존재함
  • GET방식의 경우 HTTP 패킷의 Body는 비어 있는 상태로 전송한다. 즉, Body의 데이터 타입을 표현하는 'Content-Type' 필드도 HTTP Request Header에 들어가지 않는다.

출처: https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/Network#http의-get과-post-비교