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 컨넥션 위에서 동작한다.
개선점
- 스트림
- [HTTP/1.1] 요청/응답을 마다 TCP 컨넥션을 맺었다. 여러 개의 TCP 컨넥션 맺어 병렬적으로 요청/응답한다.
- [HTTP/2.0] 하나의 TCP 컨넥션에 여러 개의 스트림을 만들어 요청/응답을 동시에 처리한다. 스트림의 고유 식별자가 고갈되면 TCP 컨넥션을 다시 맺는다.
- 헤더 압축
- [HTTP/1.1] 헤더를 아무런 압축 없이 그대로 전송되었다.
- [HTTP/2.0] HPACK 명세 기반으로 헤더 압축하여 전송한다.
- 서버 푸시
- 서버가 하나의 요청에 대해 응답으로 여러 개의 리소스를 보낼 수 있도록 해준다.
HTTPS
HTTPS를 사용할 때, 모든 HTTP 요청과 응답 데이터는 네트워크로 보내지기 전에 암호화된다. HTTPS는 HTTP의 하부에 전송 레벨 암호 보안 계층을 제공함으로 동작한다. 이 보안 계층은 전송 계층 보안(Transport Layer Security, TLS)을 이용하여 구현된다.
6. 애플리케이션 계층: HTTP
5. 보안 계층: TLS
4. 전송 계층: TCP
3. 네트워크 계층: IP
2. 데이터 링크 계층: 네트워크를 위한 링크 인터페이스
1. 물리 계층: 물리적인 네트워크 하드웨어
인코딩 및 디코딩 작업은 대부분 보안 계층에서 이뤄지기 때문에 웹 클라이언트나 서버에서 로직을 수정할 필요는 없다.
트랜잭션
- HTTP
- 서버의 80 포트로 TCP 컨넥션 수립
- TCP를 통해 보내진 HTTP 요청
- TCP를 통해 보내진 HTTP 응답
- TCP 컨넥션 닫힘
- HTTPS
- 서버의 443 포트로 TCP 컨넥션 수립
- SSL 보안 매개변수 핸드셰이크
- SSL을 통해 보내진 HTTP 요청/TCP를 통해 보내진 암호화된 요청
- SSL을 통해 보내진 HTTP 응답/TCP를 통해 보내진 암호화된 응답
- SSL 닫힘 통지
- TCP 컨넥션 닫힘
SSL 핸드셰이크
- 클라이언트가 암호 후보들을 보내고 인증서를 요구한다.
- 서버는 선택된 암호와 인증서를 보낸다.
- 클라이언트가 비밀정보를 보낸다. 클라이언트와 서버는 키를 만든다.
- 클라이언트와 서버는 서로에게 암호화를 시작한다고 말해준다.