Software Courses/Network

Application : HTTP

김 정 환 2020. 12. 29. 21:05
반응형
본 내용은 한양대학교 이석복 교수님의 강의를 참고하여 정리하였습니다. 교재는 Pearson/Addison Wesley에서 출판한 Computer networking : a top-down approach입니다.

 

HTTP (Hyper Text Transfer Protocol)

    - 인터넷에서 데이터를 주고 받을 수 있는 프로토콜

 

    - Hyper Text : 사용자가 한 문서에서 다른 문서로 접근할 수 있는 텍스트

https://ko.wikipedia.org/wiki/%ED%95%98%EC%9D%B4%ED%8D%BC%ED%85%8D%EC%8A%A4%ED%8A%B8

    - TCP 기반

        * TCP connection 생성

 

    - Stateless

        * 서버는 이전 clients의 요청에 대한 정보를 기록하지 않음

        * 단지 요청이 오면 보내기만 함

 

    - 동작

        * 간단한 동작

        * Client는 Hyper Text를 요청 

        * Server는 Hyper Text를 보냄

 

 

 

HTTP connection 종류

    - TCP 연결의 지속적(persistent) 사용 여부에 따라 분류

 

1) Non-persistent HTTP

    - TCP를 통해 메시지를 주고 받은 뒤에 TCP 연결을 끊음

    - 비효율적

 

    - 예시

        * 상황 : 사용자가 www.someschool.edu/someDepartment/home.index를 입력하여 텍스트와 jpeg 10개를 포함하는 자료를 받으려고 한다.

 

        * 과정

            1. Client는 Server의 80번 포트를 통해 www.someschool.edu와 TCP 연결 요청

            2. Server는 TCP 연결을 수락하고 Client에게 알림

            3. Client는 someDepartment/home.index를 원한다는 HTTP 요청 메시지를 보냄

            4. Server는 someDepartment/home.index를 보내는 HTTP 응답 메시지를 보냄

            5. Client과 Server는 TCP 연결을 끊음

            6. Client는 받은 HTML 파일을 parsing하고 필요한 jpeg 파일을 받기 위해서 1~5번 반복

 

 

2) Persistent HTTP

    - TCP를 통해서 메시지를 주고 받은 뒤에 TCP 연결 유지

    - 효율적. 그 이유는, 매번 자료를 요청할 때 TCP 연결을 위한 시간을 사용하지 않기 때문에

 

    - 예시

        * 상황 : Client가 요청한 object를 모두 받을 때까지 걸리는 시간은?

            + Control message(e.g. HTTP request) : K bit long

            + Base HTML object : L bits

            + N reference object(jpeg) : L bit long

            + Link bandwidth : R bps

            + Propagation delay : d seconds

        * 방법 : Transmission delay와 Propagation delay를 이용

            + TCP 연결하는데 걸린 시간 : 2 * (K/R + d)

            + HTML 요청과 응답에 걸린 시간 : (K/R + d) + (L/R + d)

            + 이미지 요청과 응답에 걸린 시간 : 10 * {(K/R + d) + (L/R + d)}

            + 총 걸린 시간 : 13K/R + 11L/R + 24d

 

        * 더 효율적인 방법으로 바꾸기

            + Parsing을 통해 10개의 이미지를 한 번에 묶어서 요청하는 것은 어떨까?

        * 방법

            + TCP 연결하는데 걸린 시간 : 2 * (K/R + d)

            + HTML 요청과 응답에 걸린 시간 : (K/R + d) + (L/R + d)

            + 이미지 요청과 응답에 걸린 시간 : (10K/R + d) + (10L/R + d)

            + 총 걸린 시간 : 13K/R + 11L/R + 6d

 

 

 

HTTP message

1) HTTP request message

    - 구성 : Request line + Header + Body

GET https://www.zerocho.com HTTP/1.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) ...
Upgrade-Insecure-Requests: 1

(공백)

본문

    - Request line : 데이터 처리 방식(HTTP 메소드) + 주소 + HTTP 버전

 

    - Header : 요청 정보

        + User-Agent : 사용자 웹 브라우저 종류 및 버전 정보

        + Accept : 웹 서버로부터 수신되는 데이터 중 웹 브라우저가 처리할 수 있는 데이터 타입

        + Cookie : 사용자 정보를 기억하기 위한 값

        + Referer : 현재 페이지 접속 전에 어느 사이트를 경유 했는지 알려주는 URL 

        + Host : 사용자가 요청한 도메인 정보

 

    - Body : HTTP의 페이로드

 

 

2) HTTP response message

    - 구성 : Status line + Header + Body

HTTP/1.1 200 OK
Connection: keep-alive
Content-Encoding: gzip
Content-Length: 35653
Content-Type: text/html;

<!DOCTYPE html><html lang="ko" data-reactroot=""><head><title...

    - Status line : HTTP 버전 + 상태 코드 + Reason-phrase

        * 상태 코드

            + 200 : OK

            + 404 : Not Found

 

    - Header : 응답 정보

        + Date

        + Server

        + Content-type

        + etc

 

 

 

Cookies

    - 부여된 특정 번호

    - HTTP의 Stateless를 보완하기 위한 방법

 

    - 예시

        * 상황 : 본인이 아마존에서 상품을 구매

            + 본인은 아마존 URL을 입력

            + 웹 브라우저는 HTTP request를 만들면서 컴퓨터에 cookie file에서 아마존 URL에 대한 cookie를 탐색

            + 없으면, HTTP request msg를 보냄

            + 아마존 server는 client가 새로 접속해서 ID를 생성하고 본인이 했던 작업(책 주문)을 database에 저장

            + 아마존 server는 본인에게 HTTP response를 수행하면서 cookie 번호 1234를 보냄

            + 본인 컴퓨터는 cookie를 저장

            + 본인이 아마존에 다시 접속할 때, cookie를 가지고 요청

            + 아마존 서버는 cookie를 보고 database에 저장된 사용자의 정보를 가져와서 자동 로그인을 하거나, 상품을 추천하는 등의 서비스를 수행

 

 

 

참조

    - HTTP 블로그 1

    - HTTP 블로그 2

    - HTTP message 블로그

반응형

'Software Courses > Network' 카테고리의 다른 글

Application : DNS  (0) 2020.12.30
Application : Proxy server  (0) 2020.12.30
Application layer : 개요  (0) 2020.12.29
네트워크 구성요소 : Network Core  (0) 2020.12.28
네트워크 구성요소 : Network Edge  (0) 2020.12.28