1. HTTP로 전송 가능한 것들
- HTML, TEXT
- image, 음성, 영상, 파일
- JSON, XML
- 등등…
HTTP를 통해 거의 모든 형태의 데이터를 전송할 수 있다. 따라서 클라이언트와 서버 뿐 아니라 서버와 서버 간의 통신에서도 HTTP를 사용한다.
2. HTTP 역사
- 0.9 : GET 메소드만 지원, HTTP HEAD 없음
- 1.0 : 메소드, 헤더 추가
- 1.1 : 가장 많이 사용, 현재 표준, 개량되어왔음
- 2 : 성능개선
- 3 : UDP 사용
각 버전 별 차이는 따로 정리해보자
3. 특징
클라이언트-서버 구조
- 클라이언트는 요청하고 서버는 응답한다.
- 요청에대한 응답을 주고 받으면서 작동
Stateless
- 서버가 클라이언트의 상태를 저장하지 않기 때문에 어떤 서버로 요청이 들어와도 처리 가능
- 서버가 다운되도 다른 서버에서 처리해줄 수 있고 스케일 아웃이 매우 용이
- 하지만 클라이언트가 매번 해당 요청에 대한 정보를 추가로 제공해야 함
- 상태 유지 (stateful) : 중간에 요청을 처리하는 서버가 바뀌면 안됨
바뀌게 되면 이전에 처리한 서버로부터 해당 요청에 대한 정보를 제공 받아야 함
- 무상태 (stateless) : 중간에 요청을 처리하는 서버가 바뀌어도 상관없음
갑자기 요청량이 급증해도 새로운 서버를 마구 투입하기 편함 (응답서버를 쉽게 바꿀 수 있으니까)
- 하지만 모든 것을 무상태로 처리할 수는 없음
- 로그인이 필요없는 단순 소개 페이지는 무상태로 처리 가능하지만
- 로그인 후 사용자를 식별할 필요가 있는 경우 무상태로 처리하기 힘들어
- 쿠키, 세션 등을 통해 상태를 유지
- 상태 유지는 최소한만 사용하도록 한다 (Restful)