김영한님의 <모든 개발자를 위한 HTTP 웹 기본 지식>을 수강하고 요약한 내용입니다.
모든 것이 HTTP
HyperText Transfer Protocol → 원래는 HTML을 전송하는 프로토콜이었으나…
이제는 모든 것을 담아서 전송한다.
- HTML, TEXT
- 이미지, 음성, 영상, 파일
- JSON, XML (API)
- 거의 모든 형태의 데이터 전송 가능
- 서버간에 데이터를 주고 받을 때도 대부분 HTTP 사용
HTTP 역사
- HTTP/1.1
- 가장 많이 사용, 우리에게 가장 중요한 버전
- RFC7230~ 버전 문서를 참고하자.
- HTTP/2
- 성능 개선
- HTTP/3
- TCP 대신 UDP 사용
- 성능 개선
HTTP의 특징들
클라이언트 서버 구조
- 클라이언트 → 서버 request
- 서버 → 클라이언트 response
Stateful, Stateless
- 상태 유지(Stateful)
- 서버가 클라이언트의 상태를 보존하기 때문에,
- 항상 같은 서버가 유지되어야 한다.
- 👎 응답 서버를 바꾸기 어렵다 → 해당 서버가 장애가 나면?
- 무상태(Stateless)
- 서버가 클라이언트의 상태를 보존하지 않기 때문에,
- 서버가 바뀌어도 된다.
- 👍 응답 서버를 쉽게 바꿀 수 있다 → 서버 확장성 높음 (스케일 아웃)
- 👎 클라이언트가 추가 데이터를 전송해야 한다
- Stateless 가 좋아보이지만, 로그인과 같은 경우 상태 유지가 필요하다.
- Stateful 은 최소한만 사용
HTTP는 무상태(Stateless) 프로토콜이다.
Connectionless
- 비연결성(Connectionless)
- 자원을 주고받을때만 연결, 요청-응답이 끝나면 연결 끊기
- 장점 👍
- 실제 서버에서 동시에 처리하는 요청이 적어진다.
- 서버 자원을 효율적으로 사용 가능
- 단점 👎
- TCP/IP 연결을 새로 맺어야 함 → 3 way handshake 시간 추가
- 웹 브라우저로 사이트를 요청하면 요청 시마다 수많은 자원이 다운로드
→ HTML 다운로드 → 연결 끊음 → JS 다운로드 → 연결 끊음 → 이미지 다운로드 …
→ HTTP 지속 연결로 문제 해결
HTTP는 비연결성(Connectionless) 프로토콜이다.
HTTP 메시지
Request | Response | |
start-line | [HTTP 메서드] [요청 대상 path] [HTTP 버전] ✅ request-line |
[HTTP 버전] [HTTP 상태 코드] [이유 문구] ✅ status-line |
header | [필드 이름]: [필드 값] ✅ HTTP 전송에 필요한 모든 부가정보 |
|
empty line | ✅ 공백 라인 | |
body | ✅ 실제 전송할 데이터 ✅ byte로 표현할 수 있는 모든 데이터 전송 가능 |
'TIL > 네트워크' 카테고리의 다른 글
[240219] HTTP 상태코드 (1) | 2024.02.19 |
---|---|
[240216] HTTP 메서드 (0) | 2024.02.16 |
[240210] 주소창에 www.google.com을 입력하면 발생하는 일 (0) | 2024.02.10 |
[240209] URI, URL, URN (1) | 2024.02.09 |
[240209] 프로토콜 (0) | 2024.02.09 |