
💠HTTP?
'Hyper Text Transfer Protocol'
➡️ HTML같은 리소스 데이터들을 주고받는 프로토콜
- 모든 것 전송 가능
- HTML,TEXT, 이미지, 음성, 영상,JSON,XML(API) 등
일반적으로 알려진 거의 모든 파일을 전송 - 서버 간 데이터 통신에도 대부분 HTTP를 사용
TCP : HTTP/1.1, HTTP/2
UDP : HTTP/3
HTTP/1.1 주로 사용
하지만 구글이나 네이버같은 사이트를 보면 HTTP/2, HTTP/3를 많이 사용한다.
해당 사이트에서 어떤 프로토콜을 사용하는 지 보는 방법
크롬 브라우저를 기준으로 F12를 눌러 NETWORK상태 창에서Protocol을 보면 나온다 .
없을시 저 부분을 우클릭하여 프로토콜을 추가
만약 아무것도 안나올 시 Filter부분에 뭔가 있는지 확인
🧫 HTTP 특징
- 클라이언트 서버 구조
- Request Response 구조
- 클라이언트는 서버에 요청 전송, 응답 대기
- 서버가 요청에 대한 결과를 만들어서 응답클라이언트 : pc, 모바일, tv 등
- 무상태(Stateless) 프로토콜
- 서버가 클라이언트의 상태를 보존 X
- 장점 : 서버의 확장성 높음(스케일 아웃)
- 스케일아웃: 서버를 여러 대 추가하여 시스템을 확장하는 것
- 단점 : 클라이언트가 추가 데이터 전송 (요청사항을 하나부터 끝까지 한 요청에 알려줘야함)
- 상태유지(Stateful)과 무상태(Stateless)의 차이
- 상태유지 : 중간에 서버가 바뀌면 안된다.
- ( 바뀔 시 상태 정보를 바뀐 서버에게 미리 알려줘야한다.)
- 무상태 : 중간에 다른 서버로 바뀌어도 된다.
- 대용량 트래픽 발생시 스케일 아웃으로 대처가능
- 무상태는 응답 서버를 쉽게 바꿀 수 있다. -> 무한 서버 증설 가능
- 상태유지 : 중간에 서버가 바뀌면 안된다.
- Stateless 실무 한계
- 모든 것을 무상태로 설계할 수는 없다.
- 상태 유지를 해야하는 경우에는 쿠키와 서버 세션등을 사용해 상태 유지
- 단, 상태유지는 최소한으로만 사용
♾️ 비연결성 (connectionless)
연결 유지 모델 : 서버가 클라이언트와 연결을 계속 유지하여
서버 자원을 소모
비연결 모델 : 서버 연결 유지 x, 최소한의 자원으로 유지
(요청과 응답을 한 번 하고 TCP/IP 연결을 끊는다.)
- HTTP는 기본이 비 연결 모델
- 일반적으로 초단위 이하의 빠른 속도 응답
- 한 시간대에 수천명이 서비스를 사용해도
실제 서버의 동시처리 요청은 수십개 이하로 적음- 악의적으로 무한 새로고침 or 연속검색을 하는 경우를 제외
- 서버 자원을 매우 효율적으로 사용 가능
✔️ 한계와 극복
한계
- TCP/IP 새로 연결 - 3 way handshake
- 웹 브라우저로 사이트 요청시 HTML뿐만 아니라 Js, css,추가 이미지 등 수많은 자원이 함께 다운로드
극복
- HTTP 지속연결(Persistent Connections)로 해결
- HTTP/2,3에서 더 많은 최적화
✔️ 지속 연결
- HTTP에서 TCP/IP 연결을 일정시간 유지하여 여러 요청을 하는 것
- 일정 시간 동안 통신이 없으면 연결은 자동으로 끊김
무상태 설계를 하자
📦 HTTP 메세지
GET /search?q=http&hl=ko HTTP/1.1
Host: www.google.com

empty line 공백라인(CRLF) - 필수
message body - html 혹은 이미지, 영상, 파일같은 것
HTTP 메세지 구조
✔️시작라인
요청 메세지
start-line = request-line
request-line = method SP(공백) request-target SP HTTP-version CRLF(엔터)
- HTTP 메소드 (GET : 조회)
- 요청 대상 (/search?q=http&hl=ko)
- HTTP 버전
HTTP 메소드
- 종류 : GET, POST, PUT, DELETE 등
- 서버가 수행해야 할 동작 지정
GET : 리소스 조회
POST : 요청 내역 처리
요청 대상
absolute-path/[?query] (절대경로[?쿼리])
- 절대경로 = '/' 로 시작하는 경로
참고 : *, http://...?x=y 와 같이 다른 유형의 경로 지정 방법도 있다.
📨 응답 메시지

start-line = status-line
status-line= HTTP-version SP status-code SP reason-phrase CRLF
- HTTP 버전
- HTTP 상태 코드 : 요청 성공, 실패
- 200 : 성공
- 400 : 클라이언트 요청 오류
- 500 : 서버 내부 오류
- 이유 문구 : 사람이 이해할 수 있는 짧은 코드 설명 글
🔹 HTTP 헤더
header-field = field-name ":" OWS field-value OWS (OWS:띄어쓰기 허용)
🏷️ field-name은 대소문자 구문 없음 (단, value 는 대소문자 구분)
✔️ 용도
HTTP 전송에 필요한 모든 부가정보
표준 헤더가 너무 많음
필요시 임의의 헤더 추가 가능
- 실제 전송할 데이터
- HTML 문서, 이미지, 영상, JSON 등등 byte로 표현할 수 있는 모든 데이터 전송 가능
HTTP는 단순함 확장 가능
📖 출처 및 참고자료
'Back-End > HTTP' 카테고리의 다른 글
HTTP 상태코드 (0) | 2024.08.17 |
---|---|
HTTP - 메서드 (0) | 2024.08.17 |
HTTP - URI & 웹 브라우저 요청 흐름 (0) | 2023.11.02 |
HTTP - 인터넷 네트워크 (0) | 2023.11.02 |