💡 HTTP
HyperText Transfer Protocol
HTTP 프로토콜은 애플리케이션 계층 프로토콜로, 인터넷 상에서 데이터를 주고받기 위하여 데이터를 생성할 때 사용되는 프로토콜이다.
HTTP 프로토콜은 거의 모든 형태의 데이터를 전송할 수 있다!
서버간 데이터를 전송할 때에도 HTTP 프로토콜을 사용한다.
HTTP 1.1
- 현재 가장 많이 사용되는 HTTP 프로토콜 버전
- TCP/IP 프로토콜 위에서 동작한다
💡 HTTP 프로토콜의 특징
클라이언트 - 서버 구조
- 클라이언트는 서버에 요청(request)을 보내고, 서버의 응답(response)을 기다린다.
- 서버는 클라이언트의 요청에 대한 응답을 만들어 HTTP 프로토콜을 통해 클라이언트에 전송한다.
무상태 프로토콜(Stateless)
- 서버는 특정 클라이언트의 상태를 유지하지 않는다.
- 같은 클라이언트가 서버에 첫번째 요청 후 두번째 요청을 할 때 서버는 클라이언트의 이전 요청 정보를 가지고 있지 않다.
- 장점 : 서버의 확장성이 높다
➡ 응답 서버를 쉽게 바꿀 수 있으므로 서버의 증설이 쉽다.
- 단점 : 클라이언트가 계속해서 기존 데이터에 추가된 데이터를 전송해야 한다.
상태를 유지해야 하는 경우 : ex. 로그인
비연결성(Connectionless)
- 클라이언트와 서버의 연결이 지속되면 서버의 요청 클라이언트의 수가 많아질수록 서버의 자원이 소모된다.
- 클라이언트와 서버의 연결을 지속하지 않음으로써 서버는 최소한의 자원만 사용할 수 있다.
- 일반적으로 서버의 응답 시간은 초단위로 매우 짧기 때문에 아주 많은 수의 동시 요청이 서버에 들어와도 서버가 동시에 처리하는 요청의 수는 그에 비해 매우 작다.
서버 자원을 효율적으로 활용 가능!`
- 한계
- TCP/IP 연결을 매 요청마다 새로 맺어야 하므로 3 way handshake 시간이 소요된다.
- 매 요청마다 수많은 자원이 새로 다운로드된다.
현재는 HTTP 지속 연결(Persistent Connections)로 문제 해결
HTTP 지속 연결(Persistent Connections)
HTTP 초기의 비지속 연결
현재의 지속 연결
- 클라이언트가 자원을 요청할 때 이와 묶인 자원을 연결이 지속된 상태로 계속해서 요청한다.
- 연결 횟수가 줄기 때문에 서버를 효율적으로 사용할 수 있다.
- 서버의 TIMEOUT이 존재하기 때문에 TIMEOUT이 지나면 연결 종료
💡 HTTP 메시지
HTTP 메시지 구조
시작 라인
- HTTP 메서드
HTTP 메서드 : 서버가 수행해야 할 동작 지정(GET, POST, ...)
- 요청 대상
경로와 쿼리 파라미터를 함께 전달
- HTTP 버전
응답 메시지
- HTTP 버전
- HTTP 상태 코드
요청에 대한 성공, 실패 여부를 알려준다.
HTTP 헤더
- HTTP 전송에 필요한 부가 정보 전달
ex. 메시지 바디의 내용, 크기, ...
HTTP 메시지 바디
- 실제 전송하고자 하는 데이터
- byte로 표현할 수 있는 모든 데이터 전송 가능
ex. HTML, 이미지, 영상, JSON