✅ HTTP 프로토콜이란?
HTTP (Hypertext Transfer Protocol)는 인터넷에서 데이터를 주고받기 위해 사용되는 프로토콜입니다. 주로 웹 브라우저와 웹 서버 간에 통신하는 데에 쓰이며, 클라이언트-서버 모델을 기반으로 동작합니다. HTTP는 요청-응답(request-response) 방식으로 작동합니다. 클라이언트(일반적으로 웹 브라우저)는 서버에게 요청을 보내고, 서버는 해당 요청에 대한 응답을 반환합니다. 이러한 요청과 응답은 특정 형식으로 구성되어 있습니다.
➡️ HTTP의 주요 특징과 구성 요소는 다음과 같습니다
- URI(Uniform Resource Identifier)
리소스를 고유하게 식별하기 위한 통합된 형식입니다. 대표적으로 URL (Uniform Resource Locator)이라고 불리는 웹 주소가 있습니다. 예를 들어, "http://www.example.com/index.html"은 웹 서버의 "index.html"이라는 파일에 대한 URL입니다.
- 요청 메서드(Request Method)
클라이언트가 서버에게 요청의 종류를 알리는 데 사용됩니다. 가장 일반적인 요청 메서드는 GET, POST, PUT, DELETE 등이 있습니다. GET은 리소스를 가져오기 위해 사용되고, POST는 서버에 데이터를 제출하기 위해 사용됩니다.
- 헤더(Headers)
요청이나 응답의 부가 정보를 포함합니다. 헤더는 키-값 쌍으로 구성되며, 클라이언트와 서버 간의 통신 설정, 캐시 관리, 인증 등 다양한 정보를 전달합니다.
- 본문(Body)
요청이나 응답에 포함되는 실제 데이터를 담고 있습니다. 본문은 선택적이며, 요청 메서드에 따라 존재하거나 존재하지 않을 수 있습니다. 일반적으로 POST 메서드를 사용할 때 데이터가 본문에 포함됩니다.
- 상태 코드(Status Code)
서버가 클라이언트에게 반환하는 세 자리 숫자입니다. 상태 코드는 요청이 성공했는지, 오류가 발생했는지, 추가 조치가 필요한지 등을 나타냅니다. 예를 들어, 200은 성공, 404는 찾을 수 없음, 500은 서버 오류를 나타냅니다.
HTTP는 무상태(Stateless) 프로토콜로 알려져 있습니다. 이는 서버가 클라이언트의 이전 상태를 기억하지 않는다는 것을 의미합니다. 따라서 각각의 요청은독립적으로 처리되며, 이전 요청과 관련된 정보는 서버에 저장되지 않습니다. 이러한 특성 때문에 클라이언트와 서버 간의 통신은 필요에 따라 세션 관리나 쿠키와 같은 메커니즘을 사용하여 상태를 유지할 수 있습니다.
HTTP는 보안을 위해 HTTPS (HTTP Secure)로 확장될 수 있습니다. HTTPS는 SSL(Secure Socket Layer) 또는 TLS(Transport Layer Security) 프로토콜을 사용하여 데이터의 암호화와 인증을 제공하여 안전한 통신을 보장합니다. HTTP는 웹 브라우저를 통한 웹 페이지 접속뿐만 아니라, API 호출, 웹 서비스 통신 등 다양한 방면에서 널리 사용되는 프로토콜입니다.
✅ HTTP 프로토콜 구조
🔹요청 프로토콜
- Request Line (요청 줄)
HTTP 요청의 첫 번째 줄로, 요청의 종류와 요청 대상을 나타냅니다. 일반적으로 다음과 같은 형식을 가지고 있습니다:
METHOD URI HTTP/버전
- METHOD: 요청의 종류를 나타내는 메서드입니다. 예를 들어, GET, POST, PUT, DELETE 등이 있습니다.
- URI: 요청 대상의 리소스를 나타내는 Uniform Resource Identifier입니다.
- HTTP/버전: 사용하는 HTTP 프로토콜의 버전을 나타냅니다. 예를 들어, HTTP/1.1과 같은 형식입니다.
- Headers (헤더)
요청의 부가적인 정보를 포함하는 헤더들이 위치합니다. 각 헤더는 키-값 쌍으로 구성되며, 헤더들은 한 줄에 하나씩 나열됩니다. 헤더의 구조는 다음과 같은 형식을 가지고 있습니다.
헤더이름: 헤더값
- Host: 요청을 받을 호스트의 도메인 이름 또는 IP 주소를 나타냅니다.
- Content-Type: 요청 본문의 데이터 타입을 나타냅니다. 예를 들어, application/json, application/x-www-form-urlencoded 등이 있습니다.
- User-Agent: 클라이언트의 정보를 나타내며, 일반적으로 클라이언트 소프트웨어의 이름과 버전을 포함합니다.
- A Blank Line (빈 줄)
헤더와 요청 본문을 구분하는 빈 줄입니다. 헤더들이 끝나고 본문이 시작되는 위치를 나타냅니다.
- Body (본문)
요청의 본문에는 클라이언트가 서버로 전송하는 데이터가 위치합니다. 본문은 필수적이지 않으며, 요청 메서드에 따라 존재하거나 존재하지 않을 수 있습니다. POST 요청과 함께 데이터를 제출할 때 주로 사용됩니다.
이제 일반적인 HTTP 요청 예시를 살펴보겠습니다. 다음은 GET 메서드를 사용하여 "http://www.example.com/index.html" 주소로 요청을 보내는 예시입니다.
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36
이 예시에서 요청 줄은 "GET /index.html HTTP/1.1"입니다. 요청 대상은"/index.html"이며, HTTP/1.1 버전을 사용합니다. 그 다음에는 Host와 User-Agent와 같은 헤더들이 나열되어 있습니다. 이 요청은 본문이 없는 GET 요청이므로 빈 줄로 구분된 후 본문은 없습니다. 이 요청은 "www.example.com" 호스트의 "/index.html" 리소스를 요청하는 것을 나타냅니다.
🔹응답 프로토콜
- Status Line(상태 라인)
상태 라인은 HTTP 응답의 상태 코드와 설명을 포함합니다. 일반적으로 "HTTP/1.1"과 함께 상태 코드와 상태 메시지가 포함되어 있습니다. 예를 들어, "HTTP/1.1 200 OK"는 성공적인 응답을 나타내는 상태 코드 200과 그에 대한 설명 "OK"를 포함합니다. 다른 예로는 "HTTP/1.1 404 Not Found"와 같이 리소스를 찾을 수 없는 상태를 나타내는 상태 코드 404가 있습니다.
HTTP/버전 상태코드 상태문구
- 상태 코드 종류
Informational -정보성 100 ~ 199 100: Continue (계속) 101: Switching Protocols (프로토콜 전환) Success -성공 200 ~ 299 200: OK (성공) 201: Created (작성됨) 204: No Content (콘텐츠 없음) Redirection -리디렉션 300 ~ 399 301: Moved Permanently (영구적으로 이동) 302: Found (찾음, 임시 이동) 304: Not Modified (수정되지 않음) Client Error -클라이언트 오류 400 ~ 499 400: Bad Request (잘못된 요청) 401: Unauthorized (인증되지 않음) 403: Forbidden(권한 없음) 404: Not Found (찾을 수 없음) Server Error -서버 오류 500 ~ 599 500: Internal Server Error (내부 서버 오류) 503: Service Unavailable (서비스 이용 불가능)
- 상태 코드 종류
- Headers (헤더)
응답 헤더는 서버가 클라이언트에게 전송하는 추가 정보를 포함합니다. 각 헤더는 이름과 값으로 구성되며, 콜론(:)으로 구분됩니다. 헤더는 서버의 속성, 캐시 제어, 인증 등 다양한 정보를 전달할 수 있습니다. 예를 들어, "Content-Type" 헤더는 응답 본문의 데이터 유형을 지정하고, "Content-Length" 헤더는 응답 본문의 크기를 나타냅니다.
- 헤더의 종류
Content-Type 헤더는 응답 본문의 미디어 유형을 나타냅니다. 예를 들어, Content-Type: text/html는 응답 본문이 HTML 형식임을 나타냅니다. 다른 일반적인 값으로는 application/json, image/jpeg, text/plain 등이 있습니다. Content-Length 헤더는 응답 본문의 크기를 바이트 단위로 나타냅니다. 이를 통해 클라이언트는 응답 데이터의 크기를 미리 알 수 있습니다. Cookie 쿠키는 웹 서버가 클라이언트에게 보내는 작은 데이터 조각으로, 클라이언트와 서버 간의 상태를 유지하고 사용자 정보를 저장하는 역할을 합니다. Host 호스트는 HTTP 요청에서 목표로 하는 서버를 지정하는 역할을 합니다. 웹 서버가 여러 도메인 또는 서비스를 호스팅하는 경우, 호스트 헤더는 클라이언트가 어떤 도메인 또는 호스트에 접근하려는지를 서버에 알려줍니다 User-Agent 사용자 에이전트는 웹 브라우저나 클라이언트 애플리케이션의 식별자로, 서버에게 클라이언트의 유형과 기능을 알려줍니다 Server HTTP 응답에서 서버의 소프트웨어 또는 식별자를 포함합니다. 이 헤더는 클라이언트에게 서버가 무슨 소프트웨어를 실행하고 있는지를 알려줍니다. 예를 들어, Server: Apache/2.4.29 (Ubuntu)
와 같이 서버 소프트웨어와 버전 정보를 포함할 수 있습니다.Set-Cookie 헤더는 서버가 클라이언트에게 쿠키를 설정하거나 업데이트할 때 사용됩니다. 이 헤더는 클라이언트에게 서버에서 생성된 쿠키 값을 전달하고, 클라이언트의 웹 브라우저가 해당 쿠키를 저장하도록 지시합니다. 서버는 Set-Cookie 헤더를 사용하여 쿠키의 이름, 값, 만료일, 도메인, 경로 등을 설정할 수 있습니다. 예를 들어, Set-Cookie: username=johndoe; Expires=Sat, 09 Jul 2023 12:00:00 GMT; Path=/와 같이 설정된 Set-Cookie 헤더는 클라이언트에게 username이라는 쿠키를 설정하고 해당 쿠키의 만료일과 경로를 지정합니다.
- 헤더의 종류
🏷️이미지 출처 및 참고한 사이트
Uploaded by N2T