GET메서드 POST메서드란?
- 웹 서비스 개발에 주로 사용하는 메서드.
- 사용자가 URL을 브라우저 주소창에 작성하고 엔터를 누르면 원하는 웹페이지가 나온다. 사용자는 웹페이지를 보기위해 단순한 일을 한 것이지만, 특정 웹페이지를 사용자 웹브라우저에게 보여주기 위해서는 내부적인 처리들이 있다.
- 내부적인 처리에서, 클라이언트가 서버에게 웹페이지를 보여달라고 말하는 것 -> 요청
- 서버가 클라이언트에게 요청받은 것에 대한 대답으로, 웹페이지 내용을 표현하기 위해 html문서로 주는 것 -> 응답
[GET]
데이터를 조회
[POST]
데이터를 서버로 제출해서 생성 또는 수정
HTTP 패킷
- 클라이언트가 서버로 요청을 했을때, 보내는 데이터를 HTTP패킷이라고 표현한다.
- HTTP 프로토콜을 쓰므로, 앞에 HTTP가 붙고 인터넷을 통해 보내는 데이터를 패킷이라고 표현하므로, HTTP 패킷이라고 부른다.
- HTTP패킷 구조는 크게 헤더와 바디로 나누어진다.
- 헤더
에는 7가지 HTTP메서드 방식중 무엇을 썼는지, 클라이언트의 정보, 브라우저 정보, 접속할 URL 등등 클라이언트 정보를 담는다.
- 바디
는 보통 비어있지만 특정 데이터를 담아서 서버에게 요청을 보낼 수 있다.
- 이러한 웹 개념 아래, 우리는 GET메서드와 POST메서드를 통해서 요청을 할 수 있다.
GET방식 vs POST 방식
- 두 방식 모두, 서버에 요청을 하는 메서드.
- 클라이언트가 서버에 요청할 때 제공해야하는 자원이 있다고하자.
- 예를 들면 어떤 홈페이지의 로그인 페이지에서 로그인을 하는 경우
- 아이디와 패스워드는 클라이언트가 작성한후 그 정보를 서버에 요청하여 클라이언트가 작성한 아이디와 패스워드가 올바른 것인지 검사해야한다.
- 위의 예시에서 보듯, 요청에는 자원을 보내야하는 경우가 존재한다.
GET 방식으로 데이터를 보내기
- 클라이언트의 데이터를 URL뒤에 붙여서 보낸다. 위에서 쓴 예시처럼 아이디 패쓰워드를 보낸다고 하면,
www.example.com?id=jjj&pass=123
이런식으로 보낸다. URL뒤에 '?'마크를 통해 URL의 끝을 알리면서, 데이터 표현의 시작점을 알린다.
- 데이터는 key와 value 쌍으로 넣어야 한다.
- 중간에 & 마크는 구분자이다. 2개 이상의 key-value 쌍 데이터를 보낼때는 &마크로 구분한다.
- URL에 붙이므로 HTTP 패킷의 헤더에 포함되어 서버에 요청
- 바디에는 특별한 내용을 넣을 것이 없으므로 BODY가 빈상태로 보내진다.
- 그러므로 헤더의 내용중 BODY 데이터를 설명하는 Content-Type이라는 헤더필드는 들어가지 않는다.
- URL형태로 표현되므로, 특정 페이지를 다른사람에게 접속하게 할 수 있다.
- 또한 간단한 데이터를 넣도록 설계되어 데이터를 보내는 양의 한계가 있다.
POST방식으로 데이터를 보내기
- POST방식은 GET방식과 달리, 데이터 전송을 기반으로 한 요청 메서드
- GET방식은 URL에 데이터를 붙여서 보내는 반면, POST방식은 BODY에다가 데이터를 넣어서 보낸다.
- 따라서 헤더필드중 BODY의 데이터를 설명하는 Content-Type이라는 헤더필드가 들어가고 어떤 데이터 타입인지 명시한다.
- 컨텐츠 타입으로는 여러가지가 있지만, 몇가지를 적자면
1. application/x-www-form-urlencoded
2. text/plain
3. multipart/form-data
등이 있다.
- 따라서 POST방식으로 데이터를 보낼때는 위와 같이 컨텐츠 타입을 꼭 명시해줘야하고, 작성하지 않은 경우 1번의 컨텐츠 타입으로 셋팅된다.
GET방식과 POST방식에 대한 상식
- POST방식이 GET방식보다 보안 측면에서 더 좋다?
- POST든 GET이든 보내는 데이터는 전부 클라이언트 측에서 볼 수 있다. 단지 GET방식은 URL데이터가 표시되어 별다른 노력없이 볼 수 있어서지, 두 방식 전부 보안을 생각한다면 암호화 해야한다.
- GET방식이 POST방식보다 속도가 빠르다?
- 빠른건 맞다. 하지만 왜 빠른지 알아야 하는데, 이유는 GET방식의 요청은 캐싱(한번 접근 후, 또 요청할 시 빠르게 접근하기 위해 데이터를 저장시켜 놓는다.) 때문에 빠른 것.
캐싱이란?
데이터에 한번 접근 후, 또 요청할때 빠르게 접근하기 위해서 레지스터에 저장해놓는 것.
요약
- 클라이언트가 서버에 데이터를 요청하는 방식인 http메소드에서 GET과 POST의 차이점
- 클라이언트가 서버에게 요청할때, 보내는 데이터 => http 패킷
- HTTP 프로토콜 방식을 따르는 데이터(=패킷)
- HTTP패킷은 헤더와 바디 구조로 되어있음
- 헤더 => 클라이언트 정보, 브라우저URL 등이 담겨져 있고,
- 바디 => 보통 비어있지만, 데이터를 담아서 서버에 요청할때 사용한다.
GET
어떠한 정보를 조회하기 위해서 사용되는 방식
- URL에 데이터 정보를 담아서 서버에 요청한다.
- URL에 데이터가 노출되어 있기때문에 보안에 취약
- 캐싱할 수 있다.
- 데이터를 헤더에 포함하여 전송한다.
- 전송길이에 제한이 있다.
POST
데이터를 서버로 제출하여 생성하거나 수정하기 위해서 사용
- Body에 데이터를 담아서 서버에 전송한다.
- 캐싱할 수 없다,
- URL에 데이터가 노출되지 않기 때문에 기본적인 보안은 되어있다.
- 전송길이에 제한이 없다.
출처