Get method
- 클라이언트에서 서버로 정보를 요청하기 위해 사용되는 메서드이다.
- get요청은 URL 주소 끝에 파라미터로 포함되어 전송되고 이부분을 쿼리 스트링이라고 부른다.
- ?를 붙이고 변수명1=값 & 변수명2 = 값2 형식으로 이어 붙이는 방식이다.
// 예시
https://youhavetosleep.com/web?id=1&ground=1
구분자
? : 서비스 주소와 데이터를 구별
& : 데이터를 구분
= : 매개변수의 이름과 값 구분
get 특징
- 캐싱이 가능하다
- 웹 캐시가 요청을 가로채 서버로부터 리소스를 다시 다운로드하지 않고 리소스의 복사본을 반환
- http헤더에서 cache-control header를 통해 캐시 옵션을 지정할 수 있다.
- 자료 검색, 데이터 조회 등 정보 조회에 쓰인다.
- 브라우저 히스토리에 남는다.
- 길이 제한이 존재한다 (브라우저마다 제한 길이가 다르다.)
- 파라미터에 URL주소에 노출되어 로그인 정보 같은 중요 정보를 넣어선 안된다.
- 바이너리 데이터는 전송할 수 없다. (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
: 리소스를 새로 생성하거나 업데이트할 때 마다 다른 결과를 응답하기에 멱등성을 가지지 않는다.