본문 바로가기
HTTP & 네트워크 기초

HTTP 프로토콜

by TechExplorer 2023. 3. 4.

HTTP 프로토콜

HTTP 프로토콜은 인터넷 상에서 데이터를 주고받을 때 가장 널리 쓰이는 프로토콜 중 하나입니다. 이번 글에서는 HTTP 프로토콜의 개념과 특징부터, 헤더와 바디의 구조, 요청과 응답의 구조, 상태 코드, HTTPS의 개념과 동작 방식까지 자세히 살펴보겠습니다.

 


HTTP의 개념과 특징

HTTP(Hyper Text Transfer Protocol)는 인터넷 상에서 데이터를 주고받을 때 가장 많이 사용되는 프로토콜 중 하나입니다. HTTP는 클라이언트-서버 모델을 기반으로 하며, 클라이언트는 서버에 요청을 보내고, 서버는 클라이언트의 요청에 대한 응답을 보냅니다.

 

HTTP의 주요 특징은 다음과 같습니다.

 

  • 무상태(Stateless) 프로토콜: HTTP는 요청과 응답이 독립적으로 처리되며, 클라이언트와 서버 간의 연결이 지속되지 않습니다. 이는 서버가 클라이언트의 상태를 유지하지 않는다는 것을 의미합니다. 무상태 프로토콜을 사용하면 서버에 부하가 분산되며, 클라이언트와 서버 간의 연결이 끊어진 경우에도 문제가 발생하지 않습니다.
  • 단순하고 확장 가능한 구조: HTTP는 단순한 구조를 가지고 있어, 다양한 환경에서 쉽게 사용될 수 있습니다. 또한 HTTP의 헤더에는 확장 가능한 필드가 포함되어 있으므로, 새로운 기능이나 정보를 추가하기 용이합니다.
  • 요청-응답 모델: HTTP는 요청-응답 모델을 따르므로, 클라이언트는 서버에 요청을 보내고, 서버는 요청에 대한 응답을 보냅니다. 이러한 요청-응답 모델은 웹 페이지를 불러오거나, 데이터를 전송하는 데 매우 유용합니다.
  • 미디어 독립적: HTTP는 미디어에 독립적입니다. 따라서 HTTP를 사용하여 HTML, 이미지, 오디오, 비디오 등 다양한 형식의 데이터를 전송할 수 있습니다.
  • 브라우저와 서버 간의 상호작용: HTTP는 브라우저와 서버 간의 상호작용을 가능하게 합니다. 브라우저는 HTTP를 통해 서버에 요청을 보내고, 서버는 요청에 대한 응답을 보내는 동시에, 브라우저에 HTML, CSS, JavaScript 등의 리소스를 전송합니다. 이러한 상호작용은 인터넷의 핵심 기술로 자리 잡게 되었습니다.

HTTP 헤더와 바디 구조

HTTP 헤더와 바디는 HTTP 요청과 응답에서 중요한 역할을 합니다.

 

HTTP 요청과 응답 메시지는 다음과 같이 구성되어 있습니다.

 

<start-line>
<headers>

<entity-body>

 

예를 들어, 다음과 같은 HTTP 요청 메시지를 생각해보겠습니다.

 

