-
[네트워크] HTTP와 HTTPSFrontend/Computer Science 2022. 3. 29. 01:26
네트워크에 대해 공부할 때 가장 흔하게 쓰이는 용어 중 하나이다. 익히 들어와서 익숙하지만 막상 말로 설명하려고 하면 모르는 부분이 많다. 자세한 개념에 대해 알아보기로 하자.
HTTP 프로토콜의 개요
HTTP는 HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜이다.
HTTP는 웹에서 이루어지는 모든 데이터 교환의 기초이며, 클라이언트-서버 프로토콜이기도 하다.
보통 브라우저인 클라이언트에 의해 전송되는 메시지를 요청(requests)이라고 하고, 그에 대해 서버에서 응답으로 전송되는 메시지를 응답(responses)이라고 한다.
HTTP의 구성요소
클라이언트와 서버 사이에는 서로 다른 작업을 수행하고 게이트웨이 또는 캐시 역할을 하는 프록시가 있다.
클라이언트
웹 페이지를 표시하기 위해 브라우저는 페이지를 나타내는 HTML 문서를 가져오라는 요청을 보낸다. 그런 다음 이 파일을 분석하여 실행 스크립트, 표시할 레이아웃 정보(CSS) 및 페이지에 포함된 하위 리소스에 해당하는 추가 요청을 보낸다. 그런 다음 웹 브라우저는 이러한 리소스를 결합하여 완전한 문서인 웹 페이지를 제공한다. 브라우저에서 실행되는 스크립트는 이후 단계에서 더 많은 리소스를 가져올 수 있으며 브라우저는 그에 따라 웹 페이지를 업데이트한다.
웹 서버
통신 채널의 반대편에는 클라이언트가 요청한 대로 문서를 제공하는 서버가 있다. 서버는 가상으로 단일 시스템으로만 나타난다. 그러나 실제로는 부하를 공유하는 서버 모음(로드 밸런싱)이거나 다른 컴퓨터(캐시, DB 서버 또는 전자 상거래 서버와 같은)를 조사하는 복잡한 소프트웨어 조각일 수 있으며 요청 시 문서의 전체 또는 부분을 생성한다.
프록시
웹 브라우저와 서버 사이에서 수많은 컴퓨터와 기계가 HTTP 메시지를 중계한다. 프록시는 다음과 같은 다양한 기능을 수행할 수 있다.
- 캐싱(캐시는 브라우저 캐시와 같이 공개 또는 비공개일 수 있음)
- 필터링(예: 바이러스 백신 검사 또는 자녀 보호 기능)
- 로드 밸런싱(여러 서버가 서로 다른 요청을 처리할 수 있도록 허용)
- 인증(다른 리소스에 대한 액세스를 제어하기 위해)
- 로깅(이력 정보 저장 허용)
HTTP 프로토콜의 특징
1. 무상태성 (Stateless)
- 서버가 클라이언트의 상태를 보존하지 않는다.
- 갑자기 클라이언트 요청이 증가해도 서버를 대거 투입할 수 있기 때문에 무상태는 응답 서버를 쉽게 바꿀 수 있다.
2. 비연결성 (Connectionless)
- HTTP 1.0 기준으로 HTTP는 서버와 클라이언트의 연결을 유지하지 않는 모델이다.
- 서버 자원을 효율적으로 사용할 수 있다.
3. 단순성, 확장 가능하다.
- HTTP 메시지는 사람이 읽고 이해할 수 있으며, HTTP 헤더를 사용하면 프로토콜을 쉽게 확장하고 실험할 수 있다.
HTTPS
HTTP에 데이터 암호화가 추가된 프로토콜로 인터넷 상에서 정보를 암호화하는 SSL 프로토콜을 사용하여 클라이언트와 서버가 자원을 주고받을 때 사용하는 통신 규약을 말한다.
SSL
- SSL은 전자상거래에서의 데이터 보안을 위해서 개발한 통신 레이어다. SSL은 표현 계층의 프로토콜로 응용 계층 아래에 있기 때문에, 어떤 응용 계층의 데이터라도 암호화해서 보낼 수 있다.
- HTTP는 기본적으로 평문 데이터 전송을 원칙으로 하기 때문에 개인의 프라이버시가 오가는 서비스들 (전자상거래, 전자메일, 사내 문서)에 사용하기 힘들다.
- HTTPS는 SSL 레이어 위에 HTTP를 통과시키는 방식이다. 즉 평문의 HTTP 문서는 SSL 레이어를 통과하면서 암호화돼서 목적지에 도착하고, 목적지에서는 SSL 레이어를 통과하면서 복호화돼서 웹 브라우저에 전달된다.
- 간혹 HTTPS를 하나의 프로토콜로 인식하기도 하는데, HTTP와 SSL은 전혀 다른 계층의 프로토콜의 조합이다. HTTPS over SSL로 보는 게 좀 더 정확한 시각이다.
HTTP와 다른 점
- HTTPS URL은 "https://" 로 시작한다. 기본 포트번호는 443이다. HTTP URL은 "http://" 로 시작한다. 기본 포트번호는 80이다.
- HTTP는 평문 데이터를 기반으로 하기 때문에, 유저 정보와 같은 민감한 정보가 인터넷 상에 그대로 노출된다. 이 정보는 수집되거나 변조될 수 있다. HTTPS는 이러한 공격을 견딜 수 있도록 설계돼 있다.
- HTTPS는 인증서를 이용해서, 접속 사이트를 신뢰할 수 있는지 평가할 수 있다.
- 일반적으로 HTTPS는 HTTP에 비해서 느리다. 많은 양의 데이터를 처리할 경우 성능의 차이를 체감할 수 있다.
- 많은 웹 사이트들이 민감한 정보를 다루는 페이지 (로그인 혹은 유저 정보) 페이지를 HTTPS로 전송하고, 기타 페이지는 HTTP로 전송하는 방법을 사용한다.
참고자료
https://developer.mozilla.org/en-US/docs/Web/HTTP
https://velog.io/@yanghl98/Network%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-HTTP-HTTPS
반응형'Frontend > Computer Science' 카테고리의 다른 글
[OS] Process와 Thread (0) 2022.03.31 [자료구조] Array와 Linked List (0) 2022.03.30 [네트워크] REST API와 RESTful (0) 2022.03.26 [네트워크] CORS에 대해 (0) 2022.03.24 [네트워크] same-site와 same-origin 그리고 cross-origin (0) 2022.03.23