[네트워크] HTTP 프로토콜(2)

Dabin Lee·2023년 3월 8일
0

Network

목록 보기
2/2

HTTP와 HTTPS

HTTP의 문제점

  • HTTP는 평문 통신이므로 도청이 가능함
  • 통신 상대를 확인하지 않기 때문에 위장이 가능
  • 완정성을 증명할 수 없기 때문에 변조가 가능

TCP/IP는 도청 가능한 네트워크임

TCP/IP 구조의 통신은 전부 통신 경로 상에서 엿볼 수 있다. 패킷을 수집하는 것만으로 도청이 가능하다. 평문으로 통신할 경우 메시지의 의미를 파악할 수 있기 때문에 암호화하여 통신해야 한다.

HTTPS(HTTP Secure)

HTTP에 암호화와 인증, 완전성 보호를 더한 HTTPS

  • SSL(Secure Socket Layer) 또는 TLS(Transport Layer Security)라는 다른 프로토콜을 조합함으로써 HTTP의 통신 내용을 암호화함
  • HTTP 통신하는 소켓 부분을 SSL 또는 TLS라는 프로토콜로 대체함으로써 HTTP는 원래 TCP와 직접 통신했지만, HTTPS에서 HTTP는 SSL과 통신하고 SSL이 TCP와 통신하게 된다.
  • HTTPS의 SSL에서는 공통키 암호화 방식과 공개키 암호화 방식을 혼합한 하이브리드 암호 시스템을 사용한다.
    • 하이브리드 암호 시스템이란 공통키를 공개키 암호화 방식으로 교환한 다음에 다음부터의 통신은 공통키 암호를 사용하는 방식이다.

HTTP 1.0과 HTTP 1.1의 차이

Non-Persistent VS Persistent

HTTP 1.0과 HTTP 1.1의 가장 큰 차이점은 연결의 지속성이다. HTTP는 기본적으로 TCP를 이용하여 통신한다. 이 때, HTTP 1.0은 TCP 세션을 유지하지 않고, 1.1은 TCP 세션을 유지한다.

HTTP 1.0은 매번 데이터를 요청하고 수신할 때마다 새로운 TCP 세션을 맺어햐 하는 반면, HTTP 1.1은 한 번의 TCP 세션에 여러 개의 요청을 보내고 응답을 수신할 수 있다.

즉, HTTP 1.0은 Non-persistent HTTP, HTTP 1.1은 Persistent HTTP라고 할 수 있다. 따라서 HTTP 1.1은 TCP 세션 처리 부하를 줄이고 응답 속도를 개선할 수 있다. 위 그림에서도 볼 수 있듯이, TCP 세션을 열고 닫는 시간이 줄어들기 때문에 두 개의 요청과 응답을 처리하는 속도가 HTTP 1.1이 더 빠른 것을 확인할 수 있다.

파이프라이닝(Pipelining)

HTTP 1.0은 파이프라이닝을 제공하지 않는 반면, HTTP 1.1은 파이프라이닝 기능을 제공한다.
즉, HTTP 1.0은 1번 요청을 보내고 1번 응답을 받아야지 2번 요청을 보내는 식으로 동작하는 반면, HTTP 1.1은 여러 개의 요청을 동시에 보낼 수 있다.

호스트 헤더(Host Header)

HTTP 1.0은 하나의 IP 주소에 여러 개의 도메인 운영을 할 수 없어서 도메인별로 IP를 구분해 준비해야 하기 때문에 서버의 개수가 늘어나야 했다.
하지만, HTTP 1.1은 가상 호스팅(Virtual Hosting)이 가능해졌기 때문에 하나의 IP 주소에 여러 개의 도메인을 적용시킬 수 있다.

향상된 인증 절차(Improved Authentication Procedure)

HTTP 1.1은 다음과 같은 2개의 header가 추가되었다.

  • proxy-authentication
  • proxy-authorization

위와 같은 header의 추가로 프록시가 사용자의 인증을 요구하는 게 가능해졌고, 이를 통해 인증 절차가 향상되었다.


