celinayk 2023. 4. 14. 17:46
반응형

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는 클라이언트가 브라우저로 전달되는 모든 객체가 최신의 것임을 확인하면서 캐싱하게 해줌 

 

  1. 클라이언트가 HTTP 요청 메시지를 보냅니다.
  2. 요청 메시지의 헤더에 If-Modified-Since 또는 If-None-Match 등의 조건을 포함하여, 리소스가 마지막으로 수정된 이후에 변경되었는지를 확인합니다.
  3. 서버는 요청받은 리소스가 마지막으로 수정된 시간과 클라이언트가 전송한 If-Modified-Since 조건을 비교하여, 해당 리소스가 수정되지 않았다면 304 Not Modified 응답을 반환합니다. 수정된 경우에는 200 OK 응답을 반환합니다.
  4. 클라이언트는 304 Not Modified 응답을 받으면, 캐시된 리소스를 사용하도록 하고, 200 OK 응답을 받으면 서버에서 리소스를 다시 전송받아 새로운 캐시를 생성합니다.
  5. 만약 리소스가 캐시에 없거나 캐시된 리소스가 만료되었다면, 서버는 리소스를 전송하고 클라이언트는 새로운 캐시를 생성합니다.
  6. 클라이언트는 전송받은 리소스를 처리합니다.

------------------------------------------------------------------------------------------------------------------------------

 

HTTP2

목표 : 하나의 TCP연결상에서 요청,응답 지연시간 줄일라고

서버 응답은 선입선출이라서 HOL블로킹 문제 발생할 수 있음 

처음께 존나크면 뒤에는 아무리 작아도 기다려야함 오랫동안 그래서 HTTP2나옴

패킷을 프레임 단위로 쪼개서 순서대로 안보내고 준비된거부터 전송함 

처음 요청에 댜한 응답 외에도 서버는 클라이언트의 요청 없이도 추가적인 객체를 클라이언트에게 푸시할 수 있다 (서버 푸시)