GET vs POST

July 19, 2022

REST API - get, post 비교

Get method

  • 클라이언트에서 서버로 정보를 요청하기 위해 사용되는 메서드이다.
  • get요청은 URL 주소 끝에 파라미터로 포함되어 전송되고 이부분을 쿼리 스트링이라고 부른다.
  • ?를 붙이고 변수명1=값 & 변수명2 = 값2 형식으로 이어 붙이는 방식이다.
// 예시
https://youhavetosleep.com/web?id=1&ground=1

구분자
? : 서비스 주소와 데이터를 구별
& : 데이터를 구분
= : 매개변수의 이름과 값 구분

get 특징

  1. 캐싱이 가능하다
    • 웹 캐시가 요청을 가로채 서버로부터 리소스를 다시 다운로드하지 않고 리소스의 복사본을 반환
    • http헤더에서 cache-control header를 통해 캐시 옵션을 지정할 수 있다.
  2. 자료 검색, 데이터 조회 등 정보 조회에 쓰인다.
  3. 브라우저 히스토리에 남는다.
  4. 길이 제한이 존재한다 (브라우저마다 제한 길이가 다르다.)
  5. 파라미터에 URL주소에 노출되어 로그인 정보 같은 중요 정보를 넣어선 안된다.
  6. 바이너리 데이터는 전송할 수 없다. (ex. 이미지, 동영상)

Post Method

  • 클라이언트에서 서버로 리소스를 생성 & 업데이트 하기위해 데이터를 보낼 때 사용되는 메서드이다.
  • post요청은 전송할 데이터 http 메시지 body 부분에 담아 서버로 보닌다.
  • body의 타입은 Content-Type 헤더에 따라 결정 된다.
  • 일반적으로 cache가 사용 불가능하다.
  • 그러나 Expires와 Cache-Control header를 이용해 caching을 구현하여 응답을 가능하게 한다.

아래는 ‘회원가입’ 페이지 post요청 예시이다.

const url = process.env.REACT_APP_API_URL || "http://localhost:80";
console.log(url);
const instance = axios.create({
    baseURL: url,
});

instance.post(
    "/users/signup",
    {
        email,
        password,
        nickname,
        userPhone,
        favoriteSports,
        homeground,
    },
    {
        headers: {
            "Content-Type": "application/json",
        },
        withCredentials: true,
    }
);

회원가입시 회원정보를 담아 새로운 리소스를 생성할 때 사용한다.

post의 특징
  • get과는 달리 캐시되지 않는다.
  • 브라우저 히스토리에 남지 않는다.
  • 데이터 길이의 제한이 없다.
  • URL에 데이터가 포함되지 않는다.

GET vs POST

  • 리소스 요청시 body - 두 메소드는 데이터를 담는 방식에 차이가 존재한다.

    • GET : URL 파라미터에 요청 데이터를 담기에 HTTP 메시지 속 body가 존재하지 않는다.
    • POST : body 에 데이터를 담아 보내기 때문에 당연히 HTTP 메시지에 body가 존재한다.
  • 사용목적

    • GET : 서버에 데이터를 요청할 사용한다.
    • POST : 서버의 리소스를 새로 생성하거나 업데이트할 때 사용한다.
  • 멱등성 (idempotent)

    • 멱등이란 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질을 의미
    • GET : 여러 번 요청하더라도 매번 같은 결과를 응답하여 멱등성을 가진다.
    • POST : 리소스를 새로 생성하거나 업데이트할 때 마다 다른 결과를 응답하기에 멱등성을 가지지 않는다.