HTTP는 클라이언트와 서버 간에 통신을 한다
- 클라이언트는 텍스트, 이미지 등과 같은 리소스가 필요하다고 요구하고 서버가 이 리소스를 제공함
리퀘스트와 리스폰스를 교환하여 성립
- 클라이언트는 서버에 리퀘스트(Request)를 보내고, 서버는 리스폰스(Response)로 응답한다.
GET /index.html HTTP /1.1
Host: www.hackr.jp
- 리퀘스트 메시지는 메소드, URI, 프로토콜 버전, 옵션 리퀘스트 헤더 필드, 엔티티로 구성됨
- HTTP 서버 상에 있는 “index.html” 리소스가 필요하다는 리퀘스트
- GET: 서버에 요규하는 종류 (메소드)
- index.html: 리퀘스트 URI로서 요구 대상인 리소스를 나타냄
- HTTP /1.1: HTTP 버전 번호
HTTP /1.1 200 OK
Date: Tue, 10 Jul 2012 06:50:15 GMT
Content-Length: 362
Content-Type: text/html
<html>
...
- 리스폰스 메시지는 프로토콜 버전, 상태 코드와 설명, 옵션의 리스폰스 헤더 필드와 바디로 구성됨
- 200 OK: 리퀘스트의 처리 결과를 나타내는 상태 코드와 설명 (OK가 상태 코드 설명 부분)
- 헤더 필드: 리스폰스가 발생한 일시 등등
- 빈 줄 아래부터 바디(body)라고 불리는 리소스 본체가 됨
HTTP는 상태를 유지하지 않는 프로토콜
- HTTP는 Stateless 프로토콜
- 이전에 보냈던 리퀘스트나 받은 리스폰스를 전혀 기억하지 않음
- 많은 데이터를 빠르고 확실하게 처리하기 위해서
- 상태를 계속 유지해야 하는 필요성에 따라 쿠키라는 기술이 도입됨
- 쿠키로 인해 HTTP를 이용한 통신에서도 상태를 계속 관리할 수 있게 되었음
서버에 임무를 부여하는 HTTP 메소드
- GET: 리소스 획득
- 리퀘스트 URI로 식별된 리소스를 가져올 수 있도록 요구함
- POST: 엔티티 전송
- 엔티티: 리퀘스트와 리스폰스의 페이로드(payload)로 전송되는 정보
- PUT: 파일 전송
- 리퀘스트에 포함된 엔티티를 리퀘스트 URI로 지정한 곳에 보존하도록 요구함
- 단 인증 기능이 없어서 누구든지 파일 업로드가 가능하기 때문에 보안 상의 이유로 잘 사용하지 않음
- DELETE: 파일 삭제
- 리퀘스트 URI로 지정된 리소스의 삭제를 요구함
- PUT 메서드와 마찬가지로 인증 기능이 없기 때문에 잘 사용하지 않음
지속 연결로 접속량을 절약
- HTTP 초기 버전에서는 HTTP 통신을 한 번 할 때마다 TCP에 의해 연결과 종료를 했음
- 하지만 하나의 HTML에 여러 이미지가 포함되어 있는 경우 각 이미지를 획득하기 위해 매번 TCP 연결과 종료를 하게 되어 통신량이 늘어나는 단점이 발생함
지속 연결 (Persistent Connections)
- 어느 한쪽이 명시적으로 연결을 종료하지 않는 이상 TCP 연결을 계속 유지함
- 1회의 TCP 커넥션 연결로 리퀘스트와 리스폰스를 여러 번 교환함
- 장점
- TCP 커넥션의 연결과 종료를 반복하는 오버헤드를 줄여주기 때문에 서버 부하가 경감됨
- HTTP 리퀘스트와 리스폰스가 빠르게 완료되기 때문에 웹 페이지를 빠르게 표시 가능
파이프라인화 (HRRP pipelining)
- 여러 리퀘스트를 병행해서 보내는 것이 가능
- TCP 커넥션 속도가 가장 빠르다 (개별 연결 < 지속 연결 < 파이프라인화)
쿠키를 사용한 상태 관리
- 쿠키는 리퀘스트와 리스폰스에 쿠키 정보를 추가해서 클라이언트의 상태를 파악하기 위한 시스템
- 쿠키 사용 로직
- 서버에서 리스폰스로 보내진 Set-Cookie라는 헤더 필드에 의해 쿠키를 클라이언트에 보존함 (서버가 쿠키를 발행)
- 다음번에 클라이언트가 같은 서버로 리퀘스트를 보낼 때, 보관하고 있던 쿠키를 자동으로 넣어서 보냄
- 서버는 클라이언트가 보내온 쿠키를 확인해서 어느 클라이언트가 접속했는지 체크하고 서버 상의 기록을 확인해서 이전 상태를 알 수 있음
이 글은 《그림으로 배우는 Http & Network Basic》를 참고하여 작성하였습니다.