HTTP (HyperText Transfer Protocol)
웹에서 클라이언트와 서버 간에 데이터가 교환되는 방식을 정의하는 핵심 인터넷 프로토콜입니다.
- 웹 브라우저와 웹 서버 간의 통신을 가능하게 합니다.
- 월드 와이드 웹에서 데이터 전송의 기반을 형성합니다.
- 시스템 간 데이터 요청 및 전달에 대한 규칙을 정의합니다.
본래 HTTP는 문서 전송이 주 목적이었으나 현재는 모든 바이너리 데이터를 전송하는데 사용
HTTP Message

Request Messsage
- start line: method + path + http version
- header: http 전송에 필요한 모든 부가정보를 갖는다
- empty line
- message body: 응답 본문
Response Message
- Status Line: http version + status code + reason-phase
- Response Headers
- empty line: 요청에 대한 모든 메타 정보가 전송되었음을 알림
- Response Message Body
특징
- 무상태: 각 요청은 독립적이며 서버는 이전 상호 작용 정보를 저장하지 않습니다.
- 비연결성: 클라이언트와 서버가 한 번 연결을 맺은 후 요청-응답을 마친 후 연결을 끊는다.
- 텍스트 기반: 메시지는 일반 텍스트 형식이므로 읽고 디버깅하기 쉽습니다.
- 클라이언트-서버 모델: 리소스 요청 및 제공에 있어 클라이언트-서버 아키텍처를 따릅니다.
- 요청-응답 방식: 클라이언트와 서버 간의 요청-응답 주기를 기반으로 작동합니다.
- 요청 메서드: 리소스에 대한 다양한 작업을 위해
GET,POST,PUT,DELETE와 같은 다양한 메서드를 지원합니다.
무상태성
- 서버는 클라이언트의 상태를 보존하지 않는다.
- 서버를 클라이언트로부터 무상태로 관리한다면 서버에 대한 유연한 확장이 가능하다.
- 그러나 모든 기능들을 무상태로 관리하는데에는 한계가 존재한다.
- 이러한 문제를 해결하기 위해 쿠키, 세션, JWT등이 주로 활용된다.
비연결성
- HTTP는 불특정 다수의 통신 환경을 기반으로 설계됐다.
- 서버가 다수의 클라이언트와 연결을 계속 유지시, 이에 따른 리소스가 지속적으로 발생한다.
- 연결을 유지하기 위한 리소스를 줄여 더 많은 연결을 할 수 있다.
- TCP의 TCP 3-Way Handshake 과정에서 지속적인 오버헤드 발생한다.
- 이에 대한 해결책으로 오버헤드를 줄이기 위해 HTTP Keep Alive 속성을 사용한다.
클라이언트 서버 구조
- 클라이언트 서버에 요청을 보내고, 응답을 대기
- 서버가 요청에 대한 결과를 만들어서 응답
출처 및 참고자료
https://www.geeksforgeeks.org/html/what-is-http/
https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/Messages