HTTP 요청의 생애 주기
1. 클라이언트가 요청을 보냄
-
HTTP 요청 생성: 클라이언트(보통 웹 브라우저)가 HTTP 요청을 생성함.
-
HTTP 메서드: GET, POST 등.
-
요청된 리소스: 예를 들어
/index.html
.
-
프로토콜 버전: HTTP/1.1 등.
-
헤더와 본문:
key: value
형식의 헤더와 선택적 메시지 본문 포함.
2. DNS 조회
-
도메인 이름 변환: 사람이 읽을 수 있는 도메인 이름(
www.example.com
)을 IP 주소(93.184.216.34
)로 변환함.
-
DNS 서버 쿼리: 클라이언트가 DNS 서버에 쿼리를 보내 도메인 이름을 IP 주소로 변환함.
3. TCP 핸드셰이크
-
TCP 연결 설정: 클라이언트가 서버와 TCP 연결을 설정함.
-
3단계 핸드셰이크:
-
SYN: 클라이언트가 연결 요청을 보냄.
-
SYN-ACK: 서버가 요청을 확인함.
-
ACK: 클라이언트가 확인 응답을 보냄.
4. HTTP 요청 전송
-
HTTP 요청 전송: TCP 연결이 설정되면 클라이언트가 실제 HTTP 요청을 보냄.
5. 인터넷을 통한 패킷 라우팅
-
패킷 전송: 데이터 패킷이 여러 네트워크 장치를 통해 서버로 라우팅됨.
-
라우터 역할: 라우터가 패킷의 최적 경로를 결정함.
6. 서버 응답
-
HTTP 응답 생성: 서버가 HTTP 요청을 처리하고 응답을 생성함.
-
응답 내용:
-
프로토콜: 사용된 HTTP 버전.
-
상태 정보: HTTP 상태 코드(예: 200, 404).
-
응답 헤더: 요청 헤더와 유사함.
-
응답 본문: 요청된 콘텐츠(예: HTML 페이지, JSON 데이터).
7. 콘텐츠 렌더링
-
HTTP 응답 처리: 클라이언트가 HTTP 응답을 받아 처리함.
-
브라우저 렌더링: 브라우저가 HTML을 해석하고 화면에 콘텐츠를 렌더링함.
-
추가 리소스 요청: 이미지, CSS, JavaScript 등의 추가 리소스를 요청함.
HTTPS = HTTP + 암호화
TLS 핸드셰이크
-
TLS 핸드셰이크: 클라이언트와 서버가 암호화 및 인증 키를 교환함.
-
암호화 통신: TLS 핸드셰이크 후, 클라이언트와 서버는 HTTP를 사용하여 암호화된 메시지를 주고받음.
TLS 1.3 핸드셰이크
-
간소화된 과정: TLS 1.3은 더 적은 옵션을 제공하여 더 간단하고 안전하며 빠름.
-
핵심 단계:
-
클라이언트 헬로: 클라이언트가 지원하는 암호화 스위트와 TLS 버전을 서버에 보냄.
-
서버 헬로: 서버가 선택한 암호화 스위트와 TLS 버전을 클라이언트에 보냄.
-
인증서 검증: 클라이언트가 서버의 SSL 인증서를 검증함.
-
프리마스터 시크릿 생성: 클라이언트가 프리마스터 시크릿을 생성하고 서버에 보냄.
-
세션 키 생성: 클라이언트와 서버가 세션 키를 생성함.
-
보안 통신: 세션 키를 사용하여 보안 대칭 암호화를 통해 통신함.
GN⁺의 의견
-
인터넷 통신 이해: HTTP와 HTTPS의 기본 개념을 이해하면 네트워크 통신의 기초를 잘 다질 수 있음.
-
보안 중요성: HTTPS를 통해 데이터 전송의 보안성을 높이는 것이 중요함.
-
TLS 1.3의 장점: 더 간단하고 빠르며 안전한 TLS 1.3을 사용하는 것이 권장됨.
-
실무 적용: 실제 프로젝트에서 HTTPS를 적용하여 보안성을 강화할 필요가 있음.
-
추가 학습: 네트워크 계층과 프로토콜에 대한 추가 학습을 통해 더 깊은 이해를 얻을 수 있음.