1. 기본 개념
HTTP(HyperText Transfer Protocol) 는 웹 상에서 클라이언트와 서버 간의 데이터를 주고받기 위한 프로토콜이다. 주로 웹 브라우저와 웹 서버 간의 통신에 사용된다. HTTP 는 요청(request) 과 응답(response) 이라는 두 가지 메시지 유형을 사용하여 작동한다. 클라이언트가 요청을 보내면 서버가 응답을 반환하는 구조이다.
2. 구성 요소
2.1. 요청과 응답
- 요청(Request)
- 요청 라인(Request Line): HTTP 메서드(GET, POST 등), 요청 URI, HTTP 버전으로 구성된다.
예: GET /index.html HTTP/1.1
- 헤더(Header): 요청의 메타데이터를 포함한다.
예: Host: www.google.com, User-Agent: Mozilla/5.0
- 본문(Body): 주로 POST 요청에서 사용되며, 클라이언트가 서버로 전송하는 데이터를 포함한다.
- 응답(Response)
- 상태 라인(Status Line): HTTP 버전, 상태 코드, 상태 메시지로 구성된다.
예: HTTP/1.1 200 OK
- 헤더(Header): 응답의 메타데이터를 포함한다.
예: Content-Type: text/html, Content-Length: 1000
- 본문(Body): 서버가 클라이언트에 보내는 실제 데이터를 포함한다.
2.2. 상태코드
상태 코드는 클라이언트에게 요청의 처리 결과를 알려준다.
- 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: 서버가 일시적으로 요청을 처리할 수 없음을 나타낸다.
2.3. HTTP 메서드
- GET: 서버로부터 자원을 조회한다. 요청의 본문이 없으며, URL에 데이터를 포함할 수 있다.
예: GET /index.html HTTP/1.1
- POST: 서버에 데이터를 전송하여 자원을 생성하거나 처리한다. 요청 본문에 데이터를 포함한다.
예: POST /form HTTP/1.1
- PUT: 서버의 자원을 업데이트한다. 요청 본문에 데이터를 포함하며, 대상 자원이 존재하지 않으면 생성할 수도 있다.
예: PUT /resource/1 HTTP/1.1
- DELETE: 서버의 자원을 삭제한다.
예: DELETE /resource/1 HTTP/1.1
3. HTTP와 HTTPS의 차이
3.1. HTTPS의 필요성
HTTP 는 암호화되지 않은 프로토콜로, 데이터를 평문으로 전송한다. 이로 인해 데이터가 전송 중에 도청되거나 조작될 위험이 있다. HTTPS(HyperText Transfer Protocol Secure) 는 HTTP 에 SSL/TLS 암호화를 추가하여 보안을 강화한 프로토콜이다. 이를 통해 데이터의 기밀성과 무결성을 보장한다.
3.2. SSL/TLS 암호화 개념
SSL(Secure Sockets Layer) 과 TLS(Transport Layer Security) 는 네트워크 통신을 암호화하는 기술이다. SSL은 초기 버전이며, TLS는 SSL의 개선된 버전이다. HTTPS 는 이 암호화를 사용하여 데이터 전송 시 기밀성과 무결성을 보장한다.
SSL/TLS 는 대칭키 암호화와 공개키 암호화를 결합하여 안전한 통신을 제공한다. 대칭키는 빠르고 효율적이지만 키 교환이 안전하지 않은 반면, 공개키는 안전한 키 교환을 가능하게 한다.
4. 회고
HTTP는 웹의 근본이 되는 프로토콜이기 때문에 매우 중요한 개념이라고 생각한다.
이를 통해 웹 통신의 기본 원리와 HTTPS와의 차이를 통해 보안의 중요성까지 알게 되었다.