HTTP/2(HTTP 2.0)

HTTP/2(HTTP 2.0)은 Hypertext Transfer Protocol Version 2의 약자로서, 2015년 IETF에 의해 공식적으로 발표된 HTTP/1.1(기존 표준)의 차기 버전이다.

기반

SPDY(스피디)라는 구글 비표준 개방형 네트워크 프로토콜에 기반한다. 기존의 HTTP methods, status codes, semantics 개념들이 동일하게 호환된다.

Frame & Stream & Messages

기존에 평문을 사용하고, 개행으로 구별되던 HTTP/1.x 프로토콜과 달리, 2.0에서는 바이너리 포맷으로 인코딩된 Message, Frame으로 구성된다.

  • Stream : 구성된 연결 내에서 전달되는 바이트의 양방향 흐름, 하나 이상의 메시지가 전달 가능하다.
  • Message : 논리적 요청 또는 응답 메시지에 매핑되는 프레임의 전체 시퀀스이다.
  • Frame : HTTP/2에서 통신의 최소 단위. 각 최소 단위에는 하나의 프레임 헤더가 포함된다. 이 프레임 헤더는 최소한 프레임이 속하는 스트림을 식별한다. HEADERS Type Frame와 DATA Type Frame이 존재한다.

특징

  1. HTTP 헤더 데이터 압축 : 이전 Header의 내용과 중복되는 필드를 재전송하지 않도록 하여, 데이터를 절약한다. 또한, 개존에 HTTP Header가 평문이었지만, HTTP/2에서는 Huffman Coding을 사용하는 HPACK이라는 Header 압축방식을 이용하여 데이터 전송 효율을 높였다.

  2. HTTP 1.x의 HOL(Head-of-Line) Blocking 문제 해결 : HTTP/1.1까지는 한 번에 하나의 파일만 전송이 가능했다. 이로 인해 여러 파일을 전송할 경우 선행하는 파일의 전송이 늦어지면, 전체 파일 전송의 시간이 늘어나는 문제가 발생했다. HTTP/2.0에서는 여러 파일을 한 번에 병렬 전송하여 이러한 문제를 해결했다.

    HOL(Head-of-Line) Blocking : 컴퓨터 네트워킹에서 패킷 대기열이 존재할 때, 앞선 패킷이 지연될 때 발생하는 성능 저하 현상

  3. Stream 우선순위 : HTTP 메시지가 많은 개별 프레임으로 분할될 수 있고 여러 스트림의 프레임을 다중화(Multiplexing)할 수 있게 되면서, 스트림들의 우선순위를 지정할 필요가 생겼다. 클라이언트는 우선순위 지정을 위해 ‘우선순위 지정 트리'를 사용하여 서버의 스트림처리 우선순위를 지정할 수 있다. 서버는 우선순위가 높은 응답이 클라이언트에 우선적으로 전달될 수 있도록 대역폭을 설정한다.


HTTP 쿠키(Cookie)

HTTP 쿠키란?

웹 쿠키, 브라우저 쿠키로도 불리는데, 서버가 사용자의 웹 브라우저에 전송하는 작은 데이터 조각을 의미한다. 루 몬텔루라는 웹 브라우저 개발자가 웹 사이트에 접속한 클라이언트를 확인하기 위해 만들었다. HTTP 통신은 Stateless하기 때문에 클라이언트를 확인하기 위해서는 쿠키라는 개념이 따로 필요했기 때문이다.
쿠키는 주로 세션 관리(서버에서 관리하는 로그인 등의 정보를 의미), 개인 설정 유지, 사용자 트래킹(사용자의 행동을 기록하고 분석하는 것) 용도로 사용된다.

