Get과 Post는 데이터 전송 방식이 다르다. 이번 포스팅에서는 Get과 Post의 데이터 요청/전송 방식이 어떻게 다른지 소개하겠다.
GET
방식은 클라이언트가 서버로 데이터를 요청하기 위해 사용되는 Method이며, 요청시 Body 부분은 비어있고 Header에 Body의 콘텐츠 타입을 명시하는 Content-Type 헤더 필드도 적지 않는다.
아래와 같이 URL뒤에 쿼리 스트링(Key와 Value)을 붙이고 HTTP 패킷의 헤더에 포함해서 서버에 데이터를 요청한다.
http://localhost:3000/login?id=user&pw=1234
HTTP Requset Message
의 Header
부분의 URL에 담겨서 전송된다.?
뒤에 데이터가 붙어 request를 보내는 것이다.RetrofitApiManager.getInstance().requestUserCall(UserPreference.getUserId(context), UserPreference.getUserPassword(context), new RetrofitInterface() {
@Override
public void onResponse(Response response) {
Log.d("TAG", "response : " + response);
if (response.isSuccessful()) {
UserResponse userResponse = (UserResponse) response.body();
if (userResponse != null) {
Log.d("TAG", "userResponse :" + userResponse.getResult());
} else {
Log.d("TAG", "userResponse is null");
}
} else {
Log.d("TAG", "userResponse is not successful");
}
}
@Override
public void onFailure(Throwable t) {
Log.d("TAG", "userResponse :" + t.toString());
}
});
- 인자 2개 넣어서 보기 좋게 나타냄
- 로그인 아이디, 암호화 된 비밀번호 서버에 넘기기 → 서버에서 복호화 하여 맞는지 확인 → 맞으면 로그인
GET
방식 경우에는 브라우저마다 글자 수 제한이 있기 때문에 게시판의 게시물, 목록 조회와 같은 간단한 데이터 요청할 때 적합하다.
POST
방식은 클라이언트가 서버로 데이터를 전송해 리소스를 추가하거나 생성하기 위해 사용되는 Method 이며, POST 요청 시 HTTP 패킷의 Header에 Body의 콘텐츠 타입을 명시하는 Content-Type 헤더 필드를 포함하고 HTTP 패킷의 Body에는 데이터를 담아서 서버로 전송합니다
Header
부분에 데이터를 담는 GET 방식과 다르게 Body
부분에 데이터를 담아 전송한다.CommonRequest model = new CommonRequest();
model.setId(userId);
model.setPw(userPw);
RetrofitApiManager.getInstance().requestLoginUserInfo(model, new RetrofitInterface() {
@Override
public void onResponse(Response response) {
if (response.isSuccessful()) {
LoginResponse loginResponse = (LoginResponse) response.body();
startLogin(loginResponse);
} else {
Log.d("TAG", "userResponse is not successful");
}
}
@Override
public void onFailure(Throwable t) {
Log.d("TAG", "loginResponse :" + t.toString());
}
});
- GET 방식은 URL 뒤에 Body를 넣고,
- POST 방식은 URL 안에 넣기 때문에 POST 방식의 보안이 더 높음
POST
방식의 경우 보통 서버의 값이나 상태를 변경하기 위해 사용되므로 글쓰기, 글 수정과 같은 작업에 적합하다.