HTTP
HTTP(Hyper Text Transfer Protocol)은 클라이언트(웹 브라우저)와 서버 간에 데이터를 주고받기 위한 프로토콜이다. 웹의 핵심 기술 중 하나로, 텍스트나 이미지, 비디오, HTML 문서 등을 전송하는 데 사용된다.
특징
1. 무상태성(Stateless) : HTTP는 무상태 프로토콜로, 각 요청 간에 상태를 유지하지 않는다. 예를 들어, 클라이언트가 서버에 두 번 요청을 보내도 서버는 첫 번째 요청과 두 번째 요청의 관계를 알 수 없다. 이를 보완하기 위해 쿠키, 세션 같은 기술을 사용해 상태를 유지한다.
2. 클라이언트-서버 구조 : HTTP는 클라이언트와 서버 간의 요청(Request)과 응답(Response)으로 이루어진다.
3. URI(Uniform Resource Identifier) : HTTP는 웹 리소스를 식별하기 위해 URI 또는 URL을 사용한다.
4. 포트 번호 : HTTP 기본 포트 80번, HTTPS(암호화된 HTTP)의 기본 포트 443번
5. 확장성 : HTTP는 다양한 데이터 형식(HTML, JSON, XML 등)을 전송할 수 있으며, 웹 APP의 다양한 요구를 지원한다.
구조
1. 요청(Request) : 클라이언트가 서버에 데이터를 요청할 때 사용하는 메시지 형식이다.
- 요청 메서드: 요청의 종류를 나타냄 (예: GET, POST)
- 예시
- GET: 서버에서 리소스를 요청 (예: HTML 페이지)
- POST: 데이터를 서버에 전송 (예: 로그인 정보)
- PUT: 서버에 데이터를 저장하거나 업데이트
- DELETE: 서버에서 리소스를 삭제
- HEAD: GET과 유사하지만, 응답 본문을 가져오지 않음
- OPTIONS: 서버에서 지원하는 메서드 확인
- 예시
- URI: 요청 대상 리소스 (예: /index.html)
- 헤더: 추가 정보 (예: User-Agent, Accept-Language)
- 본문(Body): POST와 같은 메서드에서 데이터를 전달하는 부분 (예: 폼 데이터)
2. 응답(Response) : 서버가 클라이언트 요청에 응답할 때 사용하는 메세지
- 상태 코드: 요청 처리 결과를 나타냄 예시
-
- 1xx (정보): 요청 수신, 처리 중
- 2xx (성공): 요청 성공
- 200: OK (정상 응답)
- 201: Created (리소스 생성)
- 3xx (리다이렉션): 요청 완료를 위해 추가 작업 필요
- 301: Moved Permanently (리소스 영구 이동)
- 302: Found (임시 리다이렉션)
- 4xx (클라이언트 오류): 클라이언트 요청 오류
- 400: Bad Request (잘못된 요청)
- 401: Unauthorized (인증 필요)
- 404: Not Found (리소스 없음)
- 5xx (서버 오류): 서버 처리 실패
- 500: Internal Server Error (서버 오류)
- 503: Service Unavailable (서비스 불가)
-
HTTP의 한계
1. 보안 문제 : HTTP는 데이터를 암호화하지 않으므로, 민감한 데이터가 노출될 위험이 있음. HTTPS 사용 (SSL/TLS로 암호화)
2. 무상태성 : 상태를 유지하지 않으므로, 사용자 상태를 관리하려면 추가적인 기술이 필요. 쿠키, 세션, JWT(Json Web Token) 등을 사용.
3. 실시간성 부족 : HTTP는 요청-응답 모델에 기반하므로, 서버가 클라이언트에 먼저 데이터를 전송하지 못함. WebSocket이나 Server-Sent Events(SSE) 사용.
HTTPS
HTTPS는 HTTP에 보안(SSL/TLS) 프로토콜을 추가한 버전으로, 데이터를 암호화하여 클라이언트와 서버 간의 통신을 안전하게 보호한다. 특히 민감한 정보(예: 로그인 정보, 결제 데이터)를 주고받는 웹사이트에서 반드시 사용된다.
구성 요소
1. SSL/TLS
- SSL (Secure Sockets Layer): HTTPS의 초기 보안 프로토콜로, 데이터를 암호화한다.
- 현재는 더 발전한 TLS (Transport Layer Security)가 사용된다.
- 현재 HTTPS는 사실상 HTTP over TLS다
- TLS (Transport Layer Security)
- 암호화 (Encryption)
- 데이터가 네트워크를 통해 전달될 때 제3자가 내용을 훔쳐볼 수 없도록 암호화한다.
- 클라이언트와 서버는 데이터를 주고받기 전에 세션 키를 공유해 데이터를 보호한다.
- 무결성 (Integrity)
- 전송 중에 데이터가 변경되지 않음을 보장한다.
- 데이터가 조작되거나 손상될 경우 이를 감지할 수 있다.
- 인증 (Authentication)
- 서버가 신뢰할 수 있는 기관(인증 기관, CA)에 의해 검증된 도메인인지 확인한다.
- 브라우저는 서버의 SSL/TLS 인증서를 검증하여 가짜 서버와의 연결을 방지한다.
- 암호화 (Encryption)
2. 인증서 (SSL/TLS Certificate)
HTTPS 사이트는 반드시 인증 기관(CA, Certificate Authority)이 발급한 디지털 인증서를 사용해야 한다. 인증서에는 사이트의 소유자, 공개 키, 발급 기관 등의 정보가 포함되어 있다.
- 인증서의 역할
- 서버 인증 : 사용자가 방문한 사이트가 신뢰할 수 있는 서버임을 보증한다.
- 공개 키 제공 : 클라이언트가 서버와 안전하게 통신하기 위해 공개 키를 전달한다.
- 인증서 종류
- DV (Domain Validation) : 도메인 소유권만 인증. 발급이 빠르고 간단함.
- OV (Organization Validation) : 조직 정보까지 인증. 중간 수준의 보안.
- EV (Extended Validation) : 가장 엄격한 인증. 브라우저 주소창에 회사명 표시.
3. 암호화 방식
- 비대칭 암호화 (Asymmetric Encryption) : 공개 키(서버가 제공)와 비공개 키(서버만 보유)를 사용하여 데이터를 암호화하고 복호화. 초기 연결 설정(핸드셰이크)에서 사용된다.
- 대칭 암호화 (Symmetric Encryption) : 세션 키를 공유해 데이터를 암호화/복호화. 빠른 통신을 위해 실제 데이터 전송 시 사용된다.
동작 과정
1. 클라이언트 요청 : 클라이언트(예: 브라우저)가 HTTPS URL에 접속을 시도한다.
2. TLS 핸드셰이크 : 클라이언트와 서버가 보안 연결을 설정한다. 클라이언트가 서버의 인증서를 요청하고, 서버는 자신의 인증서를 보낸다. 클라이언트는 인증서를 검증한 후, 대칭 암호화를 위한 세션 키를 서버와 공유한다. 모든 데이터는 이 세션 키로 암호화된다.
3. HTTP 요청/응답 : HTTPS로 안전한 연결이 설정되면, 일반 HTTP 요청과 응답이 암호화된 상태로 전달된다.
4. 연결 종료 : 데이터 전송이 끝나면 보안 세션이 종료된다.
장점
1.보안 강화 : 민감한 정보를 안전하게 보호한다. 사용자와 서버 간 통신 내용을 도청, 위조, 변조할 수 없다.
2. SEO 개선 : HTTPS는 검색 엔진에서 더 높은 순위를 받는 데 유리하다. 구글은 HTTPS를 기본 기준으로 평가한다.
3. 브라우저 호환성 : 현대 브라우저는 HTTPS를 권장하며, HTTP 사이트는 경고가 표시된다.
4. 사용자 신뢰 : HTTPS 사이트는 신뢰성을 나타낸다. 주소창에 자물쇠 아이콘(🔒)이 표시되며, 일부 EV 인증서는 회사명도 표시한다.
구현 방법
- SSL/TLS 인증서 구매 또는 무료 사용
- 무료 옵션: Let's Encrypt
- 유료 옵션: Comodo, Symantec 등 다양한 인증서 제공 업체 이용.
- 서버에 인증서 설치 : Nginx, Apache, IIS 등의 웹 서버 설정을 통해 SSL/TLS를 활성화한다.
- HTTP → HTTPS 리다이렉트 설정 : 기존 HTTP 트래픽을 HTTPS로 리다이렉트하여 안전한 통신을 강제한다.
- 혼합 콘텐츠 해결 : HTTPS 페이지에 HTTP 리소스(이미지, 스크립트 등)가 포함되지 않도록 수정한다.
HTTPS 관련 주의사항
- 속도 최적화 : HTTPS로 인한 속도 저하를 최소화하려면 HTTP/2, CDN(Content Delivery Network)을 활용한다.
- 유효기간 관리 : 인증서는 만료일 전에 갱신해야 한다.
- 혼합 콘텐츠(Mixed Content) 문제 : HTTPS 페이지에 HTTP 리소스가 포함되면 보안 경고가 발생하므로 모든 리소스를 HTTPS로 제공해야 한다.
'인터넷' 카테고리의 다른 글
브라우저와 브라우저의 작동 방식 (0) | 2024.12.25 |
---|---|
호스팅 (Hosting) (0) | 2024.12.24 |
도메인 이름 (Domain Name) (0) | 2024.12.24 |
인터넷의 동작 방식 (2) | 2024.12.23 |