[네트워크] HTTP의 GET POST 비교
01. HTTP의 GET과 POST 비교
01-1. 공통점
- HTTP 프로토콜을 이용해서 서버에 무엇인가를 요청할 때 사용하는 방식
02. GET
- 클라이언트에서 서버로 어떠한 리소스로부터 정보를 요청하기 위해 사용되는 메서드
- 예시 ) 게시판의 게시물을 조회할 때 쓰인다.
- URL 주소 끝에 파라미터로 포함되어 전송 (Query String)
- URL 끝에 “?”를 붙이고
변수명1=값1&변수명2=값2...
형식으로 이어 붙인다. - 예시)
www.example.com/boardList?name1=value1&name2=value2
name1과 name2라는 파라미터 명으로 각각 value1과 value2 파라미터 값을 전달받을 수 있다.
02-1. GET 특징
- 캐시가 가능하다
HTTP 헤더에서 cache-control 헤더를 통해 캐시 옵션을 지정할 수 있다.
POST 방식으로 요청해야 할 것을 보내는데 GET 방식을 사용할 경우, 기존에 캐싱되었던 데이터가 응답될 가능성이 존재한다. - 브라우저 히스토리에 남는다.
- 길이 제한이 있다. 브라우저마다 길이 제한이 다르다.
- GET 요청은 중요한 정보를 다루면 안된다. GET 요청은 파라미터에 다 노출되어 보안에서 취약하다.
- 데이터를 요청할때만 사용한다.
캐싱이란? 한번 접근 후, 또 요청할 시 빠르게 접근하기 위해 레지스터에 데이터를 저장시켜 놓는 것
03. POST
- 클라이언트에서 서버로 리소스를 생성하거나 업데이트하기 위해 데이터를 보낼 때 사용되는 메서드
- 예시) 게시판에 게시글을 작성하는 작업 등
- 전송할 데이터를 HTTP 메세지 body 부분에 담아서 서버로 보낸다. GET에서 URL 의 파라미터로 보냈던 name1=value1&name2=value2가 body에 담겨 보내진다.
- 용량이 큰 데이터를 보낼 때 사용하거나, 데이터를 암호화하여 보안이 필요한 부분에서 많이 사용한다.
- HTML form을 통해 서버로 전송된다.
- 예시)
http://example.com/login
- 요청 헤더에 Content-Type에 요청 데이터 타입을 표시해야 한다. 표시하지 않을 시, 서버는 내용이나 URL에 포함된 확장자명 등으로 데이터 타입을 유추한다. 알 수 없는 경우에는 application/octet-stream 으로 요청을 처리한다.
application/octet-stream
8비트 단위의 binary data라는 뜻 특별히 표현할 수 있는 프로그램이 존재하는 데이터의 경우 기본값으로 사용한다. 다른 데이터 타입의 경우, text, multipart, audio, video 등이 있다.
03-1. POST 특징
- 캐시되지 않는다.
- 브라우저 히스토리에 남지 않는다.
- 북마크되지 않는다.
- 데이터 길이에 제한이 없다.
04. 차이점
- 사용 목적 GET은 서버의 리소스에서 데이터를 요청할 때, POST는 서버의 리소스를 새로 생성하거나 업데이트 할 때 사용한다. DB로 따지면 GET은 SELECT에 가깝고, POST는 Create에 가깝다.
- 요청에 body 유무 GET은 URL 파라미터에 요청하는 데이터를 담아 보내므로 HTTP 메세지에 body가 없다. POST는 body에 데이터를 담아 보내기 때문에 HTTP 메세지에 body가 존재한다.
- 멱등성(Idempotent) GET 요청은 멱등, POST 요청은 멱등이 아니다.
04-1. 멱등성
- 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질
- GET은 리소스를 ‘조회’하므로 여러번 요청하더라도 결과가 같다 → 멱등
- POST는 리소스를 새로 생성하거나 업데이트 할 때 사용된다. → 멱등이 아니다.
POST 요청이 발생하면 서버가 변경될 수 있다.
댓글남기기