HTTP
- HTTP(HyperText Transfer Protocol)
거의 모든 것을 HTTP를 사용
1.1 버전을 주로 사용함
TCP : 1.1, 2
UDP : 3
<특징>
- 클라이언트 서버구조
Request, Response 구조
클라이언트는 서버에 요청을 보내고 응답을 대기
서버가 요청에 대한 결과를 만들어서 응답
- 무상태 프로토콜(Stateless)
서버가 클라이언트의 상태를 보존 X
그전에 어떤 요청을 보냈는지 기억하지 않음
장점 : 서버 확장성 높음(Scale out) => 수평적으로 서버증설(여러대 서버를 둠)
단점 : 클라이언트가 추가 데이터 전송
반대의 개념으로 상태유지(Stateful)가 있음
그 전의 요청을 기억하고 있는 것을 말함
응답서버가 바뀌면 안됨(항상 같은 서버 유지)
상태 유지는 최소한만 사용
- 비연결성
<연결성과의 차이>
연결성의 경우 클라이언트가 놀고 있어도 서버 자원을 소모해야하는 단점을 가지고 있음
비연결성의 경우 연결 요청때만 연결되기 때문에 최소한의 자원 유지가 가능
<장점>
HTTP는 기본적으로 연결을 유지 하지 않음
최소한 자원을 사용
<단점>
TCP/IP 연결을 새로 맺어야 함 - 3 way handshake 시간 추가
웹사이트의 경우 다양한 JS, CSS 등 수많은 자원 다운
지속 연결로 해당 단점을 극복
=> 필요한 자원을 모두 받을 때 까지 지속적으로 연결
최대한 스테이트리스로 개발
ex) 처음에 정적 페이지를 두고 해당 페이지에서 어떠한 액션을 취하게 해서 대용량 트래픽 처리를 주로 함
- HTTP메시지
<시작 라인>
#HTTP메서드
GET,POST,PUT ...
서버가 수행해야 할 동작 지정
GET : 리소스 조회
POST: 요청 내역 처리
#요청대상
절대경로 : "/"로 시작하는 경로
쿼리 : "?"로 시작
#HTTP Version
<Header>
전송에 필요한 모든 부가정보가 들어감
필요시 임의의 헤더 추가 가능
<시작라인>
#HTTP Version
#HTTP 상태코드
요청 성공 혹은 실패를 나타냄
ex)
200 : 성공
400 : 클라이언트 요청 오류
500 : 서버 내부 오류
#이유문구
사람이 이해할 수 있는 설명 글
<Header>
전송에 필요한 모든 부가정보가 들어감
필요시 임의의 헤더 추가 가능
<message body>
실제 전송할 데이터
모든 데이터 전송 가능