CS

[CS] HTTP

CoderNo.905 2024. 10. 15. 23:02

W3에서 데이터를 주고받기 위한 프로토콜로 주로 HTML 문서를 주고받는데 사용됩니다.

애플리케이션 레벨의 프로토콜로 주로 TCP/IP를 사용하며 HTTP3부터는 UDP를 사용합니다.

HTTP 프로토콜은 어떤 종류의 데이터든 전송할 수 있도록 설계되어있습니다.

 

특징

HTTP 메시지는 서버와 클라이언트에 의해 해석됩니다.

HTTP는 연결 상태를 유지하지 않는 비연결성 프로토콜 입니다.

비연결성 프로토콜이기에 Request/Response방식으로 동작합니다.

 

구성

서버

  • Request를 받아 접근을 관리하고, 처리하고 Response하는 시스템
  • Request에 대한 Response를 한다.

클라이언트

  • Request를 보내는 개체(Ex. 웹 브라우저, 앱 등...)

Request(요청)

클라이언트가 서버에 요청을 하는 것으로 메시지 구조는 다음과 같습니다.

GET / HTTP/1.1                    -> start line
Host: developer.mozilla.org       -> headers
Accept-Language: fr               -> headers
                                  -> blank line
page=100&hl=fr                    -> body

 

start line

Request의 가장 첫 라인이며, 구성으로 HTTP Method, target, HTTP version이 각각 띄어쓰기로 구분됩니다.

 

headers

Request에 대한 정보를 담고 있는 부분으로 Key:Value 형식으로 되어있습니다.

 

Body

Request의 실제 내용으로, body가 없는 Request도 존재합니다.

 

Response(응답)

클라이언트가 요청한 정보를 담아 처리한 후 반환하는 메시지로 구조는 다음과 같습니다.

HTTP/1.1 200 OK                                      -> start line
Date: Sat, 09 Oct 2010 14:28:02 GMT                  -> headers
Server: Apache                                       -> headers
Last-Modified: Tue, 01 Dec 2009 20:18:22 GMT         -> headers
ETag: "51142bc1-7449-479b075b2891b"                  -> headers
Accept-Ranges: bytes                                 -> headers
Content-Length: 29769                                -> headers
Content-Type: text/html                              -> headers

<!DOCTYPE html... (here comes the 29769 bytes...)    -> body

 

start line

상태를 나타내는 부분으로 HTTP 버전, 상태 코드, 상태 값이 존재하며 띄어쓰기로 구분됩니다.

 

headers

Request의 headers와 동일하며, Response에 사용되는 값들만 추가됩니다.

 

Body

Request에 대한 반환값이 들어있습니다.