- HTTP에서는 요청 시 header와 body를 주고받음 헤더는 콜론으로 구분되는 key-value 형태로 다양한 정보를 담고 있음
HTTP 헤더의 종류
- 일반 헤더:
- 요청한 URL, 요청 메서드, 출처 정책 등의 정보를 포함한다.
- 보안 수준에 따라 자원 출처 노출 여부 등이 설정된다.
- ⭐요청 헤더:
- 클라이언트가 서버에 요청할 때 클라이언트가 설정하거나 자동으로 설정되는 헤더이다.
- 예를 들어, 요청 메서드, 클라이언트의 OS, 브라우저 정보, 사용자 커스텀 헤더 등이 요청 헤더에 포함된다.
- ⭐응답 헤더:
- 서버가 클라이언트에게 응답할 때 설정되는 헤더이다.
- 서버의 소프트웨어 정보 등이 응답 헤더에 담긴다.
- 대부분의 서버는 보안상의 이유로 서버 정보를 숨기기 위해 응답 헤더에서 해당 정보를 노출하지 않는다
HTTP/1.0 vs. HTTP/1.1: 발전과 문제
1. HTTP/1.0
- 수명이 짧은 연결
- 각 요청마다 TCP 핸드셰이크가 필요, 한 연결당 하나의 요청 처리 => RTT가 늘어나는 문제점 존재
- 리소스마다 TCP 연결 필요: keep-alive 옵션을 설정해야지만 연결이 유지
2. HTTP/1.1
- Keep-Alive 기본 활성화:매번 요청마다 TCP 연결을 재설정하는 것이 아니라 유지 가능.
- 호스트 헤더 도입: 여러 호스트를 지원하기 위해 헤더에 호스트 정보 추가.
- 대역폭 최적화: 중간에 연결이 끊겨도 다운로드 재개 가능 (Range 헤더 활용).
3. 요청을 줄이기 위한 기술
- 이미지 스프라이트: 여러 이미지를 하나의 이미지로 결합, 단일 요청으로 처리.
- 코드 압축: 띄어쓰기, 개행문자 등을 줄여 코드 크기 최적화.
- 이미지 Base64 인코딩: 이미지를 문자열로 인코딩, 별도의 이미지 요청 없이 사용 가능.
4. HTTP/1.1의 문제: HOL (Head of Line Blocking)
- HOL 현상 발생: 네트워크에서 첫 번째 패킷 지연으로 인해 뒷부분 패킷도 지연.
- 큰 헤더와 HOL로 인한 성능 저하 발생.
HTTP/1.1은 많은 개선을 이뤘지만 HOL과 무거운 헤더로 인한 문제를 완전히 해결하지 못함. 여전히 최적의 성능을 위해 여러 기술이 함께 활용됨.
HTTP/2 vs. HTTP/3: 개요
1. HTTP/2
- 바이너리 포맷 계층
- HTTP/2에서는 애플리케이션 계층과 전송 계층 사이에 바이너리 포맷 계층을 추가하여 데이터를 전송.
- 전송되는 메시지는 작은 프레임으로 분할되어 전송됨.
- 멀티 플렉싱
- 단일 TCP 연결의 여러 스트림에서 비동기적으로 다수의 HTTP 요청과 응답 처리.
- HOL 문제를 해결하며, 병렬적이고 효율적인 데이터 다운로드 가능.
- 서버 푸시
- 서버가 클라이언트에게 필요한 리소스를 알아서 푸시 가능.
- 예를 들어, HTML 요청 시 필요한 CSS, JS 등을 미리 전송.
- 헤더 압축
- 헤더를 효율적으로 압축하여 전송.
- 중복 헤더는 제외하고, 허프만 인코딩 등을 사용한 압축.
- 우선 순위
- 서버가 리소스 전송의 우선순위를 지정하여 성능 최적화.
2. HTTP/3
- QUIC 프로토콜 도입: UDP 기반의 QUIC 프로토콜 사용으로 초기 연결 및 데이터 전송 속도 향상.
- 단일 핸드셰이크: TLS 핸드셰이크로 클라이언트-서버 간의 연결 및 암호화 동시에 설정. (HTTP/2의 경우 3회의 RTT 필요)
- 순방향 오류 수정 매커니즘: 패킷이 손상되었을 때, 수신 측에서 에러를 검출하고 수정하는 FEC 도입.
- 저 패킷 손실률: 열약한 네트워크에서도 낮은 패킷 손실률을 보장하는 특성.
HTTP/3는 기존 HTTP/2의 장점을 활용하면서도 초기 연결 속도, 데이터 전송 효율 등을 향상시켰으며, QUIC 프로토콜의 특징을 도입하여 더욱 효율적인 통신이 가능
HTTPS와 TLS: 암호화
1. 암호화
- 개념: 정보를 이해할 수 없는 형태로 변환하는 과정. 데이터를 스크램블하여 무작위로 섞는다.
- 활용: 암호화 및 복호화를 위해 송신자와 수신자가 공유하는 키가 필요.
2. 스크램블
- 정의: 데이터를 무작위로 섞는 과정.
- 예시: 128비트 고급 암호화 표준(AES)에서는 파일을 구성하는 비트를 약 10회 스크램블하여 보안을 강화.
3. 키를 기반으로 하는 암호화 방법
대칭 암호화
- 특징: 하나의 키를 사용하여 데이터를 암호화하고 복호화.
- 알고리즘: DES, AES 등이 대표적.
비대칭 암호화
- 다른 이름: 공개 키 암호화.
- 원리: 두 개의 키(공개키, 개인키)를 사용하여 데이터를 암호화 및 서명.
- 알고리즘: RSA, DH(Diffie-Hellman) 등이 대표적.
TLS (Transport Layer Security)
암호화의 필요성
- 목적: 의도된 수신자 또는 송신자 이외에는 통신을 해석할 수 없게 한다.
- 보장: 민감한 데이터 유출 방지와 데이터 무결성을 보장하여 안전한 통신 환경을 제공.
TLS 핸드셰이크 및 보안
1. TLS (Transport Layer Security)
2. DH 매개변수
- Diffie-Hellman 알고리즘:
- 두 당사자 간에 공개값과 비밀값을 교환하여 공통의 암호키 생성.
- 타원 곡선 DH(ECDHE)도 사용됨.
3. 사이퍼 슈트
TLS_AES_128_GCM_SHA256
TLS_AES_256_GCM_SHA384
TLS_CHACHA20_POLY1305_SHA256
4. 인증서
5. CA (Certificate Authority)
- 역할: 클라이언트가 서버의 신원을 확인하는 데 사용되는 SSL/TLS 인증서 발급 기업.
6. RSA의 취약점
- 문제점: 클라이언트에서 생성한 임시 암호값이 탈취당할 경우 보안 위험.
- 클라이언트와 서버가 서로 교환한 매개변수를 사용하는 DH와 달리 클라이언트가 생성한 임시 암호값을 서버로 전송하기에 탈취 위험
7. 0-RTT
- TLS 1.3의 특징: 세션키를 사용하여 인증 없이 빠른 연결을 제공. 비용 절감
보안 관련 이유로 HTTPS 사용
- 목적: 중요한 데이터 보호, 민감한 정보 전송, 보안적 통신 환경 제공.
- 장점: 금융 정보 등 민감한 데이터 안전 처리, HTTP/2 지원.
TLS는 전송 계층에서 보안을 제공하는 프로토콜로, 핸드셰이크를 통해 클라이언트와 서버 간의 안전한 통신을 확립한다. 이는 주로 DH 알고리즘, 사이퍼 슈트, 인증서, CA 등을 활용하여 구현된다. HTTPS는 이러한 TLS를 이용하여 웹 통신을 보호하는데 사용되며, 이는 중요한 정보 보호와 안전한 통신을 위해 필수적이다.
REF