HTTP와 비지속적 연결

특징)

  • 각 요청-응답 쌍을 개별 TCP 연결에서 처리.
  • 요청된 객체를 서버가 전송한 후 연결이 종료됨.
  • HTML 파일, 이미지 등 여러 객체를 다운로드하려면 객체마다 새로운 TCP 연결을 생성.

예시)

  1. HTTP 클라이언트 프로세스가 서버80번 포트로 TCP 연결
  2. 소켓을 통해 경로를 포함한 HTTP 요청 메시지를 서버로 전달
  3. HTTP 서버 프로세스가 메시지 수신, 경로를 HTTP 응답 메시지에 캡슐화하여 클라이언트로 전송
  4. 클라이언트가 응답 메시지 수신
  5. TCP 연결 종료

 

  • 만약 웹사이트가 1개의 html과 10개의 이미지로 구성되어 있다면, 총 11개의 TCP 연결 생성 → 각 TCP 연결은 한 번의 요청과 응답만 처리함.

 

장단점)

  • 장점: 구현이 간단하며, 요청-응답이 독립적이라 연결 관리를 최소화.
  • 단점:
    • 각 객체마다 새로운 TCP 연결을 설정해야 하므로 추가적인 오버헤드 발생.
    • RTT(왕복 시간)가 객체마다 2번씩 필요하므로 성능이 저하됨.
    • 서버와 클라이언트 모두에서 TCP 버퍼와 변수 관리에 부담.

 

 

HTTP와 지속적 연결

특징)

  • 하나의 TCP 연결을 여러 요청-응답 쌍에서 재사용.
    • 기존 비지속적 연결에서 11개의 TCP 연결을 생성했던 것과 달리, 하나의 연결에서 연속적으로 전송(파이프라이닝).
  • 연결이 일정 시간 동안 유지되며, 동일한 서버에서 여러 객체를 전송 가능.
  • HTTP 1.1의 기본 설정.

장단점)

  • 장점:
    • TCP 연결 설정/종료에 소요되는 오버헤드 감소.
    • 객체마다 2 RTT 대신 전체 페이지에 대해 최소 2 RTT로 처리 가능.
    • 서버와 클라이언트의 자원 사용 감소.
  • 단점:
    • 장시간 연결 유지로 인해 연결 타임아웃 설정이 필요.
    • 잘못된 연결로 인해 여러 요청이 실패할 가능성.

 

HTTP 메시지 포맷

보통 HTTP 요청 메시지의 형식은 다음과 같다.

GET /somedir/page.html HTTP/1.1
Host: www.someschool.edu
Connection: close
User-agent: Mozilla/5.0
Accept-language: fr

 

요청 라인(Request Line): HTTP 요청 메시지 내 첫번째 줄

  • 메서드(보통 GET), url, http 버전으로 구성돼있음.

 

헤더 라인(Header Lines): HTTP 요청 메시지 내 요청 라인을 제외한 나머지

Web proxy caches 때문에 꼭 필요함.

  • Host: 요청 객체가 위치한 서버의 호스트 이름 지정.
  • Connection: 연결 유지 여부 (예: close는 비지속적 연결 요청).
  • User-agent: 요청을 보낸 브라우저 정보
  • Accept-language: 사용자 선호 언어 설정

 

 

 

 

 

+ Recent posts