[네트워크] HTTP
in CS
HTTP (HyperText Transfer Protocol)
- 서버 및 클라이언트 간 데이터 전송을 위한 응용 계층 프로토콜
- 초기에는 www 상 html 문서를 전달하는데 주로 이용
- 현재 이미지, 비디오, 음성 등 거의 모든 형식의 데이터 전송 가능
HTTP 특징
- 클라이언트/서버 구조(요청-응답 방식)
- URI 로 리소스 식별
- TCP/IP 프로토콜 이용
- 비연결성 프로토콜(1.0 기준)
- 무상태성 프로토콜(쿠키, 세션, 또는 토큰으로 상태 관리)
HTTP 버전별 차이
HTTP 1.0
- 96년에 발표
- 1.0 초기에는 TCP 연결이 3-way handshake 로 이루어졌음(SYN -> SYN, ACK -> ACK)
- 5개의 오브젝트를 가진 웹 페이지가 있다면 총 5번의 3-way 핸드쉐이크를 해야함
- 이를 개선하기 위해 Persistent Connection(Keep alive) 기술이 등장
- 클라이언트가 서버에게 요청 시 헤더에
connection: keep-alive
를 추가 - 서버에서는 클라이언트의 요청을 받아 동일한 헤더를 포함하여 응답 (HTTP 응답 이후 끊지 않고 TCP 연결을 계속하겠음)
- 클라이언트가 서버에게 요청 시 헤더에
HTTP 1.1
- 99년에 발표
- 1.0 의 Persistent Connection 기능이 디폴트로 장착됨(
connection: close
헤더를 붙이는 경우에만 응답 이후 TCP 연결을 끊음) - 각 요청들의 응답을 순차적으로 기다리는 문제를 해결하기 위해 요청들을 한꺼번에 보내고 응답 처리를 한꺼번에 받는 Pipelining 기술이 등장(네트워크 레이턴시 감소)
- 클라이언트는 각 요청에 대한 응답을 기다리지 않고, 여러개의 HTTP 요청을 보냄
- 하나의 TCP 연결에서 복수개의 HTTP 요청을 담아서 보냄
- TCP 특성상 응답 순서가 보장되어야 하기 때문에, 앞의 요청을 처리하는데 오래 걸리면 뒤 요청들의 응답도 늦게 처리 됨(HOL Blocking: Head Of Line Blocking)
HTTP 2.0
- 15년에 발표
- gRPC 가 HTTP 2.0 기반
Multiplexed Streams
- 한 커넥션에서 여러개의 메시지를 주고 받을 수 있으며, 응답은 순서에 상관없이 스트림으로 주고 받음
- 스트림이 뒤섞여도 stream number 를 이용해 수신측에서 재조합함
Server Push
- 클라이언트가 요청하지 않은 리소스를 서버가 마음대로 보냄
- 클라이언트는 html 만 요청하더라도, 서버가 이를 분석하여 이에 필요한 css, jpg 등의 리소스들을 보냄으로써 클라이언트의 요청을 최소화 함
Header Compression
- 헤더에서 중복되는 필드는 재전송하지 않도록 함
- HTTP 헤더 자체를 해시 테이블과 허프만 코딩을 이용해 압축
HTTP 3.0
- UDP 기반인 QUIC 프로토콜 사용
- QUIC 프로토콜에서 TLS에 의해 처리되는 인증 및 암호화 같은 보안 기능을 제공하여 오버헤드가 감소
HTTP 메소드
GET
리소스 획득. 서버에 존재하는 데이터를 요청
POST
엔티티 전송. 서버에 데이터를 생성하는 것을 요청
PUT
서버에 존재하는 데이터를 수정하거나 존재하지 않으면 생성
PATCH
- entity의 일부만 바꿈(ex - 일부 fields)를 바꿈.
- PUT replaces an existing entity. If only a subset of data elements are provided, the rest will be replaced with empty or null.
DELETE
파일 삭제. PUT매서드와 반대. 인증기능이 없어서 REST를 사용하는 경우에 사용.
HEAD
GET과 같은 기능이지만 메시지 바디는 반환 안함. URI 유효성과 리소스 갱신 시간을 확인하는 목적으로 사용.
OPTIONS
- 제공하고 있는 메소드의 문의. 리퀘스트 URI로 지정한 리소스가 제공하고 있는 메소드를 조사하는데 사용함.
- CORS 허용 확인 시 사용(preflight)
TRACE
경로조사. 프록시등을 중계할 때 추적을 위해 사용. 크로스 사이트 트레이싱(XST) 같은 공격을 일으킬 수 있으므로 거의 안쓰임.