본문 바로가기
네트워크

[네트워크] Chap 2.2 - HTTP

by 개발 고양이 2024. 11. 12.

Web and HTTP (HyperText Transfer Protocol)

Base HTML-file : Text + URL들(Obejct들을 가리킴)

Each object (including base-html file) is separately requested & received by using a separate HTTP request / response mesage => HTTP는 Object 단위로 데이터를 주고받음. 

 


HTTP

Web의 application layer protocol

Client-Server 모델을 사용한다.

 - client : object들을 요청, 수신, display하는 browser

 - server : 요청에 따라 object들을 보내주는 Web server


HTTP Operation

uses TCP

HTTP는 TCP (loss-sensitive)를 사용한다. (HTTP/1.1 기준)

  1. TCP connection set-up
    - server는 80번 port를 바인딩해놓고 기다리고 있음
    - client가 서버의 80번 port로 TCP connection 요청 => socket 생성
    - server는 client로부터 TCP connection을 수락
  2. HTTP messages exchanges
    : client(Browser)와 server(Web) 간 HTTP msg들을 교환

  3. TCP connection closed
    : msg 교환이 끝나면 TCP connection은 종료됨

connection oriented protocol은 connection set-up을 했으면 반드시 close도 해야함 => pair하게 진행됨

 

 

HTTP is "stateless"

server는 HTTP request에 대한 response에만 집중하며, 이전의 clinet request 정보를 따로 저장해두지 않는다.

(client가 이전의 데이터를 다시 요청해도 다시 서버에 연결을 하여 동일한 작업을 수행해야함)

stateless로 인해 서버는 단순하게 동작할 수 있고, 상태를 저장해야 하는 부담을 덜 수 있다.

=> Dynamically load balance가 가능!

 

하지만 로그인 상태 유지와 같이 클라이언트의 상태를 저장해야하는 경우가 있는데 이때는 cookie 등을 사용한다. 


HTTP connections - 3 types

non-persistent HTTP

(without parallel, with parallel로 다시 나뉜다.)
① TCP connection opened
② 하나의 TCP connection으로 하나의 object만 전송
③ TCP connection closed
=> 서버 쪽의 TCP가 한번 response하면 끊는다.
=> multiple objects → requires multiple connections
ex) object가 10개인 경우, 10번의 connection이 필요하다

 

persistent HTTP

① TCP connection opened
② 하나의 TCP connection에서 multiple objects 전송 가능
③ TCP connection closed
=> multiple objects → can be sent over single TCP connection


Non-persistent HTTP

 

 

0. HTTP server는 80번 port에서 TCP 연결을 기다리고 있음.

 

//// TCP connection set-up

1a. HTTP client가 TCP connection 요청(initiate)

1b. 서버가 TCP connection 수락

 

2. HTTP client는 URL을 포함한 HTTP request msg를 socket에 보냄.
(msg - client가 요구하는 object 정보가 담겨 있음)

 

3. HTTP server는 request msg를 받고,
    client가 요청한 object를 포함하는 response message를 socket으로 보냄. 

 

4. HTTP server가 TCP connection 닫음.

 

5. HTTP client는 html 파일이 포함된 response msg를 받고, html에 display.

 

6. 객체 수만큼 위 단계를 반복

 

 

 

 

 

Response time

RTT : 한 packet이 end-to-end로 one round trip 하는데 소요되는 시간

 

object 하나 당 2 RTT 걸림

 

N개의 obejct일때 총 response time

처음에 base html 갈 때 한세트 (2 RTT), n개의 object를 separate하게 한세트(2 RTT)씩

=> (1 for TCP + 1 for request&response) * (1+N)

      = 2 * (1+N)  RTT

 

 


Persistent HTTP

 

지속적으로 서버가 TCP를 안끊고 쓰겠다는 것

즉 연결을 닫지 않고 유지 → object가 몇개이든 1 RTT만 소요된다.

 

total response time = object가 몇개든 상관 없이 3 RTT

(pipelining 을 적용한 persistent HTTP 이야기!)

(만약 persistent HTTP가 no pipelining이라면, total response time은 (2 RTT + (1 * n)) = (2 + n) RTT이다. 

 

 

 

 

HTTP pipelining (HTTP/1.1)

Multiple HTTP request msg can be sent over 1 TCP connection without waiting for each response msg

 

user-perceived delay

결과적으로 전체의 delay는 똑같지만, user가 느끼는 delay는 달라질 수 있음

(ex. Big object가 앞에, small object가 뒤에 오면 user가 느끼는 delay는 늘어남)

 


HTTP message

2가지 타입이 있다 : request / response

 

HTTP request message

 

GET msg에서 갖고싶어하는 파일은 index.html

 

Keep-Alive
: persistent HTTP를 쓴다는 뜻
: 한번 열면 115초 동안 TCP Connection을 끊지 말아라

 

 

 

 

 

HTTP response message

 

HTTP/1.1
: HTTP 버전

 

200 OK
: 여기에 내가 원하는 object가 있다는 뜻
=> client가 원하는 object를 줄 수 있다

 

Last-Modified
: response msg에 전송되는 정보가 마지막으로 update된 시간

 

Keep-Alive
: 10초 안에 다시 요청하면 connection 유지, 100번을 넘어가면 stop