Back-End/Theory

GET요청과 POST요청의 차이점

Hoplin 2020. 1. 13. 20:37
반응형

기존 포스트에서 GET메소드는 CRUD 에서 데이터를 Read하는것에 매핑을, POST메소드는 CRUD에서 Create하는것에 매핑이 된다고 다루었다. 그렇다면 이를 해설해 보면 GET메소드는 기존의 리소스를 읽어오는것을 의미하게 되는것이고, POST같은 경우에는 리소스를 생성하는것을 의미하게 되는것이다. 

 

웹 클라이언트가 웹 서버에 요청을 보낼때 GET 방식과 POST방식 두가지 모두를 쓸수 있다. 그렇다면 동일한 '요청' 이라는 것을 하는데, 어떤 차이점을 가진것일까?

 

- GET방식

 

    - 크게보기

    

      1 . URL에 데이터를 포함시켜서 요청한다. 그렇기 때문에 전송하는데 있어서 길이 제한이 존재한다.(body가 빈상태로 전송)

      2 . URL내에 정보가 포함되는 방식이기에 보안에 있어서 취약점 존재

      3 . 캐싱이 가능하여, 빠른 로딩 속도가 가능하다.

 

 GET방식같은 경우에는 URL에 변수를 포함시켜서 요청을 하게된다. 그렇기 때문에 웹 서버에 보낼 수 있는 데이터의 양에 있어서는 어느정도 한계가 있다. 변수를 포함시켜서 요청을 한다고 했는데, 기본적으로 URL에 쿼리스트링을 추가하여 데이터를 전송하게 된다. 기본적으로 쿼리 스트링을 보면 다음과 같은 형태를 띄게 된다.

 

    ?(key)=(value)&(key)=(value) 

 

이와 같은 형식의 경우에, 만약 로그인을 한다고 예시를 들어보자. 그러면 분명히 웹 서버에 매개변수로는 id와 pw가 들어가게 될텐데, 그러면 URL에는 

 

 ?id=(id값)&pw=(pw값)

 

형태로들어가기 때문에 보안상 문제에서 취약점이 들어난다. 

 

Get방식을 이용하여 데이터를 노출시키는 경우는, 개인정보가 포함되지 않는 상황에서, 캐싱을 하여 로딩 속도를 높인다 혹은 우리가 즐겨찾기를 등록한다는 경우에서 사용한다고 예시를 들 수 있다.

 

 

- POST 방식

 

    - 크게보기

 

      1 . URL에 변수를 노출시키지 않은상태로 전송한다. 필요한 데이터는 모두 Body에 저장되어서 전송이 된다. 그렇기 때문에 GET과 달리 전송하는데에 있어서 길이제한이 존재하지 않는다.

      2 . 보안성에 있어서 GET에 비해 더 좋다

      3 . 캐싱 불가능

 

POST방식 같은 경우에는 데이터를 BODY에 저장하여서 전송을 하게 된다. 그렇기 때문에 POST방식으로 요청을 할 때는 Body의 데이터를 설명하는 메타데이터가 들어가야 되기 때문에, Content-Type라는 헤더필드와 BODY에 있는 데이터의 데이터 타입을 명시해 주어야 한다. 또한 URL에서 변수를 노출시키지 않기 때문에 보안성에 있어서 더 좋다고 볼 수 있다. 이의 이점으로 메세지 길이제한은 없지만 요청받는 시간인 Time Out이 존재한다. POST방식은 URL에 데이터가 노출되지 않지만 쿼리스트링 외 여러 객체 값도 전송이 가능하다.

반응형