GET방식과 POST방식의 차이

솜솜이·2023년 3월 31일
0

네트워크

목록 보기
12/21

get방식이든 post방식이든 둘 다 브라우저가 서버에 요청하는 것이다.

GET 방식

GET method는 클라이언트에서 서버로 어떠한 리소스로 부터 정보를 요청하기 위해 사용되는 메서드입니다. 데이터를 읽거나(Read), 검색(Retrieve)할 때에 사용되는 method

GET 요청을 할 때는 Body 부분은 비어있고 헤더에 Body의 콘텐츠 타입을 명시하는 Content-Type 헤더 필드도 적지 않다. 아래와 같이 URL뒤에 쿼리 스트링(Key와 Value)을 붙이고 HTTP 패킷의 헤더에 포함해서 서버에 데이터를 요청한다.

http://localhost:3000/login?id=admin&pw=1234

URL의 "?" 뒤에서부터 쿼리 스트링으로 데이터를 표현하는데 사실 중요한 값들이 노출되기 때문에 실제 사이트에서 ID와 PW와 같은 정보들에 GET 방식을 이용하면 보안에 문제가 생기게 된다. GET 방식 경우에는 브라우저마다 글자 수 제한이 있기 때문에 게시판의 게시물, 목록 조회와 같은 간단한 데이터 요청할 때 적합합니다. 그리고 캐싱이 가능하므로 속도가 빠르다.

GET 특징

  • GET 불필요한 요청을 제한하기 위해 요청이 캐시가 가능하다.
    • GET을 통해 서버에 리소스를 요청할 때 웹 캐시가 요청을 가로채 서버로부터 리소스를 다시 다운로드하는 대신 리소스의 복사본을 반환한다. HTTP 헤더에서 cache-control 헤더를 통해 캐시 옵션을 지정할 수 있다.
  • URL에 쿼리 스트링(데이터)을 붙여서 서버에 전송
  • 데이터를 Header(헤더)에 포함하여 전송
  • URL에 정보들이 그대로 노출되기 때문에 POST 방식보다 상대적으로 보안에 취약
  • POST 방식보다 상대적으로 전송 속도가 빠름
  • 전송하는 데이터양에 한계가 있음 (브라우저마다 GET 요청 길이 제한 존재)
  • 브라우저 히스토리에 기록이 남는다.
  • GET 요청을 북마크에 추가할 수 있다.

캐싱(Caching)이란?
캐싱이란 한번 접근 후 또 요청할 시 빠르게 접근하기 위해 레지스터에 데이터를 저장시켜 놓는 것

POST 방식

POST method은 클라이언트가 서버로 데이터를 전송해 리소스를 추가하거나 생성하기 위해 사용되는 Method

POST 요청 시 HTTP 패킷의 헤더에 Body의 콘텐츠 타입을 명시하는 Content-Type 헤더 필드를 포함하고 HTTP 패킷의 Body에는 데이터를 담아서 서버로 전송한다.

http://localhost:3000/login

POST 방식은 GET 방식과 다르게 데이터들이 URL에 표시되지 않고 HTTP 패킷 Body에 담겨 서버로 데이터가 전송돤다. 따라서 보내는 데이터의 양에 제한이 없어 대용량 데이터를 전송할 때는 POST 방식이 적합하다. 그리고 URL에 데이터가 표시가 되지 않기 때문에 GET 방식보다는 상대적으로 보안적이지만, body의 데이터도 결국엔 크롬 개발자 도구, Fiddler와 같은 툴로 요청 내용을 확인할 수 있기 때문에 꼭 암호화를 해주어야 한다. POST 방식의 경우 보통 서버의 값이나 상태를 변경하기 위해 사용되므로 글쓰기, 글 수정과 같은 작업에 적합하다

POST 특징

  • 데이터들을 URL뒤에 붙여서 서버로 보내는 것이 아닌 Body에 담아서 전송
  • 요청 헤더의 Content-Type에 콘텐츠 타입을 명시
  • 데이터들이 URL에 노출되지 않기 때문에 GET 방식보다 상대적으로 보안적
  • 데이터들을 Body에 담기 때문에 서버로 보내는 데이터의 양은 제한 없음
  • URL에 데이터가 노출되지 않으므로 캐싱 불가
  • 클라이언트에서 인코딩, 서버에서 디코딩
  • 요청받는 시간제한 존재
  • 브라우저 히스토리에 기록이 남지 않음
  • POST 요청은 데이터 길이에 제한이 없음

GET 과 POST 의 차이점

  • 사용목적 : GET은 서버의 리소스에서 데이터를 요청할 때, POST는 서버의 리소스를 새로 생성하거나 업데이트할 때 사용한다.
  • DB로 따지면 GET은 SELECT 에 가깝고, POST는 Create 에 가깝다고 보면 된다.
  • 요청에 body 유무 : GET 은 URL 파라미터에 요청하는 데이터를 담아 보내기 때문에 HTTP 메시지에 body가 없다. POST 는 body 에 데이터를 담아 보내기 때문에 당연히 HTTP 메시지에 body가 존재한다.
  • 멱등성 (idempotent) : GET 요청은 멱등이며, POST는 멱등이 아니다.

멱등성이란?
멱등성은 연산을 여러 번 하더라도 결과가 달라지지 않는 성질을 의미하며, get 요청의 경우 여러 번 요청해도 응답이 같지만
post 요청의 경우엔 리소스를 새로 생성하거나 업데이트하므로 서버에게 동일한 요청을 여러 번 전송해도 응답은 항상 다를 수 있다.

GET과 POST 비교

HTTP MethodGET 방식POST 방식
URL 예시http://localhost:3000/login?id=admin&pw=1234http://localhost:3000/login
데이터가 담기는 곳HTTP 패킷Header HTTP 패킷 Body
리소스 전달 방식쿼리스트링HTTP Body
HTTP응답 코드200201
언제 주로 사용하는가?리소스 요청리소스 생성
URL에 데이터 노출 여부OX
캐싱 가능 여부OX
브라우저 기록OX
북마크 추가OX
데이터 길이 제한OX
멱등성(idempotent)OX

참고
https://cocoon1787.tistory.com/526
https://whales.tistory.com/120

0개의 댓글