Web and HTTP
World Wide Web이란?
world wide web는 라우터들이 거미줄처럼 연결되어있는 네트워크 모습이 아닌 웹 페이지들이 거미줄처럼 연결되어있는 것을 나타낸다.
우리가 브라우저에서 웹사이트를 검색할때 주소 맨앞에 붙는 'www.'가 world wide web을 나타낸다.
web page들은 HTML FILE, JPEG image, java applet, audio file 등의 object들로 구성이 되어있다.
web page는 참조객체가 여러개 있는 base-HTML file로 구성되어있으며, 각각의 참조 객체들은 URL(Uniform Resource Locator)로 실제객체들이 어디에 존재하는지 알려준다.
HTTP란?
HyperText Transfer Protocol의 약자로 Hypertext를 주고 받기 위해 만든 protocol이다.
cilent-server 구조로 되어 있으며, cilent쪽에서는 browser가 원하는 object파일을 요청을 하고 받고 보여주는 작업을 진행하고, server쪽에서는 cilent쪽에서 온 요청을 받고 object file을 보내주는 작업을 진행한다.
- HTTP는 transport layer에서 TCP를 사용한다. 파일 교환을 목적으로 하는 Protocol이기에 데이터들을 순서대로 하나도 잃어버리지 않게 하기위해 TCP를 사용한다.
- Port number는 80으로 고정되어있다.
- HTTP 는 Stateless하다
요청을 보내고 못 받을 수도 있는 상황이 있지만 이러한 문제를 생각하기엔 너무 복잡하기에 간단하게 Server가 client의 요청(request)에 대한 정보를 저장하지 않는 Stateless형태로 한번 요청을 하고 응답 받으면 끝인 Simple한 형태로 만들어졌다.
HTTP Connection
HTTP Connection의 두가지 방법은 배우기 전 RTT라는 중요한 개념을 먼저 알아야 한다.
RTT란
RTT(Round Trip Time)작은 패킷이 cilent로부터 서버까지 갔다가 다시 돌아오는 시간을 의미한다. 간단하게 말하자면 요청을 하고 응답을 받는데까지 걸리는 시간을 의미한다.
대부분의 delay는 prop, queue delay가 차지하고 trans delay는 매우 작은 단위의 packet이기에 작은 비율을 차지하고 proc delay는 cpu가 요즘에는 워낙빠르게 동작하기에 매우 작은 비율을 차지한다.
Non-persistent HTTP (초기모델)
HTTP 1.0버전에서 지원
TCP를 연결시킨다 -> Connection을 통해 object file을 전송을 한다. -> TCP 연결을 끊는다
여러개의 Object file을 받기 위해서는 여러번의 Connection을 요청해야되는 모델이다.
- TCP연결요청을 하고 응답을 받는 시간 One RTT
- URL을 포함한 HTTP request 메시지를 보내고 응답을 받는데 까지 걸리는 시간 One RTT
- File transmission time
하나의 object file을 받는데 걸리는 시간 = 2RTT + file transmission time
전체시간으로 봤을 때(transmission time을 무시했을 경우)는 TCP 연결 1RTT + BaseHTMLFile을 받는데까지 1RTT 후 연결종류 참조된 Object마다 TCP연결 1RTT + Object를 가져오는데 1RTT만큼의 시간이 걸린다.
Persistent HTTP
HTTP 1.1버전에서 지원
TCP Connection -> 여러개의 object file을 보낸다 -> TCP 연결을 끊는다.
한번 연결을 진행 후 모든 데이터를 받고 연결을 종료
- client는 참조객체를 만나면 바로 요청을 보낼 수 있다. -참조객체란? 객체가 어디있는지 알려주는 URL같은 정보가 담겨있는 것
- 참조 객체에 대해서 1RTT의 시간만이 필요하다.
그래서 전체 시간(transmission time을 무시했을 경우)으로는 TCP연결 1RTT + BaseHTMLFile을 받는데까지 1RTT + 각각의 참조 Object를 가져오는데 걸리는 시간 RTT* Object갯수
실제로는 short_lived connection 방법을 사용한다. server connection의 갯수가 1개가 아니라 여러개로 한번에 받아 올 수 있기 때문이다.
HTTP Request/Response Message
Request Message
- request line server로부터 받고싶은 method방식/ HTTP버전
- Header lines header lines에는 Host가 누구인지, 어떤방식의 connection을 진행할 것인지, 데이터를 어떠한 방식으로 해석할 수 있는지에 대해 알 수 있는 정보들이 저장되어 있다.
Request Message Method
Cilent가 server에게 요청할 수 있는 서비스 방법이 Method이다.
POST method
cilent가 server에게 데이터를 보낼때 사용하는 메소드이며, body부분에 데이터를 실어 보내기 때문에 GET 방식보다는 안전하다고 볼 수 있고 body에 실어서 보내기에 데이터의 길이가 상관이 없어 대용량의 파일을 보낼 수도 있다.
GET method
URL(URI) 형식으로 웹서버측 리소스(데이터)를 요청하며 cilent가 server데이터를 넘길 때도 사용한다. POST방식처럼 Body부분에 데이터를 실고 보내는 것이 아니기 때문에 데이터길이에 한정적인 부분이 있고 노출가능성이 있어 불안전하다고 볼 수 있다.
HEAD method
request header들의 정보만들 알고 싶을 때 사용한다.
PUT method
서버에 새로운 file들을 업로드가 가능하다. server에 이상한 데이터가 한번에 들어 올 수 있기 때문에 자주 사용하지 않는다.
Reponse Message
- request message와 다르게 status line이 존재한다.
- header lines이 존재하고 \r\n \r\n 후 Body 부분에 요청된 HTML file들이 존재한다.
'Network' 카테고리의 다른 글
컴퓨터네트워크_DNS (0) | 2022.05.10 |
---|---|
컴퓨터네트워크_Cookie and Cache (0) | 2022.05.06 |
컴퓨터네트워크_Application layer (0) | 2022.05.04 |
컴퓨터네트워크_Protocol Layers (0) | 2022.05.02 |
컴퓨터네트워크_Delay, loss, throughput in Network (0) | 2022.04.30 |