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를 사용한다.
- 클라이언트는 서버에 port 80 TCP 연결을 시작한다.
- 서버는 해당 TCP 연결을 수신한다.
- HTTP 메시지가 클라이언트와 서버간에 교환된다.
- TCP 커넥션이 종료된다.
HTTP는 상태정보를 저장하지 않는다.
- 서버는 지난 클라이언트에 대한 정보를 유지하지 않는다.
HTTP two type
Non-persistent HTTP
- TCP connection opened.
- 하나의 오브젝트만 가져온다.
- 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)
- TCP connection opened.
- 여러 오브젝트를 한번의 연결에 가져온다.
- 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 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 문제를 완화한다.
