Web and HTTP

eunsukim·2024년 10월 11일

Web and HTTP

web page는 오브젝트로 구성되며, 해당 오브젝트들은 여러 웹 서버에 저장되어있다. 오브젝트는 HTML, JPEG, Java, Audio 등 다양한 형태로 존재한다. 웹 페이지는 base HTML 파일로 구성되며, 이는 다양한 오브젝트들을 URL로서 참조할 수 있다.


HTTP overview

HTTP: Hyper Text Transfer Protocol

  • web's application-layer protocol
  • client/server model:
    • client: 요청 또는 수신하는 브라우저. 웹 오브젝트를 display한다.
    • server: 웹서버는 요청에 따라 응답을 보낸다.

HTTP는 TCP를 사용한다.

  1. 클라이언트는 서버에 port 80 TCP 연결을 시작한다.
  2. 서버는 해당 TCP 연결을 수신한다.
  3. HTTP 메시지가 클라이언트와 서버간에 교환된다.
  4. TCP 커넥션이 종료된다.

HTTP는 상태정보를 저장하지 않는다.

  • 서버는 지난 클라이언트에 대한 정보를 유지하지 않는다.

HTTP two type

Non-persistent HTTP

  1. TCP connection opened.
  2. 하나의 오브젝트만 가져온다.
  3. TCP connection closed.

여러 오브젝트를 불러오기 위해선 여러번의 연결을 해야한다.

Non-persistent HTTP Example


Non-persistent HTTP Reponse time

RTT: 패킷이 클라이언트에서 부터 서버까지 왕복하는데 걸리는 시간
Non-persistent HTTP response time = N(2RTT + file transmission time)

Non-persistent HTTP issuses:

  • 오브젝트마다 2RTTs 소요.
  • TCP 연결을 만들 때 OS 자원 할당 부담.

Persistent HTTP(HTTP1.1)

  1. TCP connection opened.
  2. 여러 오브젝트를 한번의 연결에 가져온다.
  3. TCP connection closed.

Persistent HTTP의 경우 TCP connection이 열리면 해당 연결을 닫지 않고 모든 오브젝트를 받아올 때 까지 TCP 연결이 지속되기 때문에 1 RTT(TCP연결) + N*(1RTT (HTTP Request) + file Transmission) 만큼이 소요된다.

HTTP request message

  • http 메시지의 두가지 유형: request, response
  • ASCII code 로 구성.

POST method:

  • 웹페이지는 자주 form input(양식)을 제공한다.
  • 클라이언트로 부터 사용자의 입력이 POST request 메시지의 body에 저장되어 전달.

GET method:

  • 유저의 데이터가 HTTP URL칸에 포함된다.
    ex) www.somesite.come/animalsearch?monkeys&banana
  • GET 메서드는 데이터 조회, 리소스 요청, 캐싱, 간단한 데이터 전송 등에 매우 유용하고 효율적이다.
  • URL에 데이터를 포함시켜 전송하기 때문에 민감한 정보를 전송할 때 보안 위험.

HEAD method:

  • 헤더 부분에 포함되는 정보만 요청한다.

PUT method:

  • 서버에 새로운 파일을 업로드한다.
  • 이미 존재하는 자원의 내용을 업데이트 하기 위해 사용된다.

HTTP response message

HTTP response status codes

200 ok

  • request 성공, requested object가 메시지에 포함.

301 Moved Permanently

  • requested object가 옮겨졌다. 어디로 옮겨졌는지 전달.

400 Bad Request

  • 서버가 request 메시지를 이해할 수 없음.

404 Not Found

  • requested object를 서버에서 찾을 수 없음.

505 HTTP Version Not supported

  • HTTP 버전 미지원

HTTP is 'Stateless'

HTTP요청은 본질적으로 독립적이며, 서버는 이전 클라이언트의 요청과 연결을 기억하지 못한다.
ex) 사용자가 웹사이트에서 여러 페이지를 이동할 때, 각 요청은 서로 관련이 없고, 서버는 사용자가 이전에 무엇을 요청했는지 기억하지 않는다.

  • HTTP는 multi-step exchange의 각 상태를 추적하지 않는다.
  • 모든 HTTP 요청은 상호 독립적이다.
  • 만약 어떤 요청이 부분적으로 완료되고 중단되더라도, 이를 복구하지 않는다.

상태 유지가 필요한 경우 Cookies를 사용한다.

HTTP/2

key goal: 여러 오브젝트 HTTP 요청에 대한 딜레이의 감소.

기존 HTTP1.1의 문제점:

  • server는 GET request에 대하여 FCFS(First-Come-First-Served)순서대로 응답한다.
  • 위의 방식에서 만약 대용량 오브젝트 뒤에 소형 오브젝트가 있다고 할 때, 소형 오브젝트는 대용량 오브젝트가 전송되기까지 기다려야한다.(Head-of-line (HOL) blocking)

HTTP/2의 개선

  • 메서드, 상태 코드, 헤더 필드는 HTTP/1.1과 거의 동일하다. 즉, HTTP/2는 기존 HTTP/1.1과 하위 호환성을 유지하여 쉽게 적용할 수 있다.
  • 클라이언트가 어떤 오브젝트를 우선적으로 전송받을지를 지정할 수 있다.
  • 클라이언트가 요청하지 않은 리소스도 서버가 클라이언트에게 푸시할 수 있다. 예를 들어, 클라이언트가 HTML 페이지를 요청할 때, 그 페이지에 필요한 CSS 파일이나 자바스크립트 파일을 미리 푸시하여 클라이언트가 더 빠르게 로딩할 수 있게 한다.
  • 오브젝트를 작은 프레임 단위로 쪼개서 전송한다. 이를 통해 HOL blocking 문제를 완화한다.

0개의 댓글