HTTP란?

  • HTTP(Hyper Text Transfer Protocol)란 서버와 클라이언트간의 데이터를 주고 받기 위한 프로토콜입니다.
  • 월드 와이드 웹(WWW)에 내장된 프로토콜 입니다
  • 어플리케이션 계층에 해당 되며 웹 서비스 통신에 사용됩니다.

간단하게 http의 역사를 알아보자면 다음과 같습니다.

HTTP/1.0

  • 기본적으로 한 열결당 하나의 요청을 처리하도록 설계되어 있습니다.
  • 하나의 연결당 하나의 요청을 처리하기 때문에 RTT 증가를 불러 오게 되었습니다...
    • RTT : 패킷이 목적지에 도달하고 나서 다시 출발지로 돌아오기까지 걸리는 시간을 가르키며 간단하게 패킷의 왕복 시간이라고 이해 하면 됩니다.
    • 이러한 RTT 증가를 해결하기 위해 css의 이미지 스플리팅, 코드 압축, 이미지 Base64 인코딩 등을 사용했습니다.
      • 하지만 Base64 인코딩의 경우 이미지에 대한 재 요청을 안하는 대신 이미지의 크기가 인코딩 되면서 37% 정도 크기가 더 커지는 단점을 가지고 있습니다.

HTTP/1.1

  • keep-alive라는 옵션을 통해 매번 TCP 연결을 하는 것이 아니라 한 번 TCP 초기화를 진행한 후 여러개의 파일을 송수신할 수 있게 변했습니다.
  • HTTP/1.0에도 keep-alive가 있었지는 표준화가 안되어 있었고 HTTP/1.1에서 표준화가 되어 기본 옵션이 되었습니다.
  • 단점으로는 헤더에 인증이나 쿠키 등 많은 메타데이터가 들어 있고 이를 압축하지 않아 무거워 질 수 있습니다.

HTTP/2

  • HTTP/2 는 SPDY 프로토콜에서 파생된 HTTP/1.x 보다 지연 시간을 줄이고 응답 시간을 더 빠르게 할 수 있습니다.
  • 추가적으로 멀티플렉싱, 헤더 압축, 서버 푸시, 요청의 우선순위 처리를 지원하는 프로토콜 입니다.
    • 멀티플렉싱 : 여러 개의 스트림을 사용하여 송수신 하는 것으로 이를 통해 특정 스트림의 패킷이 손실되었더라도 해당 스트림에만 영향을 가지고 나머지 스트림들은 정상적으로 작동 할 수 있습니다.
    • 서버 푸시 변경점 : HTTP/1.1 에서는 클라이언트가 서버에 요청을 해야 파일을 다운받을 수 있었지만, HTTP/2는 클라이언트 요청 없이 서버가 리소스를 바로 전송할 수 있습니다.
      • 예시로 클라이언트는 http파일 요청만 보내더라도 서버가 http + css(파일 푸시)를 통해 줄 수 있습니다.

HTTPS

  • HTTPS는 HTTP over Secure Socket Layer의 약자입니다.
  • HTTPS는 애플리케이션 계층과 전송 계층 사이에 신뢰 계층인 SSL/TLS 계층을 넣은 신뢰할 수 있는 HTTP요청입니다.
  • 위를 통해 통신에 암호화를 적용합니다.
  • 참고) HTTP/2는 HTTPS 위에서 동작 합니다

SSL/TLS

  • SSL/TLS는 전송 계층에서 보안을 제공하는 프로토콜 입니다.
  • SSL/TLS는 보안 세션을 기반으로 데이터를 암호화하며 보안 세션이 만들어 질 때 인증 메커니즘, 키 교환 암호화 알고리즘, 해싱 알고리즘을 사용합니다.
  • 클라이언트와 서버가 통신을 할 때 제3자가 메시지를 도청하거나 변조하지 못하도록 합니다.
    • -> 악의적 공격자의 네트워크상의 인터셉터를 방지할 수 있습니다.

인증 메커니즘

  • 인증 메커니즘은 CA(Certificate Authorities)에서 발급한 인증서를 기반으로 이루어 집니다.
    • CA는 아무나 발급할 수 없으며 신뢰성이 엄격하게 공인된 기업 들만 참여할 수 있습니다
      • Cloudflare, Comodo, GoDaddy, GlobalSign, 아마존 등이 있습니다.
      • 개인도 인증서를 발급할 수 있지만 브라우저에서 안전하지 않은 연결이라고 경고를 줍니다.
  • 공개키와 비밀키를 이용해 인증을 합니다.
    • CA에서 발급한 인증서를 기반으로 클라이언트에서 공개키를 제공하고 사용자가 접속한 서버가 신뢰할 수 있는 서버임을 보장해 줍니다.

출처

profile
꾸준히 발전하는 개발자

0개의 댓글