HTTP
HTTP (HyperText Transfer Protocol)
하이퍼텍스트 교환을 위한 통신 규약으로, 서버/클라이언트 모델을 따라 "데이터를 주고 받기" 위한 프로토콜이다.
클라이언트 시스템에서 서버를 요청하고, 서버에서 응답 메시지를 보내는 작업이 HTTP의 일반적인 흐름이다.
※ 하이퍼텍스트(HyperText): 하이퍼링크를 통해 독자가 한 문서에서 다른 문서로 즉시 접근할 수 있는 텍스트
HTTP의 특징
- 80번 포트 사용
: HTTP 클라이언트는 80번 포트로 요청을 보내고, HTTP 서버가 80번 포트에서 요청을 기다리고 있다. - 무상태 (Stateless) 프로토콜
정보를 한번씩 주고 받은 후에 바로 끊는 형태로, 상태 정보를 저장하지 않는다. - HTTP 메시지 (클라이언트와 서버가 통신과정에서 주고 받는 정보)는 크게 요청과 응답으로 구분된다.
HTTP 구조
애플리케이션 레벨의 프로토콜로, TCP/IP 위에서 작동한다.
요청 메시지 (Request)

1) Method - 서버가 수행해야 할 동작을 지정하여 요청을 보내는 방법
- GET: 리소스 조회
- POST: 데이터 추가, 등록 (주로, 클라이언트가 HTML폼의 데이터를 전송)
- PUT: 리소스 대체, 수정 / 해당 리소스가 없으면 새롭게 생성
- DELETE: 리소스 삭제
- PATCH: 리소스 부분 변경 (수정)
2) Path - 가져오려는 리소스의 경로
3) Version - HTTP 프로토콜의 버전
4) Headers - 요청에 대한 부가적인 정보
5) Body - 요청과 함께 전달되는 데이터 (POST, PUT)
응답 메시지 (Response)

1) Status Code - 요청의 성공 여부와 그 이유를 나타내는 상태 코드
2) Status Message - 아무런 영향력이 없는, 상태 코드의 짧은 설명을 나타내는 메시지
3) Version - HTTP 프로토콜 버전
4) Headers - 응답에 대한 부가적인 정보
HTTPS
HTTPS (Hyper Text Transfer Protocol Secure)
HTTP에 데이터 암호화가 추가된 프로토콜으로, 암호화 되지 않은 평문 데이터를 전송하는 HTTP 보안 문제를 해결하기 위해 등장하였다.
* HTTPS의 특징
- 443번 포트 사용
- 암호화를 지원하여, 제 3자가 정보를 볼 수 없음
* HTTPS의 암호화
(i) 대칭키 암호화
- 클라이언트와 서버가 동일한 키를 사용하여 암호화/복호화
- 키가 노출되면 위험함
- 연산 속도가 빠름
(ii) 비대칭키 암호화
- 1개의 쌍으로 구성된 공개키와 개인키를 사용하여 암호화/복호화
- 키가 노출되어도 비교적 안전함
- 연산 속도가 느림
- 공개키로 암호화 시, 개인키로만 복호화 가능 → 나만 볼 수 있음
- 개인키로 암호화 시, 공개키로만 복호화 가능 → 내가 인증한 정보임을 알려 신뢰성 보장
※ HTTPS 연결을 위해 서버/클라이언트 간 세션키를 교환하며, 세션키를 대칭키로 사용하여 데이터를 주고 받는다.
- 비대칭키를 사용하여 세션키를 주고 받음 (안전하게 세션키 공유)
- 세션키를 대칭키로 사용하여 데이터를 주고 받음 (빠른 연산 속도)
* HTTPS 동작 상세 과정
1) 클라이언트가 서버로 최초 연결 시도
2) 서버는 공개키(인증서)를 클라이언트에 넘김
3) 클라이언트는 인증서의 유효성을 검사 후, 세션키를 발급
4) 세션키는 서버의 공개키로 암호화되어 서버로 전송 (클라이언트는 세션키 보관)
5) 세션키를 전달받은 서버는, 개인키로 세션키를 복호화하여 얻음
6) 클라이언트와 서버는 동일한 세션키를 공유하게 됨
7) 데이터를 전달할 때 세션키로 암호화/복호화를 진행함.

※ 인증서 (서버의 공개키) 발급
일반적으로 인증된 기관에 공개키를 전송하여 인증서를 발급받는다.
인증서의 요청, 발급 및 클라이언트에 공유하는 과정은 다음과 같다.
- A기업이 공개키를 저장하는 인증서의 발급을 인증 기관에 요청함
- 인증 기관은 인증 기관의 이름, 서버의 공개키, 서버의 정보 등을 기반으로 인증서를 생성하여, 인증 기관의 개인키로 암호화하여 A기업에 제공 (인증기관의 개인키로 암호화된 A기업 인증서)
- A기업은 암호화된 인증서를 클라이언트에 제공
- 클라이언트는 인증된 기관의 공개키를 미리 다운받아 갖고 있어, 인증서를 복호화 (인증기관의 공개키로 A기업 인증서를 복호화)
- 복호화로 얻은 A기업의 공개키로 세션키를 암호화하여 공유 (A기업 공개키로 세션키를 암호화)
HTTP vs HTTPS
HTTPS는 HTTP에 암호화가 추가되어, 안전하게 데이터를 주고받을 수 있다.
하지만, 암호화/복호화 과정에 의해 HTTP보다 속도가 느리며, 인증증서 발급 및 유지에 추가 비용이 발생할 수 있다.
개인정보와 같은 보안에 민감한 데이터에는 HTTPS를 사용하고, 노출이 되어도 상관없는 단순한 정보 조회에는 HTTP를 사용하면 된다.
References
https://mangkyu.tistory.com/98
[Web] HTTP와 HTTPS의 개념 및 차이점
1. HTTP란? [ HTTP(Hyper Text Transfer Protocol)란? ] HTTP(Hyper Text Transfer Protocol)란 서버/클라이언트 모델을 따라 데이터를 주고 받기 위한 프로토콜이다. 즉, HTTP는 인터넷에서 하이퍼텍스트를 교환하기 위
mangkyu.tistory.com
https://velog.io/@ijaesin/TCPIP-1
TCP/IP (1) - 컴퓨터 네트워크 / 애플리케이션 계층 / 트랜스포트 계층
해당 포스트는 리브로웍스, 『(명쾌한 설명과 풍부한 그림으로 배우는) TCP/IP: 쉽게, 더 쉽게』,, 제이펍(2016)을 참고하여 작성하였습니다.
velog.io
'CS스터디' 카테고리의 다른 글
| [네트워크] TCP, UDP (0) | 2024.01.28 |
|---|---|
| [네트워크] OSI 7계층 (0) | 2024.01.28 |
| [Web] 웹 동작 방식 (0) | 2024.01.28 |
| [네트워크] IP 주소 (1) | 2024.01.25 |
| [네트워크] HTTP 상태코드 (0) | 2024.01.24 |