Chapter 2-2
Web and HTTP
애플리케이션 계층 프로토콜은 네트워크 애플리케이션의 한 요소일뿐
애플리케이션 : 웹
애플리케이션 계층 프로토콜 : HTTP
(하위 트랜스포트 계층 프로토콜 : TCP)
웹 = HTML + 웹 브라우저(크롬, 익스플로어) + 웹 서버(아파치, 마이크로소프트 서버) + 애플리케이션 계층 프로토콜 + 여러요소
-> HTTP는 웹 애플리케이션의 한 요소 일뿐
HTTP는 브라우저와 웹 서버 사이에서 교환되는 메시지의 포맷과 순서를 정의
HTTP는 두 가지 프로그램으로 구현됨(클라이언트 프로그램, 서버 프로그램)
서로 HTTP메시지를 교환하여 통신함
---------------------------------------------------------------------------
웹 페이지는 객체들로 구성
객체는 단순히 단일 URL로 지정할 수 있는 하나의 파일(이미지, 비디오, CSS파일 등)
웹 페이지 = HTML 기본파일 + 다른 5개 객체 = 6개 객체 가지고 있음
웹 브라우저는 HTTP의 클라이언트 측을 구현, 브라우저는 요구한 웹 페이지를 보여줌, 여러가지 인터넷 항해와 구성 특징 제공, 브라우저가 request
웹 서버는 HTTP의 서버 측을 구현, URL로 각각을 지정할 수 있는 웹 객체를 가짐, response
HTTP의 주된 특징 2가지
1. stateless protocol
서버가 클라이언트에게 요청파일을 보낼 때, 서버는 클라이언트에 관한 어떠한 상태 정보도 저장하지 않음
(그래서 어떤 클라이언트가 몇 초후에 같은 객체를 두 번 요청하면 그 객체를 또 보냄, 정보 저장안하니까)
-> 클라이언트 상태를 저장하고 관리하는 쿠기 같은 기술 개발됨
stateful(스테이트 유지)를 할 때도 있는데 문제점-통신은 불안정이기 때문에 클라이언트와 서버 사이 네트워크 연결 끊어졌다가 다시 연결되면 데이터 불일치 문제가 생길 수 있음 , 서버 부하 증가하고 확장성이 떨어질 수 있음
2. TCP를 트랜스포트 프로토콜로 사용한다
(애플리케이션 레이어는 그 아래에 있는 하위 레이어(트랜스포트 레이어)의 기능을 활용해서 실제로 데이터 보내야함 안쓰면 안됨 )
0. TCP는 데이터를 보내기 전에 목적지까지 실제로 데이터를 보낼 수 있는지 한번 체킹한다(가상의 데이터로 목적지까지 한번 보내고 그 목적지가 데이터를 잘받으면 응답해줌)
1 HTTP클라이언트는 먼저 서버에 TCP연결을 시작
2 서버가 클라이언트로부터 TCP연결을 허용
3. 브라우저와 웹서버 간에 교환되는 HTTP메시지
4. TCP연결 닫힘
------------------------------------------------------------------------------------------------------
1. Non-persistent connection
1. TCP오픈
2. TCP연결해서 하나의 오브젝트받고
3. TCP연결 종료
-> 단점 : 시간이 졸라 걸린다 매번 새로운 연결을 해야하니까, 2RTT필요(TCP연결 설정에1, 객체를 요청하고 받는데 1)
2. persistent connection
TCP커넥션을 오브젝트를 다 받을 동안 유지시키는것
TCP오픈하고 내가 원하는 만큼 여러개 오브젝트 받고 그제서야 TCP연결 종료
->단점 : 서버부하(TCP커넥션이 종료될때까지 연결유지해야하니까)
***RTT : 패킷이 클라이언트로부터 서버까지 가고 다시 클라이언트로 되돌아오는데 걸리는 시간
---------------------------------------------------------------------------------------------------------------
HTTP메시지
아스키코드로 되어있음
--------------------------------------------------------
쿠키
웹사이트에서 클라이언트 컴퓨터에 저장되는 작은 데이터 파일
클라이언트가 웹 사이트를 방문할 때, 서버에서 생성되어 클라이언트 컴퓨터의 웹 브라우저에 저장
이후 클라이언트가 같은 웹 사이트를 방문할 때마다, 브라우저는 쿠키를 서버에 보내 사용자 정보기억함
1. 내가 처음 사이트 접속해서 무언가를 리퀘스트함
2. 서버는 이 리퀘스트 받고 유니크아이디를 만듬(이걸 쿠키라고함)
3. 쿠키를 백엔드 디비에 저장
4. 리스펀스하면서 쿠키도 넣어서 보냄 (이게 니 쿠키얌~~)
4. 그 다음에 클라이언트로부터 오는 HTTP들은 쿠키를 들고 있으니 쿠키 통해 서버는 정보기억
----------------------------------------------------------------------------
웹 캐싱(Web cashes) = 프록시 서버(proxy server)
이전에 요청된 데이터를 저장해 두어 다음 요청시 서버에서 데이터를 가져오는 대신 캐시에서 데이터를 가져와 응답 시간을 줄이는 것
자체의 저장 디스크를 가지고 있어서 최근 호출된 객체의 사본을 저장 및 보존
1. 브라우저가 웹 캐시와 TCP연결하고 웹 캐시에 있는 객체에 대한 HTTP요청을 보냄
2. 웹 캐시는 객체의 사본이 자기한테 저장되어 있는지 확인, 저장되어 있다면 클라이언트 브라우저로 객체 전달
3. 웹 캐시에 없다면 기점 서버랑 TCP연결 하고 객체에 대한 HTTP요청을 보냄
그리고 기점서버는 웹 캐시로 HTTP응답하고 객체 보냄
4. 웹 캐시의 객체를 수신할 때 객체를 지역 저장장치에 복사하고 클라이언트 브라우저에 응답메시지랑 객체의 사본을 보낸다
웹캐시 장점
1. 클라이언트의 요구에 대한 응답 시간 줄일 수 있다
2. 한 기관에서 인터넷으로의 접속하는 링크상의 웹 트래픽을 대폭으로 줄일 수 있다
3. 서버 부하 줄일 수 있다
프록시 서버의 단점
1. 캐시 오염 : 프록시 서버의 캐시에 오래된 정보가 남아 있을 경우 원본 서버에서 최신 정보가 업데이트 되어도 사용자는 업데이트 되지 않은 정보를 보게 될 수도 있다
캐시 내부에 있는 객체의 본사본이 새것이 아닐 수 있다 ( 복사본이 클라이언트에 캐싱된 이후에 웹 서버에 있는 객체가 갱신되었을 수도 있다)
-> 해결 방법 : Conditional GET
Conditional GET
HTTP는 클라이언트가 브라우저로 전달되는 모든 객체가 최신의 것임을 확인하면서 캐싱하게 해줌
- 클라이언트가 HTTP 요청 메시지를 보냅니다.
- 요청 메시지의 헤더에 If-Modified-Since 또는 If-None-Match 등의 조건을 포함하여, 리소스가 마지막으로 수정된 이후에 변경되었는지를 확인합니다.
- 서버는 요청받은 리소스가 마지막으로 수정된 시간과 클라이언트가 전송한 If-Modified-Since 조건을 비교하여, 해당 리소스가 수정되지 않았다면 304 Not Modified 응답을 반환합니다. 수정된 경우에는 200 OK 응답을 반환합니다.
- 클라이언트는 304 Not Modified 응답을 받으면, 캐시된 리소스를 사용하도록 하고, 200 OK 응답을 받으면 서버에서 리소스를 다시 전송받아 새로운 캐시를 생성합니다.
- 만약 리소스가 캐시에 없거나 캐시된 리소스가 만료되었다면, 서버는 리소스를 전송하고 클라이언트는 새로운 캐시를 생성합니다.
- 클라이언트는 전송받은 리소스를 처리합니다.
------------------------------------------------------------------------------------------------------------------------------
HTTP2
목표 : 하나의 TCP연결상에서 요청,응답 지연시간 줄일라고
서버 응답은 선입선출이라서 HOL블로킹 문제 발생할 수 있음
처음께 존나크면 뒤에는 아무리 작아도 기다려야함 오랫동안 그래서 HTTP2나옴
패킷을 프레임 단위로 쪼개서 순서대로 안보내고 준비된거부터 전송함
처음 요청에 댜한 응답 외에도 서버는 클라이언트의 요청 없이도 추가적인 객체를 클라이언트에게 푸시할 수 있다 (서버 푸시)