모든 것이 HTTP
클라이언트 서버 구조
Stateless Protocol
- 서버가 클라이언트의 샅애를 보존하지 않음
- 장점 - 서버 확장성 높음 (Scalablity)
- 단점 - 클라이언트가 추가 데이터 전송
Stateful

Statelss - 아무 서버나 호출해도 됨

Stateless의 한계
- 모든 것을 무샅애로 설계 할 수 없는 경우도 있다.
- 로그인???
- 브라우저의 쿠키와 서버의 세션을 사용하여 상태 유지
Connectionless 비 연결성


- HTTP는 기본적으로 연결을 유지하지 않음
- 일반적으로 초 단위 이하의 빠른 속도로 응답
- 1 시간 동안 수천명이 서비스를 사용해도 실제 서버에서 동시에 처리하는 요청은 수십개 이하로 매우 작음
- 서버의 자원을 매우 효율적으로 사용할 수 있음
비 연결성 - 한계와 극복
- TCP/IP 연결을 새로 맺어야 함 - handshake 시간 추가
- 웹 브라우저로 사이트를 요청하면 HTML 뿐만 아니라 js, css, image 등 수많은 자원들이 함께 다운로드
- 지금은 HTTP 지속 연결 (Persistent Connections)로 문제 해결
- HTTP/2, HTTP/3에서 더 많은 최적화


HTTP 메시지
GET /serach?q=hello?hl=ko HTTP/1.1 Host: www.google.com
HTTP/1.1 200 OK Content-Type: text/html;charset=UTF-8 Content-Length: 3423 <html> <body> ... </body> </html>
HTTP 메시지 구조
- start-line
- header
- empty line
- message body
시작 라인
요청 메시지
- start-line =
request-line
- request-line =
method
SPrequest-target
SPHTTP-version
CRLF
응답 메시지
- start-line = status-line
- status-line =
HTTP-version
SPstatus-code
SPreason-phrase
CRLF
헤더
- header-field =
field-name
OWSfield-value
OWS
- HTTP 전송에 필요한 모든 부가정보
- 메시지 바디의 내용, 메시지 바디의 크기, 압축, 인증, 캐시 관리 정보 ...
- 표준헤더가 있지만 임의 헤더도 추가 가능
메시지 바디
- 실제 전송할 데이터
- HTML, 이미지, 영상, JSON, byte로 표현할 수 있는 모든 데이터 전송 가능