HTTP 완벽가이드 - ChoDragon9/posts GitHub Wiki

HTTP

  • HTTP는 애플리케이션 계층 프로토콜이다.
  • TCP/IP을 사용하며, TCP와 IP는 패킷 교환 네트워크 프로토콜의 집합이다.
    • TCP는 IP, Port를 사용해서 컨넥션을 맺는다.
5. 애플리케이션 계층: HTTP
4. 전송 계층: TCP
3. 네트워크 계층: IP
2. 데이터 링크 계층: 네트워크를 위한 링크 인터페이스
1. 물리 계층: 물리적인 네트워크 하드웨어

HTTP/2.0

  • HTTP의 메시지 교환 방식은 응답을 받아야만 다음 요청을 보낼 수 있기 때문에 심각한 회전 지연(latency)를 피할 수 없다.
  • 이를 개선하기 위해 HTTP/1.1의 저자 중 한 명인 로이 필딩(Roy Fielding)은 WAKA를, MS에서는 S+M(Speed+Mobility)를, 구글에서는 SPDY를 제안했다.
  • HTTP 작업 그룹은 구글의 SPDY를 기반으로 HTTP/2.0 초안을 작성했으며, SPDY의 특징을 거의 그대로 유지하고 있다.
  • HTTP/2.0은 서버와 클라이언트 사이의 TCP 컨넥션 위에서 동작한다.

개선점

  1. 스트림
    • [HTTP/1.1] 요청/응답을 마다 TCP 컨넥션을 맺었다. 여러 개의 TCP 컨넥션 맺어 병렬적으로 요청/응답한다.
    • [HTTP/2.0] 하나의 TCP 컨넥션에 여러 개의 스트림을 만들어 요청/응답을 동시에 처리한다. 스트림의 고유 식별자가 고갈되면 TCP 컨넥션을 다시 맺는다.
  2. 헤더 압축
    • [HTTP/1.1] 헤더를 아무런 압축 없이 그대로 전송되었다.
    • [HTTP/2.0] HPACK 명세 기반으로 헤더 압축하여 전송한다.
  3. 서버 푸시
    • 서버가 하나의 요청에 대해 응답으로 여러 개의 리소스를 보낼 수 있도록 해준다.

HTTPS

HTTPS를 사용할 때, 모든 HTTP 요청과 응답 데이터는 네트워크로 보내지기 전에 암호화된다. HTTPS는 HTTP의 하부에 전송 레벨 암호 보안 계층을 제공함으로 동작한다. 이 보안 계층은 전송 계층 보안(Transport Layer Security, TLS)을 이용하여 구현된다.

6. 애플리케이션 계층: HTTP
5. 보안 계층: TLS
4. 전송 계층: TCP
3. 네트워크 계층: IP
2. 데이터 링크 계층: 네트워크를 위한 링크 인터페이스
1. 물리 계층: 물리적인 네트워크 하드웨어

인코딩 및 디코딩 작업은 대부분 보안 계층에서 이뤄지기 때문에 웹 클라이언트나 서버에서 로직을 수정할 필요는 없다.

트랜잭션

  • HTTP
    1. 서버의 80 포트로 TCP 컨넥션 수립
    2. TCP를 통해 보내진 HTTP 요청
    3. TCP를 통해 보내진 HTTP 응답
    4. TCP 컨넥션 닫힘
  • HTTPS
    1. 서버의 443 포트로 TCP 컨넥션 수립
    2. SSL 보안 매개변수 핸드셰이크
    3. SSL을 통해 보내진 HTTP 요청/TCP를 통해 보내진 암호화된 요청
    4. SSL을 통해 보내진 HTTP 응답/TCP를 통해 보내진 암호화된 응답
    5. SSL 닫힘 통지
    6. TCP 컨넥션 닫힘

SSL 핸드셰이크

  1. 클라이언트가 암호 후보들을 보내고 인증서를 요구한다.
  2. 서버는 선택된 암호와 인증서를 보낸다.
  3. 클라이언트가 비밀정보를 보낸다. 클라이언트와 서버는 키를 만든다.
  4. 클라이언트와 서버는 서로에게 암호화를 시작한다고 말해준다.