본문 바로가기

CS

[네트워크]GET과 POST의 차이

HTTP란?


  • HTTP는 일종의 프로토콜로 클라이언트와 서버 사이에 요청과 응답 과정을 통해 데이터를 주고 받을 수 있음
  • 클라이언트가 HTTP 프로토콜을 통해 서버에게 요청을 보냄
  • HTTP 요청에 포함되는 HTTP 메소드를 통해 서버가 응답하기 위해 해야 할 행동을 알 수 있음
  • HTTP 요청 메시지는 시작줄-헤더-본문으로 구성되며 시작줄에 첫번째 부분이 메소드
  • 이 HTTP 메소드 중 자주 쓰이는 GET과 POST의 차이점은 무엇일까?

HTTP 요청 메서드

  • 클라이언트 측에서 서버가 리소스에 대해 수행해주길 원하는 동작
  • GET, HEAD, POST, PUT, PATCH 등
  • 요청 메소드의 위치 : HTTP 요청 메세지의 첫째줄

HTTP 메시지의 구분

  • 시작줄(어떤 메시지인지), 헤더 블록(속성), 본문(데이터 내용)

시작줄

  • 요청줄 : <메서드> <요청 URL> <버전>, 공백으로 구분
  • 응답줄 : <버전> <상태 코드> <사유 구절>, 공백으로 구분, 사유구절은 숫자로 된 상태 코드를 사람이 이해할 수 있게 설명해주는 짧은 문구 'OK' 등
  • 상태코드 : 100번대(정보), 200번대(성공), 300번대(리다이렉션), 400번대(클라이언트 에러), 500번대(서버 에러)

헤더

  • 기본적으로 이름/쌍 값의 목록
  • 일반 헤더(클라이언트 서버 모두 사용, 날짜 등), 요청 헤더(받고자 하는 데이터 타입이 무엇인지 등), 응답 헤더(서버 정도를 알려줌), Entity 헤더(본문의 크기와 콘텐츠, 리소스 등 서술), 확장 헤더 등으로 구분
  • 서버가 응답을 한 시간, content-length, type, accept 등

GET

서버로부터 정보를 조회하기 위해 설계된 메소드

  • GET 방식은 데이터를 Body에 담지 않고 HTTP 요청 메시지의 Header 부분의 url에 담겨서 전송됨
  • 때문에 url의 ? 뒤에 데이터가 붙어 request를 보냄(요청 파라미터가 여러 개면 &로 연결)
  • 전송할 수 있는 데이터의 크기가 제한적, 데이터가 그대로 url 에 노출되어 보안이 안 됨
  • GET은 불필요한 요청을 제한하기 위해 브라우저가 요청을 캐시하기도 함
  • 정적데이터 등 변경될 가능성이 적고 크기가 큰 경우 브라우저가 요청을 캐시함
  • HEAD 메서드는 GET처럼 행동하지만 서버는 응답으로 헤더만을 돌려줌

POST

리소스를 생성/변경하기 위해 설계

  • 전송해야될 데이터를 HTTP 메세지의 Body에 담아서 전송
  • 데이터 크기 제한없음 데이터를 전송할 수 있음, GET보다 보안 우수
  • 생성, 수정, 삭제에 사용할 수 있지만 생성에는 POST, 수정은 PUT 또는 PATCH, 삭제는 DELETE가 더 용도에 알맞음

one more thing..