HTML, TEXT, JSON, 미디어파일 등 모든 형태의 데이터를 HTTP 메세지에 담아서 전송한다.
HTTP1.1에 대부분의 기능이 포함되어 있고, 이후 버전은 성능 개선에 초점이 맞추어져 있다. HTTP1.1, HTTP2 는 TCP, HTTP3은 UDP 프로토콜 위에서 작동한다.
🎈 HTTP의 특징
🔰 클라이언트/서버 구조 (요청-응답 구조)
- 클라이언트 : 서버에 요청을 보내고 응답을 대기한다.
- 서버 : 요청에 대한 결과를 만들어서 응답한다.
구조가 나누어지면 클라이언트와 서버가 독립적으로 진화할 수 있다.
🔰 무상태성 (stateless)
- 서버는 클라이언트의 상태를 보존하지 않는다.
- 서버는 클라이언트가 하는 말의 맥락 파악을 하지 못하는 구조
- 서버 증설을 무한하게 할 수 있다.
- 대용량 트래픽이 동시에 발생해도 쉽게 대응 가능
한계
- 로그인, 접근권한 등의 처리를 할 때에는 상태 유지가 필요한데, 세션 등을 사용해서 상태를 유지할 수 있다. 꼭 필요한 경우에만 사용해야 한다
🔰 비연결성 (connectionless)
- 요청을 보내고 응답을 받으면 클라이언트-서버 간 TCP/IP 연결이 종료된다.
- 많은 사람들이 서비스를 사용해도 실제 서버에서 동시에 처리하는 요청은 매우 적다.
- 서버 자원을 매우 효율적으로 사용할 수 있다.
한계
- 매번 TCP/IP 연결을 새로 맺어야 해서 (3 way handshake) 느리고 페이지를 이동할 때마다 HTML/CSS/JS 등 자원을 매번 새로 다운로드해야 한다.
- 지속 연결 기술로 문제를 해결한다 (페이지에 필요한 데이터들을 다 받을 때까지 연결 유지)


🎈 HTTP 메세지


공백라인은 필수로 존재해야 함
🔰 시작 라인
request-line (요청)
[HTTP메서드] /[절대path][?query] [HTTP버전]
status-line (응답)
[HTTP버전] [상태코드] [짧은메세지]
🔰 헤더
HTTP 전송에 필요한 모든 부가정보를 포함
메세지 바디의 내용, 크기, 압축 방법, 인증, 브라우저 정보 등
커스텀 필더 추가 가능
[필드이름]: [필드값]
🔰 메세지 바디
실제 전송할 데이터
byte로 표현할 수 있는 모든 데이터를 담을 수 있다.