질문의 핵심
- HTTP란?
- HTTP에 비해 HTTPS의 장점은?
- 응답 메서드의 종류?
- HTTP 요청 메시지?
- HTTP의 특징?
1. HTTP(Hyper-Text Transfer Protocl)
HTTP란?
- 하이퍼텍스트 문서를 교환하기 위한 응용 계층 프로토콜.
- 웹 서버와 클라이언트 간에 데이터를 주고받기 위해 만들어놓은 통신 규약.
- 초기에는 HTML을 주로 전송했지만, 최근에는 다른 다양한 형태의 정보도 전송한다.
- 초기에는 웹 브라우저와 웹 서버 간의 커뮤니케이션을 위해 디자인되었지만, 최근에는 모바일 애플리케이션 및 IoT 등과의 커뮤니케이션 같은 다른 목적으로도 사용된다.
- 클라이언트가 요청을 생성하기 위한 연결을 연 다음, 응답 받을 때까지 대기하는 클라이언트-서버 모델을 따른다.
- 서버가 클라이언트의 요청에 응답한 후에는 클라이언트와 서버의 연결이 끊어지는 비연결성(Conectionless) 프로토콜 이다.
- 서버가 두 요청 간에 어떠한 상태나 데이터를 유지하지 않는 무상태(Stateless) 프로토콜이다.
- 일반적으로 안정적인 TCP/IP 레이어를 기반으로 사용한다.
- 포트 번호는
80
이다.
- 암호화가 되지 않아 내용이 노출되는 보안 이슈가 존재한다. 이를 해결하기 위해 HTTPS 프로토콜이 등장했다.
HTTP 동작 방식
클라이언트(서버에게 요청을 보내는 리소스 사용자)가 브라우저를 통해서 어떠한 서비스를 URI
로 서버(요청에 대한 응답을 제공하는 리소스 관리자)에 요청(Request)하면 서버는 해당 요청에 대한 결과를 응답(Response)한다.
1. TCP Connection
TCP 연결은 요청을 보내거나 응답받는데 사용된다. 클라이언트는 새 연결을 열거나, 기존 연결을 재사용하거나, 서버에 대한 여러 TCP 연결을 열 수 있다.
2. HTTP 메시지 전송
3. 서버에 의한 전송된 응답을 읽음
4. TCP 연결을 닫거나 다른 요청들을 위해 재사용
HTTP Message
요청
![](https://velog.velcdn.com/images/wngkdroqkf441/post/4afbdb81-edd0-4cb2-87a1-ce499b933ffc/image.png)
- HTTP Method + Path + 프로토콜 종류
- HTTP 요청 헤더, 리소스를 요청하는 경로
HTTP의 기본 포트인 80번 포트의 경우에는 포트 번호가 생략된다(위 그림).
HTTP 요청 메서드
GET
: 클라이언트가 서버에 리소스를 요청할 때.
POST
: 클라이언트가 서버의 리소스를 새로 만들 때.
PUT
: 클라이언트가 서버의 리소스를 수정할 때.
DELETE
: 클라이언트가 서버의 리소스를 삭제할 때.
- 그 외:
PATCH
, HEAD
, OPTIONS
, CONNECT
, TRACE
, ...
응답
![](https://velog.velcdn.com/images/wngkdroqkf441/post/c2025ce2-18e6-4633-8b74-03869bd14c36/image.png)
- 프로토콜 종류 + HTTP 상태 코드 + HTTP 상태 메시지
- HTTP 응답 헤더
HTTP 상태 코드
1xx
(정보): 요청을 받았으며 프로세스를 계속 진행함.
2xx
(성공): 요청을 성공적으로 받았으며 인식했고 수용함.
3xx
(리다이렉션): 요청 완료를 위해 추가 작업 조치가 필요함.
4xx
(클라이언트 오류): 요청의 문법이 잘못되었거나 요청을 처리할 수 없음.
5xx
(서버 오류): 서버가 명백히 유효한 요청에 대한 충족을 실패.
2. HTTPS(Hyper-Text Transfer Protocol Secure)
HTTPS란?
- HTTP에 데이터 암호화가 추가된 프로토콜.
- 인터넷 상에서 정보를 암호화하는 SSL(Secure Socket Layer) 프로토콜을 사용하여 클라이언트와 서버가 자원을 주고받을 때 사용하는 통신 규약.
- HTTP에 Secure Socket이 추가된 형태로, 기존의 HTTP 통신에 SSL 혹은 TLS(Transport Layer Security) 프로토콜을 조합하여 세션 데이터를 암호화한다.
- 공개키 암호화 방식을 사용한다.
- 포트 번호는
443
이다.
- HTTP에 비해 속도가 느리다(요즘은 별로 차이나지 않는다). 또한, 인증서를 발급하고 유지하기 위한 추가 비용이 발생하다.
- HTTPS는 검색엔진에 최적화되어있다.
HTTPS 동작 방식
- 클라이언트는 서버에 접속하면, 서버인증서(CA)를 받는다.
- 서버인증서 신뢰 여부 체크 후, 공개키를 추출한다.
- 클라이언트는 서버와 통신하는 동안만 사용할 대칭키를 임의로 만들고, 해당 대칭키를 공개키로 암호화 후 전송한다.
- 서버는 개인키로 클라이언트가 보낸 메시지를 복호화하여 대칭키를 추출하고, 해당 대칭키를 이용하여 클라이언트와 통신한다.
참조