HTTP란?
HTTP(HyperText Transfer Protocol)는 월드 와이드 웹(WWW)*에서 서버와 클라이언트 간에 정보를 주고 받을 때 사용되는 하이퍼텍스트를 교환하기 위한 통신 규약 프로토콜이다.
즉 HTTP는 웹 브라우저가 웹 서버에서 데이터를 가져오고, 이를 사용자에게 표시하는 역할을 수행하며 주로 80번 포트 번호를 사용하여 해당 요청들을 수행한다.
WWW는 웹 페이지, 웹 브라우저, 웹 서버, URL 등으로 이루어진 웹 브라우저를 통해 접근하는 하이퍼 텍스트 문서의 집합이다.
HTTP의 통신 방식
- 클라이언트(Client):
- 역할 :
1. 클라이언트는 서버에 요청(Request)을 보낸다.
2. 웹 브라우저가 대표적인 클라이언트의 하나이다.
3. 사용자가 웹 브라우저에 URL을 입력하거나 하이퍼링크를 클릭하면, 웹 브라우저는 HTTP 요청을 생성하여 해당 웹 서버로 보낸다. - 기능:
- 요청(Request) 생성: 사용자 입력이나 내부 로직에 따라 필요한 HTTP 요청을 생성한다.
- 서버와의 통신: 생성된 요청을 네트워크를 통해 서버에 전송한다.
- 응답(Response) 처리: 서버로부터 받은 응답을 처리하여 사용자에게 필요한 기능을 제공한다.
- 역할 :
- 서버(Server):
- 역할 :
1. 서버는 클라이언트로부터 요청을 받아들이고 이를 처리한 후, 적절한 응답을 반환(Response)한다.
2. 웹 서버 소프트웨어로는 "Apache", "Nginx"가 이러한 역할을 수행한다. - 기능:
- 요청(Request) 수신: 클라이언트로부터 도착한 HTTP 요청을 수신한다.
- 요청 처리: 요청된 리소스를 찾거나, 필요한 데이터를 처리하여 응답을 준비한다.
- 응답(Response) 생성: 요청에 대한 결과를 HTTP 응답 형태로 생성한다.
- 응답 전송: 생성된 응답을 클라이언트에게 전송한다.
- 역할 :
요청과 응답(Request and Response)
- 요청(Request):
- 클라이언트(웹 브라우저)가 사용자 요청에 따라 HTTP 요청 메시지를 생성한다.
- 요청 메시지는 메소드(GET, POST 등)*, URL, HTTP 버전, 헤더, 본문 등을 포함시킨다.
- 생성된 요청 메시지는 80번 포트(HTTP의 기본 포트)를 통해 서버에 전송된다.
- 응답(Response):
- 서버는 80번 포트에서 대기 중인 요청을 수신한다.
- 요청 메시지를 해석하여 클라이언트가 요청한 리소스나 작업을 처리한다.
- 처리 결과를 HTTP 응답 메시지로 생성하며 해당 결과는 상태 코드(200 OK, 404 Not Found 등)*와 헤더, 본문 등을 포함한다.
- 생성된 응답 메시지를 클라이언트로 전송한다.
클라이언트에서 Response 중 사용하는 "상태코드"의 종류
HTTP 응답에는 클라이언트가 요청의 결과의 성공 여부를 알기위해 상태코드가 포함된다. 상태 코드는 3자리 숫자로 표현되며, 주요 상태 코드는 다음과 같다.
- 1xx (정보): 요청이 수신되어 처리 중인 상태.
- 2xx (성공): 요청이 성공적으로 수신되고 처리된 상태. (예: 200 OK)
- 3xx (리다이렉션): 요청 완료를 위해 추가 작업이 필요한 상태. (예: 301 Moved Permanently)
- 4xx (클라이언트 오류): 요청에 오류가 있는 상태. (예: 404 Not Found)
- 5xx (서버 오류): 서버가 요청을 처리하는 데 오류가 발생한 상태. (예: 500 Internal Server Error)
HTTP의 구성 요소
1. 메소드
메소드는 통신에서 특정 작업을 지정하기 위해 사용되며 메소드는 각각 고유한 목적과 기능을 가지고 있다.
- GET: 서버로부터 리소스를 요청하여 받는다. 주로 데이터를 가져오기 위해 사용된다.
- POST: 서버에 데이터를 보내어 리소스를 생성하기 위해 사용한다.
- PUT: 서버에 데이터를 보내어 지정된 리소스를 업데이트 하기 위해 사용한다.
- DELETE: 서버에서 지정된 리소스를 삭제한다.
- HEAD: GET과 유사하지만, 응답 본문을 제외하고 헤더만 받아온다.
- OPTIONS: 서버가 지원하는 메소드 옵션을 요청한다.
2. Path
- 뜻: 클라이언트가 요청하는 리소스의 경로를 의미한다.
- 예시: /index.html, /users/123, /api/data
- 사용 예: URL에서 도메인 이름 다음에 오는 부분, 예를 들어, "http://example123.com/index.html"에서 Path는 /index.html입니다.
3. Version
- 뜻: 사용되는 HTTP 프로토콜의 버전을 의미한다.
- 예시: HTTP/1.0, HTTP/1.1, HTTP/2
- 사용 예: GET /index.html HTTP/1.1 - HTTP/1.1
4. Headers
- 뜻: 요청이나 응답에 대한 추가 정보를 포함하는 키-값 의 집합이다.
- 예시: "Content-Type: application/json", "Authorization: Bearer token"
- 사용 예:
- 요청 헤더: 클라이언트가 서버에 요청을 보낼 때 추가 정보를 전달함.
- ex) Host, User-Agent, Accept, Authorization, Cookie 등
- User-Agent: Mozilla/5.0
- Accept-Language: en-US
- 응답 헤더: 서버가 클라이언트에 응답을 보낼 때 추가 정보를 전달함.
- ex) Content-Type, Content-Length, Set-Cookie, Expires, Location 등
- Content-Type: text/html
- Set-Cookie: sessionId=abc123
HTTPS란?
HTTPS(HyperText Transfer Protocol Secure)는 HTTP 프로토콜 최상위에 SSL이나 TLS를 추가하여 보안성을 강화한 프로토콜이다.
SSL 또는 TLS를 사용하여 데이터를 암호화하기 때문에 데이터가 전송 중에 누군가에 의해 중간에 가로채는걸 방지한다.
또한 HTTPS는 서버의 신원을 인증하기 위해 디지털 인증서를 사용하며 공개 Key를 사용해 데이터를 암호화한다.
HTTPS의 구성 원리
HTTPS는 SSL/TLS 프로토콜을 기반으로 동작하며 SSL/TLS는 다음과 같은 주요 구성 요소를 포함한다.
- 디지털 인증서(Digital Certificate):
- 서버의 신원을 확인하는 데 사용된다.
- 인증서는 신뢰할 수 있는 CA(Certificate Authority)에 의해 발급되며, 서버의 공개 키(public key)와 서버 정보가 포함된다.
- 공개 키 암호화(Public Key Cryptography):
- 데이터 암호화를 위해 공개 키와 개인 키(private key) 쌍을 사용한다. 공개 키는 누구나 접근할 수 있지만, 개인 키는 오직 서버만이 소유해 보안성을 강화한다.
- 세션 키(Session Key):
- 대칭 키 암호화를 위해 사용하는 일회용 Key이다. 세션 키는 SSL/TLS 핸드셰이크 과정에서 생성되어 클라이언트와 서버 간에 공유된다.
HTTPS의 작동 순서
- 클라이언트-서버 핸드셰이크(Client-Server Handshake):
- 클라이언트가 HTTPS 연결을 시작할 때, 서버에 접속하여 SSL/TLS 핸드셰이크 과정을 시작한다.
- 핸드셰이크란 컴퓨터 네트워크에서 두 시스템이 서로를 인식하고 안전하고 효율적인 통신을 시작하기 위해 초기 설정을 교환하는 과정을 의미한다.
- 서버 인증서 제공(Server Certificate Provision):
- 서버는 클라이언트에게 자신의 디지털 인증서를 제공하며 인증서에는 서버의 공개 키와 서버 정보가 포함된다.
- 인증서 검증(Certificate Verification):
- 클라이언트는 서버의 인증서를 검증한다.
- 클라이언트는 인증서가 신뢰할 수 있는 CA에 의해 발급되었는지 확인하고, 인증서가 유효한지 검사한다
- 세션 키 생성(Session Key Generation):
- 클라이언트와 서버는 SSL/TLS 핸드셰이크 과정에서 세션 키를 생성한다.
- 해당 과정은 비대칭 암호화*를 사용하여 세션 키를 안전하게 교환한다.
- 데이터 암호화 및 전송(Encrypted Data Transmission):
- 세션 키가 생성되고 공유되면, 클라이언트와 서버는 대칭 암호화*를 사용하여 데이터를 암호화해 전송한다.
- 데이터 무결성 검증(Data Integrity Verification):
- 클라이언트와 서버는 전송된 데이터의 무결성을 확인하기 위해 메시지 인증 코드를 사용한다.
SSL/TLS에서의 대칭 및 비대칭 암호화
- 비대칭 암호화(Asymmetric Encryption)
- 클라이언트와 서버는 공개 키와 개인 키를 사용하여 세션 키를 안전하게 교환한다.
- 클라이언트는 서버의 공개 키로 암호화하여 서버로 전송하고, 서버는 자신의 개인 키로 이를 복호화*한다.
- 초기 핸드셰이크 과정에서 사용한다.
- 대칭 암호화(Symmetric Encryption)
- 핸드셰이크가 완료된 후, 실제 데이터 전송에는 대칭 암호화가 사용된다.
- 세션 키를 사용하여 데이터 암호화와 복호화*를 모두 담당한다.
- 빠른 속도로 대량의 데이터를 안전하게 전송할 수 있는것이 대칭 암호화의 장점이다.
복호화란? : 암호화된 데이터를 다시 본래의 데이터, 즉 읽을 수 있는 상태로 되돌리는 과정
대칭 암호화 | 비대칭 암호화 | |
키 | 동일한 키로 암호화 및 복호화 | 각각 다른 키를 사용 공개 키로 암호화하고 개인 키로 복호화함 |
데이터 전송 속도 | 빠름 | 느림 |
보안 | 동일한 키를 사용하기에 상대적으로 위험함 | 키 교환과 관리가 상대적으로 안전함 여러 사용자에게 사용하기 좋 |
사용하는 알고리즘 예시 | AES, DES, 3DES,SNOW | RSA, ECC, DSA |
사용 예시 | 데이터 전송, 데이터 저장 | 키 교환, 디지털 서명 |
사진 출처 :
'통신' 카테고리의 다른 글
통신 - REST, REST API (0) | 2024.09.10 |
---|---|
통신 - DNS (1) | 2024.08.13 |
통신 - TCP/IP와 UDP (0) | 2024.07.29 |
통신이란 ? (0) | 2024.05.01 |