본문 바로가기
네트워크

HTTP 프로토콜의 구조

by heereal 2023. 7. 13.

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 커넥션 속도가 가장 빠르다 (개별 연결 < 지속 연결 < 파이프라인화)

 

쿠키를 사용한 상태 관리

  • 쿠키는 리퀘스트와 리스폰스에 쿠키 정보를 추가해서 클라이언트의 상태를 파악하기 위한 시스템
  • 쿠키 사용 로직
    1. 서버에서 리스폰스로 보내진 Set-Cookie라는 헤더 필드에 의해 쿠키를 클라이언트에 보존함 (서버가 쿠키를 발행)
    2. 다음번에 클라이언트가 같은 서버로 리퀘스트를 보낼 때, 보관하고 있던 쿠키를 자동으로 넣어서 보냄
    3. 서버는 클라이언트가 보내온 쿠키를 확인해서 어느 클라이언트가 접속했는지 체크하고 서버 상의 기록을 확인해서 이전 상태를 알 수 있음

 


이 글은 《그림으로 배우는 Http & Network Basic》를 참고하여 작성하였습니다.

'네트워크' 카테고리의 다른 글

HTTP와 연계하는 웹 서버  (0) 2023.09.04
HTTP 상태 코드  (0) 2023.07.28
HTTP 통신  (0) 2023.07.21
웹과 네트워크의 기본  (0) 2023.07.13

댓글