HTTP 개요
HTTP : hypertext transfer protocol
HTTP는 웹의 application-layer protocol이고, client/server model을 따른다.
client : HTTP 프로토콜을 사용해서 웹 오브젝트를 request하고 receive하여 브라우저를 통해 웹 오브젝트를 보여준다.
server : HTTP 프로토콜을 사용해서 request에 대한 response를 생성해서 보낸다.
HTTP는 TCP를 사용한다.
1. 클라이언트는 서버의 80번 포트로 TCP 연결을 시작한다.
2. 서버는 클라이언트로부터 TCP 연결을 accept한다.
3. HTTP 메시지(application-layer protocol messages)가 브라우저와 웹서버 간에 교환된다.
4. TCP 연결을 종료한다.
HTTP는 stateless - 무상태이다. 서버는 이전 클라이언트 요청에 대한 정보를 유지하지 않는다.
HTTP 연결에는 두 종류가 있다.
Non-persistent(비지속적인) HTTP
1. TCP 연결이 열림
2. 하나의 오브젝트가 TCP 연결을 통해 전송됨
3. TCP 연결이 종료됨
- 다수의 오브젝트를 다운로드 받으려면 다수의 연결이 필요하다.
response time
- RTT란? 클라이언트에서 서버까지 작은 패킷이 전송되고 돌아오는데까지의 시간
1. TCP 연결에서 1 RTT
2. HTTP request 및 HTTP response의 처음 몇 바이트를 반환하는데 1 RTT
3. object/file 전송시간
= 2RTT + file transmission time
만약 여러개의 오브젝트를 요청할 때는 불필요한 RTT가 추가로 발생함.
병렬로 참조된 오브젝트를 검색하기 위해 여러 병렬 TCP 연결을 열 수 있지만, 여전히 비효율적
Persistent(지속적인) HTTP
1. TCP 연결이 열림
2. 클라이언트와 해당 서버 사이에 하나의 TCP 연결로 다수의 오브젝트가 전송
3. TCP 연결이 종료됨
- 서버는 응답을 보내고 연결을 열어둘 수 있음.
- 동일한 클라이언트/서버 간 이어지는(subsequent) HTTP 메시지는 열린 연결을 통해 전송됨.
- 클라이언트는 참조된 오브젝트를 만나면 요청을 보냄.
- 참조된 오브젝트의 모든 요청에 대해 1 RTT만 필요함.
여기서 end-to-end delay(데이터가 송신자에서 수신자에게까지의 딜레이)는,
Control messages(HTTP request ...) : K bit long,
Base HTML object = L bits
N reference objects, each L bit long,
Link bandwidth = R bps,
Propagation delay = d seconds
라고 할 때,
기본 HTML 오브젝트 다운 시간 : L/R
reference object 다운로드 시간 : N(L/R)
propagation delay : d
총 end-point-end delay는 N(K/R + L/R + d) + control message processing time이 된다.
HTTP request message
HTTP messages에는 2가지 type이 있다 - request, response
POST method
웹페이지에는 종종 input이 포함된다.
user input은 POST 요청 메시지의 entity body에 포함되어 서버로 보내진다.
GET method
URL 필드에 user data를 포함하여 보낸다.
HEAD method
GET method와 유사하지만, 서버는 URL의 헤더만 반환하고 데이터 본문은 반환하지 않는다.
PUT method
새 파일을 서버에 업로드한다.
지정된 URL에서 존재하는 파일을 POST request message의 entity body 내용으로 완전히 교체한다.
response status code
- 200 OK : 요청이 성공, 요청한 오브젝트가 메시지의 나중 부분에 나타난다.
- 301 Moved Permanently : 요청한 오브젝트가 이동했고 새 위치는 메시지의 Location 필드에 지정
- 400 Bad Request : 서버가 request를 이해하지 못함
- 404 Not Found : 요청한 내용을 서버에서 찾을 수 없음
- 505 HTTP Version Not Supported
Maintaining user/server state: cookies
HTTP는 web "transaction"(처리) 을 완료하기 위해 여러 단계의 HTTP 메시지 교환한다는 개념이 없다.
- HTTP는 multi-step exchange의 state를 tracking할 필요가 없다.
- 모든 HTTP Request는 서로서로 independent이다.
- 부분적으로 완료됐지만 완전히 완료되지 않은 transaction을 recover-복구하지 않아도 된다.
웹사이트와 클라이언트 브라우저는 쿠키를 사용해서 transaction간에 일부 state를 유지(maintain)한다.
쿠키는 다음 네 가지 구성 요소로 이뤄져있다.
- HTTP response message의 cookie header line (클라이언트에게 쿠키 생성하라고 지시)
- 다음 HTTP request message의 cookie header line (쿠키헤더라인에 생성한 쿠키 포함해서 전송)
- 사용자의 호스트에 저장된 cookie header line (브라우저에서 관리됨)
- 웹사이트의 백엔드 데이터베이스
상태를 유지하는 방법은?
- at protocol endpoints : 여러 transaction에 걸쳐 sender/receiver의 상태를 유지함
- in messages : HTTP 메시지의 쿠키가 상태를 전달
Web caches
브라우저는 모든 HTTP 요청을 캐시로 보낸다.
캐시에 요청에 따른 오브젝트가 있으면 오브젝트를 클라이언트에게 반환한다.
그렇지 않으면 캐시는 origin server에 오브젝트를 요청하고 받은 오브젝트를 캐시에 저장한 후 반환한다.
캐시는 proxy server에 저장한다!
웹 캐시는 클라이언트/서버 역할을 모두 수행한다.
서버는 response header의 Cache-Control에 caching이 허용되는지 알려준다.
장점
- 클라이언트의 request에 대한 response time을 줄인다.
- access link의 트래픽을 감소시킨다.
- 인터넷은 캐시로 가득차있다(dense) : poor content providers가 콘텐츠를 더 효과적으로 전달
Conditional GET : 캐시된 업데이트 버전이 있는 경우 오브젝트를 전송하지 않는다.
* 내가 가지고 있는게 최신 버전이 맞아? - 맞으면 304 Not Modified 반환, 틀리면 200 과 함께 파일 반환
- 최신 버전일 때, 오브젝트 전송 딜레이 없음, 네트워크 리소스 사용 없음
client : HTTP request에서 캐시된 복사본의 날짜를 지정(specify)한다.
- If-modified-since: <date>
server : 캐시된 복사본이 최신인 경우 response에 object를 포함(contain)하지 않는다.
- HTTP/1.0 304 Not Modified
- HTTP/1.0 200 OK + data
HTTP/2
multi-object HTTP request의 딜레이를 감소시킨다.
HTTP/1.1에서는 하나의 TCP 연결로 다중 파이프라인 GET을 도입했다.
서버는 GET 요청에 따라 FCFS로 응답, FCFS는 작은 오브젝트가 대용량 오브젝트 뒤로 밀려갈 수 있음
loss recovery(손실 복구 - 손실된 TCP 세그먼트 재전송)로 인해 오브젝트 전송이 중단될 수 있음
HTTP/2는 flexibility-유연성이 증가했다.
HTTP1.1에서 method, status code, 대부분의 header field은 변경되지 않았다.
요청된 오브젝트의 전송 순서는 클라이언트가 지정한 client-specified object priority에 의해 결정된다.
클라이언트에게 요청되지 않은 오브젝트를 push한다. (페이지를 요청할 때, 페이지의 이미지나 css같은 리소스를 자동 전송)
오브젝트를 frame으로 분할하고, HOL blocking을 완화(mitigate)하기 위해 프레임을 스케줄한다.
HOL bocking: 다수의 오브젝트를 전송할 때 하나의 오브젝트 전송 지연이 다른 오브젝트 전송을 차단하는 현상
HTTP/2는 HTTP/1.1과 달리 하나의 TCP 연결만으로 전송할 수 있다.
다만 패킷 손실이 발생하면 오브젝트 전송이 중단되는 문제가 발생할 수 있고, 여전히 병렬 TCP 연결을 열어서 전체 처리량을 높인다.
그리고 보안을 제공하지 않기에 중간에 데이터가 탈취되거나 조작될 수 있다.
'학교강의필기장 > 컴퓨터네트워크' 카테고리의 다른 글
컴퓨터네트워크[6]: Domain Name System DNS (0) | 2023.04.19 |
---|---|
컴퓨터네트워크[5]: E-mail, SMTP, IMAP (0) | 2023.04.19 |
컴퓨터네트워크[3]: 네트워크 애플리케이션의 기본 원리 (0) | 2023.04.18 |
컴퓨터네트워크[2]: 인터넷구조, performance, protocol layers (0) | 2023.04.18 |
컴퓨터네트워크[1]: The network core (0) | 2023.04.18 |