네트워크
HTTP & HTTPS
탁재민
2024. 3. 5. 18:18
HTTP
웹 상에서 클라이언트-서버가 데이터를 주고받기 위한 통신 프로토콜
- html, css, js, 이미지, 폰트 등 전송
- 클라이언트 요청(requests) <-> 서버 응답(responses)
- GET(요청), POST(작성), PUT(수정), PATCH(일부 수정), DELETE(삭제) 등의 메소드 사용
- HTTP/0.9
- GET 메서드로 HTML 파일만 가져올 수 있음
- HTTP/1.0
- 헤더로 메타데이터 전송
- GET, POST, HEAD 메소드 사용
- Content-Type 추가(text/html, image/webp, audio/mp4, application/json 등)
- 상태 코드 추가
- connection 하나당 1 요청, 1 응답만 처리
- HTTP/1.1
- 연속적인 요청 사이에 커넥션 유지
- OPTION, PUT, DELETE, TRACE 메소드 추가
- Pipelining 방식: 첫번째 요청에 대한 응답 전송 전에 두번째 요청 전송 가능
- Head Of Line Blocking 문제: 응답은 순서대로 해야 하므로 첫번째 응답이 지연되면 이후 응답도 막힘
- HTTP/2.0
- 이진 프로토콜
- HPACK 알고리즘으로 헤더 압축
- Multiflexing: 동일한 연결을 통해 병렬 요청을 수행
- Server push: 서버가 향후 요청에서 예상되는 추가 정보를 클라이언트에 전송
- HTTP/3.0
- UDP 기반의 QUIC 프로코콜
- TCP handshake와 TLS 협상을 QUIC로대체(1RTT, 캐시 시 0RTT)
- 네트워크 변경 되도 연결 유지
- 패킷 손실 시 전체 연결에 대한 영향 최소화
- 멀티플렉싱 강화
- 문제점
- 기존 체계와의 호환성 문제
- 헤더도 암호화 되므로 네트워크 혼잡 제어 힘듬
- CPU 추가 사용
HTTPS
HTTP의 통신을 SSL/TLS 프로토콜을 사용하여 암호화
- SSL: 보안 취약점으로 사용되지 않음
- TLS 1.2: 현재 가장 많이 사용
- TLS 1.3: 핸드셰이크 과정 축소, 성능과 보안 강화
TLS 1.2

1. Client Hello(암호화 방식 종류, TLS 버전, 난수) 전송
2. Server Hello(암호화 방식 선택, 난수), Server Certificate(인증서), Server Hello Done(완료) 전송
3. 클라이언트가 서버의 SSL 인증서를 인증서 발행 기관을 통해 검증
4. 클라이언트가 pre-master secret을 생성하여 공개키로 암호화해 서버로 보냄
5. 클라이언트와 서버가 클라이언트 난수, 서버 난수, pre-master secret 를 조합하여 대칭키(세션키)를 생성
6. 서로 완료 패킷 보내고 TLS 협상 종료