TL;DR
HTTP는 클라이언트가 서버의 리소스를 가져오기 위한 프로토콜
용어
Request
요청, 클라이언트가 서버로 전송하는 메시지
Response
응답, 서버가 클라이언트로 전송하는 메시지
Client; user-agent
사용자를 대변하는 도구, 주로 브라우저를 의미
Web Server
요청에 적합한 콘텐츠를 제공하는 컴퓨터 또는 프로그램
Proxy
클라이언트와 서버 사이에서 다양한 기능을 수행하는 컴퓨터 또는 프로그램
기능
- 캐싱: 준비된 결과 반환
- 필터링: 유해 콘텐츠 차단
- 로드 밸런싱: 트래픽을 여러 서버로 분산
- 인증: 리소스 접근 제어
- 로깅: 이력 저장
기본 이념
Simple
사람이 쉽게 읽을 수 있도록 고안하여 진입장벽을 낮춤
Extensible
HTTP/1.0 스펙에 소개된 HTTP 헤더를 기반으로 새로운 기능을 쉽게 추가 가능
Stateless
각 요청들의 상태를 저장하지 않아 서로 독립적이다. 상태가 필요한 경우, 헤더에 HTTP 쿠키를 추가하여 세션을 생성.
Connection
HTTP는 전송 프로토콜과 격리되어 있어 유연하게 선택 가능하다.
- HTTP/1.0, 요청마다 새로운 TCP 연결 생성
- HTTP/1.1, 파이프라이닝 개념을 도입 시도했으나 구현이 어려움을 입증
- HTTP/2.0, 멀티플렉스 개념을 도입하여 단일 연결에서 다중 메시지 전송
- QUIC, 구글에서 실험중인 UDP 기반 전송 프로토콜
기능
HTTP 헤더를 기반으로 점차 추가됨
캐시
- 웹문서가 캐시되는 방식 제어
- 서버는 캐시 대상과 기간을 프록시와 클라이언트에게 지시 가능
- 클라이언트는 캐시된 문서를 무시하라고 프록시에게 지시 가능
Origin 제약 완화
- 브라우저는 개인정보침해를 막기 위해 origin 제약 강제
- 동일한 origin에서 온 페이지만 웹페이지 전체 정보에 접근 가능
- 헤더를 통해 제약을 완화시키고 다른 도메인으로부터 받은 정보를 취합해서 제공 가능
인증
사용자의 접근 권한 제어
프록시와 터널링
특정 머신들의 실제 주소를 숨긴 상태로 사용
세션
사용자를 식별하기 위해 서버에 상태를 만들어 클라이언트 정보 기록
HTTP 메시지
Request
구성요소
- HTTP 메서드: 클라이언트가 수행하고 싶은 동작 정의
- 경로: 요청할 리소스의 URL에서 프로토콜, 도메인, 포트를 제거한 문자열
- 버전: HTTP 버전
- 헤더: 서버에 전달할 추가 정보
- 본문: 특정 메서드를 위한 데이터를 넣는 영역
Response
구성요소
- 버전: HTTP 버전
- 상태 코드: 요청의 성공 여부와 이유를 의미
- 상태 메시지: 상태 코드를 간략하게 설명
- 헤더: 클라이언트로 전달할 추가 정보
- 본문: 반환할 리소스를 넣는 영역
참고자료