HTTP/HTTPS에 대해서

이지호·2021년 11월 17일

네트워크

목록 보기
2/2

HTTP(Hypertext Transfer Protocol)

웹에서 이루어지는 모든 데이터 교환의 기초이며 HTML문서와 같은 리소스들을 가져올 수 있게 해주는 프로토콜이자 서로 다른 시스템들 사이에서 통신을 주고 받게 해주는 가장 기초적인 프로토콜

HTTP는 어플리케이션 계층의 프로토콜로, 전송계층의 TCP를 통해 전송된다.
또한 Client-Server 프로토콜이기도 하다.

클라이언트서버는 개별적인 메시지 교환으로 통신한다.
클라이언트에 의해 전송되는 메시지를 요청(request)라고 하고, 서버에서 응답으로 전송되는 메시지를 응답(response)라고 한다.

HTTP 기반 시스템 구성요소

HTTP에서 요청(request)은 하나의 개체, 사용자 에이전트인 클라이언트에 의해 전송되어진다.
이 요청들은 서버로 보내지게 되며, 서버는 요청을 처리하고 응답(response)를 보낸다.
요청과 응답 사이에는 여러 개체들이 있는데, 대표적으로 다양한 작업을 수행하는 게이트웨이, 캐시역할을 하는 프록시 등이 있다.

실제 웹기반 시스템에서는 클라이언트와 서버사이에는 라우터, 모뎀같은 더 많은 개체들이 있다.
이 개체들은 HTTP가 속한 어플리케이션 계층이 아닌 네트워크 계층과 전송계층에 속해 있다.

사용자 에이전트: 사용자들 대신해서 동작하는 모든 도구 (대부분 브라우저)

HTTP의 흐름과 버전별 커넥션 관리

Short-lived connections

HTTP프로토콜로 클라이언트와 서버가 통신할 때의 과정은 다음과 같다.

1. TCP연결을 생성한다.
2. HTTP메시지를 전송한다.
3. 서버로부터 받은 응답을 읽는다.
4. 연결을 닫는다.
이처럼 HTTP메시지를 주고 받을때마다 TCP연결을 생성해야한다.
이는 Short-lived connections이라고 부르며, 초기 모델이다.
요청개수가 적다면 무리없이 처리하겠지만 만약 대규모의 요청이 들어온다면 각각의 요청별로 연결을 생성해야한다. 그러면 해당 사이트의 성능저하를 불러올 것이다.

HTTP/1.1로 넘어오면서 두 가지 모델이 추가되었다.
영속적인 연결HTTP 파이프라이닝이다.

Persistent Connection

먼저, 영속적인 연결(Persistent connection)은 연결을 생성하여 하나의 요청이 아닌 여러 요청에 재사용 함으로써 성능향상 이루는 것이다.
연결이 계속 이루어져있는게 아니라 더이상 요청이 없는 유휴상태일 경우 일정시간이 지난 후 연결을 닫는다.

하지만, 유휴 상태일 경우에도 서버 리소스를 사용하며, 과부하 상태에서는 DoS attacks을 당할 수 있다는 단점이 있다.

HTTP 파이프라이닝

HTTP요청은 순차적이다.
요청을 하고 요청에 대한 응답을 받으면 다음 요청을 실힌다.
이때, 네트워크 지연이나 대역폭 제한에 걸리게 되면 다음 요청까지 딜레이가 발생하게 된다.

HTTP 파이프라이닝이란 영속적인 연결을 통해서 응답을 기다리지 않고 요청을 연속으로 보내는 것이다.
파이프라이닝에 가능한 메서드들은 GET, HEAD, PUT, DELETE 같은 idempotent메서드만 가능하다.


HTTP 파이프라이닝은 기본값으로 설정되어있지 않다.
구현하기가 복잡하고 사이트 별로 프록시들이 버그가 있는 경우도 있어서 분석하기 힘든 오류를 발생시키기 때문이다.
또한 완전한 멀티플렉싱이 아닌 응답처리를 미루는 방식이라서 결국엔 응답처리를 순차적으로 하게되어, 마지막 요청은 지연이 있을 수 밖에 없다.
이는 HOL(Head of Line Blocking)문제로 파이프라이닝의 가장 큰 문제점이다.
파이프라이닝은 멀티플렉싱 알고리즘으로 대체되었는데, HTTP/2에서 사용한다.

HTTP 메시지

HTTP 메시지는 사람이 이해하기 쉽게 되어있다.
크롬을 기반으로 HTTP메시지를 살펴보자

HTTP 요청:


method: 클라이언트가 수행하고자 하는 동작을 정의
path: 리소스 경로
나머지는 서버에 추가 정보를 전달하는 헤더들

HTTP 응답:


HTTP요청과 마찬가지로 여러 헤더들과 캡쳐 이미지에는 없지만 요청의 성공여부(200), 그리고 리소스가 포함된 본문이 있다.

HTTPS

HTTP프로토콜의 문제점은 서버로부터 들어오는 데이터가 암호화가 되지 않는 다는것이다. 즉, 데이터가 도난당할 확률이 높다는 것이다.
그래서 HTTPS는 SSL(보안 소켓 계층)을 사용함으로써 이 문제를 해결하였다.
간단하게 설명하자면, SSL은 서버와 클라이언트간에 안전하게 암호화된 연결을 만들어주고 도난을 방지하는 역할을 한다.

기존에 HTTP에서 HTTPS로 전환하게 되면 검색엔진 최적화에서도 혜택을 볼 수 있는데, 구글에서 HTTPS 웹사이트에 가산점을 주기 때문이다.
또한 AMP(Accelerated Mobile Pages)를 만들때도 HTTPS을 사용해야만 한다.

AMP란, 2015월 10월 초에 구글이 공개한 프레임워크로 지연없이 페이지에 바로 액세스 가능하게 하고 다양한 웹기반 기술을 통해 모바일 웹의 성능을 높이기 위한 목적을 가진다.

0개의 댓글