TEXT, IMAGE, FILE, HTML, JSON 등 다양한 형태의 데이터가 HTTP를 통해 전송된다.
HTTP에도 버전이 존재하며 그중 대부분 HTTP/1.1 (TCP)을 사용한다. 현대에는 HTTP/2, HTTP/3 (UDP)의 사용량이 급속도로 증가하는 추세이다.

HTTP는 인터넷 상에서 불특정 다수의 통신 환경을 기반으로 설계되었다. 만약 서버에서 다수의 클라이언트와 상태나 연결을 계속 유지해야 한다면 이에 따른 많은 서버의 리소스가 필요하다.
서버는 클라이언트의 상태를 보존하지 않는다.
장점
단점
한계점
HTTP 지속연결(Persistent Connections) 하나의 요청에 필요한 요청들이 모두 응답될 때 까지 연결을 유지한다. 연결을 한번만 맺고 끊기 때문에, Connectionless 방식보다 연결 횟수가 적다. → 그만큼 속도가 빨라졌다.

HTTP Message는 요청 메세지, 응답 메세지 두 가지 종류가 있고 구조가 각각 다르다.
Start Line
GET/event
HTTP Request가 전송되는 대상, 절대 경로(”/”로 시작하는 경로)
Query String(= Query Parameter) 에 해당하는 값도 포함한다.
ex) /search?keyword=sparta
1.1Header
Host: spartacodingclub.krfield-name: OWS field-value OWS (OWS : 띄어쓰기 허용) 구조를 가진다.field-name은 대소문자 구분을 하지 않는다.ex) Message Body 내용, 크기, 인증, 브라우저 정보, 서버 정보 등
Empty Line
Message Body
클라이언트 - 서버 사이에 이루어지는 요청, 응답 데이터를 전송하는 방식을 뜻한다.
POST
- 리소스 생성
- 주로 HTML FORM(회원가입, 게시글 작성 등)에 사용된다.
- 요청 데이터를 처리하는 방식에 정해진것은 없다.
- 요청 데이터 처리(로그인 등)에 사용한다.
- 조회시 JSON 요청 데이터가 필요한 경우에도 사용될 수 있다.
- Message Body를 통해 요청 데이터를 전달한다.
GET
- 리소스 조회
1. Query String 미포함하는 경우
- GET의 경우 Message Body가 지원되지 않는 경우가 많아 권장하지 않는다.
2. Query String 포함하는 경우
-서버에 추가적인 데이터 전송을 해야한다면, Message Body가 아닌 Query String(Query Parameter)를 사용한다.
PUT
- 리소스 덮어쓰기
- POST와는 다르게 클라이언트 측에서 리소스를 식별하여 URI를 지정한다.
- 기존 리소스가 존재하는 경우
- 리소스 전체 수정
- 기존 리소스가 존재하고 일부만 변경하는 경우 중요!
- 기존 리소스가 존재하면 완전히 덮어쓰기가 된다.
- 기존 리소스가 없는 경우
- 리소스가 없으면 생성된다.
PATCH
- 리소스 부분 수정
DELETE
- 리소스 삭제
기타 Method
- HEAD
- GET에서 Message Body를 제외하고 상태 줄과 헤더만 반환한다.
- OPTIONS
- 대상 리소스에 대한 통신 가능한 Method를 설명한다.
- CONNECT
- 대상 자원으로 식별되는 서버에 대한 터널을 설정한다.
- 잘 사용하지 않는다.
- TRACE
- 대상 리소스에 대한 경로를 따라 메시지 루프백 테스트를 수행한다.
- 잘 사용하지 않는다.