HTTP ( HyperText Transfer Protocol )
모든 형태의 데이터를 HTTP로 전송 ( HTML, JSON, XML, IMAGE )
👉 전송 프로토콜에 따른 버전 차이
TCP : HTTP/1.1, HTTP/2
UDP : HTTP/3
주로 HTTP/1.1 사용 ( 점차 2, 3도 증가 )
📌 특징
▪️ 클라이언트 : 서버에 요청을 보내고 응답 대기 (사용성, UI에 집중)
▪️ 서버 : 요청에 대한 결과를 만들어 응답. (비지니스 로직)
▪️ 분리시 각각 독립적으로 진화 가능
서버가 클라이언트의 상태를 보장 X
이전에 어떤 요청이 있었는지 고려하지 않는다
-> 고객이 원하는 요청사항을 모두 기재
-> 중간에 서버가 바뀌어도 아무 문제가 없다
=> 확장성 up
상태유지로 통신할 경우 상대 서버가 다운시 다시 처음부터 요청해야 함
-> 무상태일시, 언제나 다른 서버 대체 가능
( = 스케일 아웃 - 수평 확장 유리 )
❗실무 한계
무상태 설계 가능한 있는경우, 없는 경우도 있다.
상태 유지 : ex ) 로그인
일반적으로 브라우저 쿠키 + 서버 세션을 사용해 상태유지
상태유지는 최소한만 사용해야함.
데이터를 너무 많이 보내야한다.
✨ 최대한 무상태 + 최소한의 상태유지 ✨
연결 유지
-> 연결을 유지하는동안 서버 자원 소모
유지하지 않는 모델
-> 필요한 것만 주고받고 연결 X : 서버는 최소한의 자원 유지
일반적으로 빠른 속도로 응답 -> 서버 자원을 효율적으로 사용 O
요청이 많이들어와도 실제로 서버에서 처리하는 요청은 매우 작음
❗ 단점
연결 > 원하는 자원을 다 받을 때 까지 요청/응답 처리 > 종료
시작라인 - 헤더 - 공백라인(필수) - 메시지 body
시작 라인
요청메시지
request-line
= method SP(공백) request-target SP HTTP-version CRLF(엔터)
= 메서드 요청대상 HTTP버전
메서드 : 서버가 수행해야할 동작 / GET, POST, PUT, DELETE
GET : 리소스 조회 / POST : 요청내역 처리
요청 대상 : 절대경로( "/"로 시작하는 경로 )로 시작
응답 메시지
status-line
= HTTP-version SP status-code SP reason-phrase CRLF
= HTTP 버전 HTTP상태 코드 이유문구
HTTP 상태 코드 : 요청 성공/실패
200 : 성공, 400 : 클라이언트 요청 오류, 500 : 서버 내부 오류
이유 문구 : 사람이 이해할 수 있는 짧은 상태 코드 설명
헤더
메시지 바디