HTTP 쿠키의 특징

  • 쿠키는 한 개에 4KB까지 저장 가능하며, 최대 300개까지 저장할 수 있는 텍스트 파일이다.
  • 쿠키는 클라이언트에 저장된다.
  • 쿠키에는 이름, 값, 만료날짜, 경로 정보가 포함된다.
  • 기본적으로 쿠키는 웹 브라우저가 종료되면 삭제된다.(만료일을 지정해주면 만료일이 되어야 삭제된다.)
  • 웹 브라우저가 해당 서버의 쿠키 정보가 있으면 HTTP 요청(HTTP 헤더의 Cookie)에 무조건 담아 보낸다.

HTTP 쿠키의 작동방식


쿠키도 결국 HTTP 통신에서 이루어지는 것이므로 HTTP의 응답과 요청에 따라 작동한다.

요청을 받은 서버에서 쿠키를 클라이언트(웹 브라우저)로 보내고 클라이언트는 쿠키를 받으면 도메인 서버 이름으로 정렬된 쿠키 디렉토리에 쿠키를 저장한다. 이후 클라이언트가 동일한 서버로 HTTP 요청을 보내면 저장된 쿠키도 같이 전송되며, 만약 서버에서 쿠키에 업데이트된 내용이 있으면 응답할 때 다시 업데이트된 쿠키를 보내준다.


HTTP 세션(Session)

HTTP 세션이란?

세션(Session)이란 통신을 하기 위해 서로 연결된 순간부터 통신을 마칠 때까지의 기간을 의미한다.
HTTP 세션이란 클라이언트가 웹 서버에 연결된 순간부터 웹 브라우저를 닫아 서버와의 HTTP 통신을 끝낼 때까지의 기간이다. 하지만, 보통 세션이라고 말할 때에는 서버에 세션에 대한 정보(세션 상태, 클라이언트 상태, 세션 데이터 등)를 저장해 놓고 세션 쿠키(고유한 세션 ID값)를 클라이언트에게 줌으로써 서버가 클라이언트를 식별할 수 있도록 하는 방식 자체를 의미하는 경우가 많다.

세션의 특징

  • 따로 용량의 제한이 없다.
  • 서버에 세션 객체를 생성하며 각 클라이언트마다 고유한 세션 ID값을 부여한다.
  • 쿠키를 사용하여 세션 ID값을 클라이언트에 보낸다.
  • 웹 브라우저가 종료되면 세션 쿠키는 삭제된다.

세션의 작동방식


세션의 작동방식을 보면 우선 클라이언트가 서버에 요청을 보내면 서버에서 요청 헤더(Cookie)를 확인하고 세션 ID가 있는지 확인한다. 만약 없다면 서버에서 세션 ID를 생성한 뒤 응답을 보낼 때 쿠키에 세션 ID를 담아 보낸다. 이 때 서버에서는 세션 객체를 생성하여 정보를 저장한다. 클라이언트는 응답에서 받은 세션 쿠키(세션 ID값)를 저장해두고, 매번 해당 서버에 요청을 보낼 때마다 세션 쿠키를 함께 보내서 자신이 누구인지 인증한다.


쿠키(Cookie)와 세션(Session)의 관계

  1. 쿠키는 클라이언트(웹 브라우저)에 정보를 저장하는 것이고, 세션은 서버에 정보를 저장하는 것이다.(반대되는 개념이 아니라, 세션은 쿠키를 이용하는 하나의 방식일 뿐임)
  2. 쿠키는 Stateless한 HTTP 통신에서 클라이언트에게 정보를 주어 해당 클라이언트를 식별하기 위해 만들어졌다. 하지만, 클아이언트에 저장된다는 쿠키의 특징은 보안에 있어서 치명적인 단점이다.
  3. 따라서 세션이라는 개념을 통해 중요한 정보는 서버에서 관리하고 클라이언트에게는 세션 쿠키(세션 ID)를 주어 식별이 가능하도록 하는 것이다.
  4. 쿠키는 쇼핑몰의 장바구니, 개인 설정(팝업창 표시여부 등)과 같은 것들에 많이 사용되고, 세션은 로그인 유지 등에 많이 사용된다.

참고자료

0개의 댓글