본문 바로가기
COMPUTER SCIENCE/Network

[Network] Application Layer - Web and HTTP

by 민트맛녹차 2022. 11. 15.

Web page 는 HTML file, JPEG image, Java applet 같은 objects 로 구성되어 있다. 대부분의 web page 는 몇몇 referenced objects 를 포함하는 base HTML file 로 이루어져 있다. objects 는 URL 에 의해 다루어진다. URL 의 예로 'https://www.someschool.edu/someDept/pic.gif:80' 를 볼 수 있다. 'https://' 는 프로토콜(ex. ftp://, telnet:// ...), 'www.someschool.edu'는 hostname, '/someDept/pic.gif' 는 path name, 80 은 port number 를 뜻한다. 

 

HTTP

HTTP(Hypertext Transfer Protocol) 는 Web 의 application-layer protocl 이다. Web 은 client-server 모델로 Chrome 과 Firefox 같은 Web brower 가 client 의 역할을 하고 Web object 를 보관하는 Web server 가 server 역할을 한다. HTTP 는 client 와 server 간 request 와 response 의 방식을 정의한다. 일반적으로 user 가 web page 에 요청을 하면, web browser 는 web server 에 HTTP request message 를 보내고, web server 는 request 를 받아 HTTP response message 에 objects 를 담아 응답한다.

HTTP 는 TCP 를 사용한다. client 와 server 사이에 TCP connection 이 생기면, client 와 server 는 socket interface 를 사용해 HTTP message 를 교환한다. TCP 는 reliable data trafer 을 보장하므로 HTTP 는 loss data 와 TCP 의 detail 한 동작들을 신경쓰지 않아도 된다. 

HTTP 는 stateless protocol 이다. server 는 과거의 client request 에 대한 정보를 유지하지 않는데 이를 stateless 하다고 한다. 참고로, 프로토콜이 state 를 유지하는 것은 어렵다.

 

HTTP Connection

HTTP 는 non-persistence connection 과 persistent connection 을 모두 사용한다.

Non-Persistence Connection

Non-persistence connection 에서는 최대 한 개의 object 가  TCP connection 을 통해 보내지고, connection 은 close 된다. multiple objects 를 다운로드하려면 multiple connections 가 필요하다. 

base HTML file 과 10 JPEG images 로 이루어진 page 를 요청한다고 가정하면 다음과 같은 수행이 일어난다.

  1. HTTP client 가 HTTP server 로 TCP connection 을 시작하고 HTTP server 는 connection 을 accept 해 client 에게 알린다. TCP connection 으로 client 와 server 사이에 (TCP connection) socket 이 생긴다.
  2. HTTP client 는 socket 을 통해 HTTP request message 를 보낸다. 
  3. HTTP server 는 socket 을 통해 request message 를 받는다. 요청하는 object 를 포함한 response message 를 만들어 socket 을 통해 보낸다.
  4. HTTP server 는 TCP connection close 를 한다. (실제로 종료하지는 않는다.)
  5. HTTP client 는 reponse message 를 받고 TCP connection 을 종료한다. client 는 response message 로부터 file 을 추출해 HTML 파일임을 확인하고 10 JPEG objects 를 참조함을 확인한다.
  6. 1 ~5 를 10 jpeg objects 에 대해 각각 반복한다.

RTT(Round Trip Time) 은 small packet 이 client 부터 server 까지 다녀오는데 걸리는 시간을 의미한다. Non-persistence connection 에서는 TCP connnection 시 1 RTT, HTTP request and response 시 1 RTT 가 소요되어 object 당 2RTT + file transmissiontime, 약 2 RTTs 의 시간을 요구한다..

Persistence Connection

Persistence connection 은 mulitple objects 가 client 와 server 사이에 하나의 TCP connection 을 통해 보내진다. server는 response 를 보낸 후에 connection open 하여, open connection 을 통해 연속되는 HTTP messages 가 동일한 client/server 사이에 보내진다. 일정 시간동안 connection 이 사용되지 않으면 HTTP server 가 connection close 를 한다. Non-persistence connection 과 다르게 object 당 최소 1 RTT 의 시간을 요구한다.

 

HTTP Message Format

HTTP message 에는 request 와 response 가 있다. 

HTTP Request Message

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

 

HTTP Request Message 는 ASCII text 로 쓰여졌다.

Request line 은 method field, URL field, HTTP version field 로 구성되어 있다. method filed 는 GET, POST, HEAD, PUT, DELETE 같은 값들을 가진다. 

Header lines 는 server 에 필요한 여러가지 값들이 들어간다. 

POST method 를 사용할 경우, user 가 입력한 form input 이 entity body 에 값이 들어간다.

 

HTTP Response Message

HTTP/1.1 200 OK
Connection: close
Date: Tue, 18 Aug 2015 15:44:04 GMT
Server: Apache/2.2.3 (CentOS)
Last-Modified: Tue, 18 Aug 2015 15:11:03 GMT
Content-Length: 6821
Content-Type: text/html

(data data data data data ...)

Status line 은 protocol version field, status code, status message 로 구성된다. status code 로 request 에 대한 결과를 간단하게 알 수 있다. 

Header lines 는 client 에 필요한 여러가지 값들이 들어간다.

Entity body 는 client 가 요청한 object 를 담은 message 를 의미한다.

 

Cookies

HTTP server 는 statelsess 하지만, user 의 상태를 유지할 수 있도록 HTTP 는 cookie 를 사용한다. cookie 에는 다음과 같이 4가지 구성요소가 있다.

  1. cookie header line of HTTP response message
  2. cookie header line in the HTTP request message
  3. cookie file kept on the user's end system and managed by the user's browser
  4. back-end database at Website

HTTP response 는 cookie 설정을 위해 'Set-cookie' header 를 사용하고, HTTP request 는 client 가 가지고 있는 cookie 를 알리기 위해 'Cookie' header 를 사용한다. cookie 는 authorization, shopping carts, recommendations 등에 사용된다. 이러한 cookie 의 사용은 편의성을 주지만, privacy 의 노출의 위험이 있다.

 

Web Cashing

proxy server 라고도 불리는 Web cache 는 origin Web server 를 대신하여 client 의 HTTP request 를 응답한다. Web cache 는 자체 disk storage 가 있어 최근 요청된 objects 의 복사본을 저장한다. Web cache 를 사용한 HTTP 통신 과정은 다음과 같다.

  1. broswer 는 Web cache 와 TCP connection 을 만든 후, Web cahce 에 object 를 위한 HTTP request 를 보낸다.
  2. Web cahce 는 local storage 에 obejct 의 복사본이 있는지 확인하고, 있다면 Web cache 가 client brower 에게 object 를 포함한 HTTP response message 를  return 한다.
  3. 만약 Web cache 가 object 를 가지지 않는다면, Web cache 는 origin server 와 TCP connection 을 연다. Web cache는 origin server 에 object 를 위한 HTTP request 를 보내고, origin server 는 Web cache 로 object 와 함께 HTTP response 를 보낸다.
  4. Web cache 가 object 를 받으면 local storage 에 object 의 복사본을 저장하고, 복사본을 포함한 HTTP response message 를 client browser 에 보낸다.

위 상황을 보면 Web cache 는 client 이면서 server 임을 알 수 있다. 

Web cache 는 client request 에 대한 response time 을 줄여주고 institution(for example, a company or a university) 의 access link 의 traffic 을 줄여준다. CDNs(Content Distribution Networks) 의 사용으로, Web cache 는 internet 에서 점차 중요한 역할을 하게 되었다.

Conditional GET

cache 에 있는 object 가 최신이 아닐수 도 있는데, HTTP 는 conditional GET 메커니즘을 사용해 cache 의 version 이 최신이 아니라면 object 를 보내지 않도록 한다. Conditional GET message 는 request meesage 가 GET method 를 사용하고 'If-Modified-Sine' header 를 포함한다. 

cache 내에 object 가 없다면, cache 는 server 에 request message 를 보낸 후 object 가 담긴 response message 를 받는다. cache 는 object 를 저장할 때 Last-Modified date 를 함께 저장한다. cache가 If-modified-since : <date> header 를 포함한 GET request 를 보낸다면 server 는 해당 object 의 수정여부를 확인한다. 전달받은 date 이후에 object 가 수정되지 않았다면 server 는 cache 에게 object 없이 304 Not Modified response 를 보낸다. 만약 object 가 수정되었다면 수정된 data 를 포함하여 response 를 보낸다.

 

 

참조
Computer Networking _ A Top Down Approach, 7th, converted

댓글