Chapter 3 HTTP 기본
이 학습 자료는 김영한님의 인프런 강의를 참고해서 만들었습니다.
1. HTTP
- HyperText Transfer Protocol
- HTTP 메시지에 모든 것을 전송(이미지, 음성, 영상, JSON 등)
1.1 기반 프로토콜
- TCP : HTTP/1.1, HTTP/2
- UDP : HTTP/3
- 현재 HTTP/1.1 주로사용
1.2 HTTP 특징
- 클라이언트 - 서버 구조
- 무상태 프로토콜(스테이스리스), 비연결성
- 단순함, 확장 가능
- HTTP 메시지
1.2.1 클라이언트 서버 구조
- Request Response 구조
- 클라이언트는 서버에 요청을 보내고, 응답을 대기
- 서버가 요청에 대한 결과를 만들어서 응답
1.2.2 무상태(Stateless) 프로토콜
- 서버가 클라이언트의 상태를 보존X
- 장점 : 서버 확장성 높음(스케일 아웃 : 수평 확장 유리), 아무 서버에서나 호출 가능(상태를 보존하지 않기 때문)
- 단점
- 클라이언트가 추가 데이터 전송
- 로그인을 한 경우, 로그인 상태를 유지하기 해야하기 때문에 사용X
1.2.3 비 연결성(connectionless)
- 클라이언트의 연결을 유지하면 계속 서버의 자원을 소모 → 비효율적
- 연결을 유지하지 않게 해야 함
- HTTP는 기본적으로 연결을 유지하지 않음.
- 장점
- 자원을 효율적으로 사용 가능 → 일반적으로 초 단위의 이하의 빠른 속도로 응답 가능
- 수천명 서비스라 할지라도 실제 서버에서 동시에 초리하는 요청은 수십개 이하
- 한계
- TCP/IP 연결을 새로 맺어야 함 - 3 way handshake 시간 추가
- 웹 브라우저로 사이트 요청시에 HTML 뿐만 아니라 자바스크립트, css, 추가 이미지 등 수 많은 자원이 함께 다시 다운로드 됨
- 해결
- HTTP 지속 연결(Persistent Connections)로 해결
1.2.4 HTTP 메시지
- 시작 라인(start-line = request-line/status-line)
- HTTP 요청 메세지
- request-line =
method SP(공백) request-target SP HTTP-version CRLF(엔터)
GET /search?q=hello&hi=ko HTTP/1.1
GET
(조회) : HTTP 메서드/search?q=hello&hi=ko
: 요청 대상(절대 경로(/
)로 시작)HTTP/1.1
: HTTP Version
- request-line =
- HTTP 응답 메세지
- status-line =
HTTP-version SP status-code SP reason-phrase CRLF
status-code
: HTTP 상태 코드로써 요청 성공, 실패를 나타냄- 200 : 성공
- 400 : 클라이언트 요청 오류
- 500 : 서버 오류
reason-phrase
: 이유 문구(사람이 이해할 수 있는 짧은 형태의 글)
- status-line =
- HTTP 요청 메세지
- HTTP 헤더
- HTTP 전송에 필요한 모든 부가정보
- 필요시 임의의 헤더 추가 가능
- 표준 헤더가 너무 많음
header-field = field-name ":" OWS field-value OWS
(OWS : 띄어쓰기 가능 )
- HTTP 메시지 바디
- 실제 전송할 데이터
- HTML 문서, 이미지, 영상, JSON등 byte로 표현할 수 있는 모든 데이터 전송 가능
'CS > [NETWORK]' 카테고리의 다른 글
Chapter 6 HTTP 상태 코드 (0) | 2021.11.18 |
---|---|
Chapter 5 HTTP 메서드 활용 (0) | 2021.11.16 |
Chapter 4 HTTP 메서드 (0) | 2021.11.11 |
Chapter 2 URI와 웹 브라우저 요청 흐름 (0) | 2021.11.05 |
Chapter 1 인터넷 네트워크 (0) | 2021.11.02 |