POST /login HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:87.0) Gecko/20100101 Firefox/87.0
Accept: */*
Content-Type: application/x-www-form-urlencoded
Content-Length: 25

username=john&password=doe

 

위의 요청 메시지에서 첫 번째 줄인 start-linePOST /login HTTP/1.1으로, 이는 POST 메소드를 사용하여 /login 경로로 요청을 보내겠다는 것을 나타냅니다. 그리고 HTTP 버전은 1.1을 사용합니다.

 

headersHost, User-Agent, Accept, Content-Type, Content-Length 등 다양한 헤더 필드로 구성됩니다. Host 헤더는 요청한 호스트 이름과 포트 번호를, User-Agent 헤더는 클라이언트 소프트웨어 정보를, Accept 헤더는 클라이언트가 받아들일 수 있는 미디어 타입을, Content-Type 헤더는 요청 본문의 미디어 타입을, Content-Length 헤더는 요청 본문의 길이를 나타냅니다.

 

마지막으로 entity-body요청 본문을 포함합니다. 위의 요청 메시지에서는 username=john&password=doe라는 데이터를 전송하고 있습니다. 이 데이터는 application/x-www-form-urlencoded 형식으로 전송됩니다.

 

이와 마찬가지로 HTTP 응답 메시지도 start-line, headers, entity-body로 구성됩니다. 예를 들어, 다음과 같은 HTTP 응답 메시지를 생각해보겠습니다.

 

HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 125

<!DOCTYPE html>
<html>
<head>
	<title>Example Page</title>
</head>
<body>
	<h1>Welcome to the Example Page</h1>
	<p>This is an example page.</p>
</body>
</html>

 

위의 응답 메시지에서 첫 번째 줄인 start-lineHTTP/1.1 200 OK으로, 이는 HTTP 버전이 1.1이고, 상태 코드가 200 OK라는 것을 나타냅니다.

 

headersContent-Type, Content-Length 등 다양한 헤더 필드로 구성됩니다. Content-Type 헤더는 응답 본문의 미디어 타입을, Content-Length 헤더는 응답 본문의 길이를 나타냅니다.

 

마지막으로 entity-body응답 본문을 포함합니다. 위의 응답 메시지에서는 HTML 코드가 포함되어 있으며, 이는 text/html 형식으로 전송되었습니다.

 

HTTP 헤더와 바디는 HTTP 요청과 응답에서 각각 중요한 역할을 합니다. HTTP 헤더는 요청 또는 응답에 대한 부가적인 정보를 담고 있으며, HTTP 바디는 요청과 응답의 본문을 포함합니다. HTTP 프로토콜은 이러한 헤더와 바디를 조합하여 클라이언트와 서버 간에 데이터를 교환할 수 있게 해줍니다.


HTTP 상태 코드

HTTP 상태 코드는 서버가 클라이언트에게 보내는 HTTP 응답 메시지에서 사용되는 3자리 숫자입니다. 이 숫자는 클라이언트에게 현재 요청에 대한 처리 상태를 전달하며, 요청이 성공적으로 완료되었는지, 오류가 발생했는지, 리다이렉션을 수행했는지 등을 나타냅니다. 이번에는 HTTP 상태 코드에 대해 상세하게 살펴보겠습니다.

 

  • 1xx (Informational) : 정보성 응답
    1xx 응답 코드는 클라이언트의 요청이 받아들여졌음을 나타내며, 추가 작업이 필요한 경우 사용됩니다. 일반적으로 클라이언트는 이러한 응답을 무시하고 다음 응답을 기다립니다.
  • 2xx (Successful) : 성공적인 응답
    2xx 응답 코드는 클라이언트의 요청이 성공적으로 처리되었음을 나타냅니다. 가장 일반적으로 사용되는 응답 코드는 200 OK입니다. 이외에도 201 Created, 204 No Content 등 다양한 응답 코드가 있습니다.
  • 3xx (Redirection) : 리다이렉션
    3xx 응답 코드는 클라이언트의 요청이 완료되지 않았거나 추가 조치가 필요함을 나타내며, 클라이언트는 추가 조치를 취한 후 요청을 다시 시도해야 합니다. 대표적인 응답 코드로는 301 Moved Permanently, 302 Found, 307 Temporary Redirect 등이 있습니다.
  • 4xx (Client Error) : 클라이언트 오류
    4xx 응답 코드는 클라이언트의 요청이 잘못되었거나 요청을 처리할 수 없음을 나타냅니다. 대표적인 응답 코드로는 400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found 등이 있습니다.
  • 5xx (Server Error) : 서버 오류
    5xx 응답 코드는 서버에서 오류가 발생했음을 나타내며, 클라이언트는 요청을 재시도하거나 다른 서버를 찾아야 합니다. 대표적인 응답 코드로는 500 Internal Server Error, 503 Service Unavailable 등이 있습니다.

 

HTTP 상태 코드를 제대로 처리하는 것은 웹 애플리케이션의 안정성과 사용자 경험에 큰 영향을 미칩니다. 클라이언트가 받은 응답 코드를 적절하게 처리하지 않으면, 예를 들어 4xx 오류가 발생했을 때 사용자에게 적절한 안내 메시지를 제공하지 않거나, 5xx 오류가 발생했을 때 사용자에게 너무 오랜 시간동안 기다리게 하거나, 잘못된 페이지로 리다이렉트되는 등의 문제가 발생할 수 있습니다.

 

따라서 HTTP 상태 코드는 개발자들이 반드시 이해하고 적절하게 처리해야 하는 중요한 개념 중 하나입니다. 웹 애플리케이션을 개발하거나 디버깅할 때 상태 코드를 살펴보면 원인을 파악할 수 있는 경우가 많으므로, 상태 코드를 적극 활용하는 것이 좋습니다.


HTTPS의 개념과 동작 방식

HTTPS(Hyper Text Transfer Protocol Secure)는 HTTP의 보안 버전으로, 클라이언트와 서버 간의 통신을 암호화하여 보안성을 강화한 프로토콜입니다. 이번에는 HTTPS의 개념과 동작 방식에 대해 상세하게 살펴보겠습니다.

 

HTTPS의 개념

HTTP는 평문 통신이므로, 클라이언트와 서버 간의 통신 내용은 제3자에게 노출될 수 있습니다. 따라서 중요한 정보를 전송하는 웹 사이트의 경우 보안이 필요합니다. 이를 위해 HTTPS는 SSL(Secure Sockets Layer) 또는 TLS(Transport Layer Security) 프로토콜을 사용하여 통신 내용을 암호화하고, 클라이언트와 서버 간의 안전한 통신을 보장합니다.

 

HTTPS의 동작 방식

HTTPS의 동작 방식은 다음과 같습니다.

 

  1. 클라이언트가 HTTPS로 액세스하려는 웹 사이트에 접속합니다.
  2. 서버는 클라이언트에게 공개키를 제공합니다.
  3. 클라이언트는 서버의 공개키를 이용하여 세션 키를 암호화합니다.
  4. 클라이언트는 서버에게 암호화된 세션 키를 보냅니다.
  5. 서버는 자신의 개인키를 사용하여 세션 키를 해독합니다.
  6. 서버와 클라이언트는 이제 암호화된 세션 키를 사용하여 암호화된 통신을 수행합니다.

 

이러한 동작 방식으로 HTTPS는 데이터의 암호화 및 인증을 제공하여 중요한 정보의 노출을 방지하고, 더욱 안전한 통신을 가능하게 합니다.

 

아래는 HTTP와 HTTPS의 차이점을 나타낸 표입니다.

 

  HTTP HTTPS
통신 내용 평문 암호화
포트 번호 80 443
SSL/TLS X O


따라서 HTTPS를 사용하면 HTTP보다 더욱 안전한 통신이 가능하며, 중요한 정보를 다루는 웹 사이트에서는 HTTPS를 사용하는 것이 좋습니다.

'HTTP & 네트워크 기초' 카테고리의 다른 글

라우팅과 스위칭  (0) 2023.03.05
IP 주소와 서브넷 마스크  (0) 2023.03.04
URI와 URL  (0) 2023.02.26
HTTP와 관계가 깊은 프로토콜 - IP / TCP / DNS  (0) 2023.02.26
네트워크의 기본은 TCP/IP  (0) 2023.02.26

댓글