반응형
Notice
Recent Posts
Recent Comments
Link
- Today
- Total
02-02 06:27
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- ReLU
- Optional
- HTTP
- Python
- Linux
- swiftUI
- substr
- 티스토리챌린지
- SWIFT
- deeplearning
- rxswift
- tapply
- rest api
- r
- 오블완
- barplot
- Observable
- cocoapods
- decode
- struct
- SQL
- 시각화
- scheduledTimer
- 연산자
- ios
- Request
- 명령어
- MVC
- sigmoid
- 딥러닝
Archives
iOS 개발 기록 블로그
HTTP/1.1은 무엇일까? 본문
반응형
HTTP란 무엇인가?
- HTTP(HyperText Transfer Protocol)는 클라이언트(브라우저, 앱)와 서버 간에 데이터를 주고받기 위한 규약(프로토콜)입니다.
- HTTP는 상태를 유지하지 않는 비연결성 프로토콜(stateless)로 시작했지만, 시간이 지나며 성능 향상과 보안 문제를 해결하기 위해 발전해 왔습니다.
HTTP 프로토콜의 발전
1. HTTP/1.0 (초기 버전)
- 1996년에 등장한 HTTP의 초기 버전입니다.
- 특징
- 단순 요청-응답 모델: 요청을 보내고, 응답을 받은 후 연결을 바로 끊음.
- 비효율적 연결: 한 번의 요청마다 새로운 TCP 연결을 만들어야 함. 여러 리소스를 로드하는 데 시간이 오래 걸림.
- 캐싱 한계: 기본적인 캐싱만 지원하며, 효율적인 데이터 재사용이 어려움.
- HTTP 헤더 제한적: 헤더 정보가 간단하고 유연성이 부족함.
2. HTTP/1.1 (현재 가장 널리 사용)
- 1997년에 등장하여, 웹 기술 발전에 맞춰 많은 기능이 추가되었습니다.
- 특징
- 지속 연결(Persistent Connection)
- 한 번 TCP 연결을 열면, 여러 요청과 응답을 처리할 수 있음.
- 예: 브라우저가 HTML, 이미지, CSS, JS를 같은 연결에서 받아올 수 있음.
- 연결이 닫힐 때까지 재사용 가능.
- 파이프라이닝(Pipelining, 잘 쓰이지 않음)
- 클라이언트가 여러 요청을 연달아 보내고, 서버가 순차적으로 응답을 반환.
- 하지만 응답 순서 문제로 잘 사용되지는 않음.
- 효율적인 캐싱 지원
- 브라우저와 서버 간 데이터 캐싱을 위한 헤더 추가.
- 예: Cache-Control, Expires, ETag 등.
- 중복 요청을 줄이고 성능을 향상.
- 가변 길이 응답 지원
- 데이터를 전송하는 중에 길이를 모르는 경우에도 전송 가능 (Chunked Transfer Encoding).
- 큰 파일(비디오, 대용량 데이터 등)을 끊어서 전송 가능.
- 호스트 헤더(Host Header)
- 한 IP 주소에 여러 도메인을 지원할 수 있음 (가상 호스팅).
- 예: 동일 서버에서 example.com과 example.org를 구분.
- 지속 연결(Persistent Connection)
3. HTTP/2 (최신 버전)
- 2015년에 등장한 HTTP/2는 속도와 효율성을 크게 개선했습니다.
- 특징
- 멀티플렉싱(Multiplexing)
- 한 TCP 연결에서 여러 요청과 응답을 동시에 처리.
- HTTP/1.1에서는 요청 순서가 막히는 문제가 있었지만, 이를 해결함.
- 헤더 압축(Header Compression)
- 요청/응답 헤더 크기를 줄여 네트워크 대역폭 사용 감소.
- 예: 동일한 헤더를 반복적으로 보내지 않음.
- 서버 푸시(Server Push)
- 클라이언트가 요청하지 않아도, 서버가 미리 관련 리소스를 전송 가능.
- 예: HTML을 요청하면 CSS와 JS를 함께 미리 전송.
- 멀티플렉싱(Multiplexing)
4. HTTP/3 (미래의 HTTP)
- HTTP/3는 기존 TCP 대신 QUIC 프로토콜(UDP 기반)을 사용하여 성능과 보안을 강화했습니다.
- 특징
- 빠른 연결 설정: QUIC은 연결 지연(latency)을 줄임.
- 데이터 손실 복구: HTTP/2는 TCP 기반이라 패킷 손실 시 전체 요청이 지연되지만, HTTP/3는 손실된 데이터만 재전송.
- 보안 강화: HTTPS(암호화) 기능이 기본 내장됨.
HTTP/1.1의 장점
1. 지속 연결로 성능 향상
- 여러 요청을 한 연결에서 처리하므로, 불필요한 TCP 연결 설정/종료가 줄어듭니다.
- 브라우저가 이미지, CSS, JS 파일을 동시에 빠르게 가져올 수 있습니다.
2. 캐싱을 통한 효율성
- 클라이언트가 서버 데이터를 캐싱하면, 동일한 데이터를 반복 요청하지 않습니다.
- 헤더 예시:
- Cache-Control: max-age=3600 (1시간 동안 캐싱)
- ETag: "12345" (데이터가 변경되지 않으면 캐싱 유지)
3. 헤더 유연성
- HTTP/1.1에서는 다양한 헤더를 통해 데이터를 상세히 제어할 수 있습니다.
- Content-Type: 응답 데이터의 형식 지정 (예: application/json).
- Content-Length: 응답 데이터의 길이.
HTTP/1.1의 한계
- 한 연결당 직렬 처리
- 멀티플렉싱이 없어서 한 연결에서 요청을 순차적으로 처리해야 함.
- 많은 요청이 있을 경우 성능 저하.
- 헤더 크기 문제
- 헤더 크기가 커지면, 불필요한 데이터 전송량이 증가.
- 지연(latency) 문제
- RTT(Round Trip Time) 때문에 연결 설정 시간이 오래 걸릴 수 있음.
HTTP/1.1의 실제 사용
- HTTP/1.1은 여전히 많은 웹사이트에서 사용됩니다.
- 최신 브라우저와 서버는 HTTP/2 이상을 지원하지만, HTTP/1.1도 하위 호환성을 위해 사용 가능합니다.
- 예를 들어:
- 클라이언트가 HTTP/2를 지원하지 않으면, 서버는 자동으로 HTTP/1.1로 처리.
반응형
'Back-end' 카테고리의 다른 글
Java, Spring 프레임워크 기초와 IoC, DI의 개념과 iOS 관련 예시로 이해하기 (1) | 2024.11.29 |
---|---|
REST API를 RxSwift+Moya 환경과 접목하여 알아보자 (0) | 2024.11.19 |
REST API 이해하기 (iOS URLSession 사용 예시 포함) (0) | 2024.11.18 |
HTTP의 정의, 기본 작동 원리, 요청/응답 구조, HTTP/HTTPS (1) | 2024.11.17 |
오블완 챌린지 기념 iOS 개발자 서버 개발 찍먹 (5) | 2024.11.15 |