HTTP 메시지구조
HTTP 요청 메시지
start-line(시작 라인): 요청 메서드(GET)와 요청 대상(/search?q=hello&hl=ko)
header(헤더): 요청에 대한 추가 정보를 제공한다.
HTTP 응답메시지
start-line(시작 라인): HTTP 버전(HTTP/1.1), 상태 코드(200)와 상태 코드 설명(OK)으로 구성된다
header(헤더): 응답에 대한 추가 정보를 제공하고. Content-Type 헤더는 응답 본문의 데이터 형식과 Content-Length 헤더의 응답 본문의 크기를 바이트 단위로 나타낸다.
empty line(공백 라인): 헤더와 본문을 구분하기 위해 빈 줄(CRLF)이 삽입된다.
message body(메시지 바디): 서버에서 클라이언트로 반환된 데이터를 포함하며, HTML 페이지를 반환하는 경우, HTML 코드가 여기에 포함된다.
요청 메시지 시작라인 (request-line)
요청 메시지 시작 라인(request-line)
클라이언트에서 서버로 보내는 요청 메시지의 첫 줄로, HTTP 메서드, 요청 대상, HTTP 프로토콜 버전으로 구성되어있다.
GET /search?q=hello&hl=ko HTTP/1.1
Host: www.google.com
시작라인 요청메시지 (request-line) - HTTP 메서드
HTTP 메서드는 클라이언트가 서버에게 수행해야 할 동작을 지정합니다. 일반적으로 사용되는 HTTP 메서드는 다음과 같다.
GET : 서버로부터 리소스를 조회
POST : 클라이언트에서 서버로 요청 내용을 보냅니다. 서버는 이를 처리하고 응답
PUT : 클라이언트에서 서버로 리소스를 업로드
DELETE : 서버에서 리소스를 삭제
HEAD : GET 메서드와 유사, 서버는 응답 본문을 제외한 응답 헤더만 반환
OPTIONS : 서버가 제공하는 리소스에 대한 옵션을 요청합
시작라인 요청메시지 (request-line) - 요청 대상
요청 대상(request target)
클라이언트가 요청하는 리소스를 나타내는 부분이고, 요청 대상은 absolute-path와 query string으로 구성된다.
absolute-path는 리소스가 위치한 절대 경로를 나타내며, 보통 " / " 로 시작하는 경로를 사용하고. query string은 요청에 대한 추가적인 정보를 전달하는 데 사용되며, ?로 시작하며 key=value 형태로 구성되어있다.
따라서, GET /search?q=hello&hl=ko HTTP/1.1 요청 메시지에서 요청 대상은 /search이며, query string으로 q=hello&hl=ko가 포함되어 있다. 이를 절대 경로와 쿼리 스트링을 분리하여 나타내면 다음과 같다.
절대 경로: /search
쿼리 스트링: q=hello&hl=ko
💡 이와 같은 요청 메시지는 www.google.com 서버에서 /search 경로에 대한 GET 요청을 보내고, 이를 통해 서버는 해당 경로에 대한 응답을 반환할 수 있다.
시작라인 요청 메시지 - HTTP
요청 메시지의 마지막 요소인 HTTP 버전은 클라이언트가 사용하는 HTTP 프로토콜의 버전을 나타낸다.
HTTP 버전은 요청 메시지와 응답 메시지 모두에서 사용되고. 클라이언트는 HTTP 버전을 지정하여 요청을 보내고, 서버는 해당 버전에 따른 응답을 반환하고. 이를 통해 클라이언트와 서버 간의 통신을 원활하게 할 수 있다.
따라서, GET /search?q=hello&hl=ko HTTP/1.1 요청 메시지에서는 HTTP 버전으로 1.1 버전이 사용되었다. 이를 통해 클라이언트는 HTTP/1.1 버전을 지원하는 서버와 통신할 수 있게 되며, 서버 역시 해당 버전에 따른 응답을 반환할 수 있다.
응답메시지 시작라인 (status-line)
응답 메시지(status-line)
서버가 클라이언트의 요청에 대한 응답으로 보내는 메시지이다. 응답 메시지는 시작 라인, 헤더, 본문으로 구성되어있다.
status-line은 HTTP-version, status-code, reason-phrase 세 부분으로 구성되며, HTTP-version은 요청 메시지와 마찬가지로 사용하는 HTTP 프로토콜의 버전을 나타낸다.
HTTP 상태코드는 성공 여부나 오류 종류를 나타내는 3자리 숫자로, 예를 들어 200은 성공, 400은 클라이언트 요청 오류, 500은 서버 내부 오류를 의미다. 상태코드가 있는 이유는 사람이 이해할 수 있는 짧은 상태 코드로 설명할 수있기때문이다.
HTTP 헤더
HTTP 요청과 응답에 대한 메타 정보를 전송하는 데 사용되는 부가적인 데이터이고, 이 정보는 클라이언트와 서버 간의 통신을 제어하고, 요청 및 응답 데이터의 처리를 정의하며, 세부 정보를 포함하도록 설계되어 있다.
HTTP 헤더에는 여러 가지 필드가 포함되어있다. 가장 일반적으로 사용되는 필드에는
"Content-Type"과 "Content-Length"가 이며, "Content-Type" 필드는 클라이언트 또는 서버가 전송하거나 반환하는 데이터의 유형을 식별하는 데 사용됩니다. "Content-Length" 필드는 전송되는 데이터의 크기를 나타낸다.
즉, 클라이언트와 서버 간의 통신을 제어하고, 요청 및 응답 데이터의 처리를 정의하며, 세부 정보를 포함하는 중요한 역할을 한다.
HTTP 메시지 바디
HTTP바디는
HTTP 요청과 응답에서 전송되는 실제 데이터를 포함하는 부분이다. 이 데이터는 HTML 문서, 이미지, 영상, JSON 등과 같은 다양한 형식의 데이터를 포함할 수 있으며, byte로 표현할 수 있는 모든 데이터를 전송할 수 있다.
HTTP 메시지 바디는 HTTP 요청과 응답 메시지의 끝에 위치하며, HTTP 헤더와 구분하기 위해 빈 줄로 구분된다.
HTTP 요청 메시지의 경우, 메시지 바디에는 클라이언트가 서버로 보내는 데이터가 포함되며,
HTTP 응답 메시지의 경우, 메시지 바디에는 서버가 클라이언트로 반환하는 데이터가 포함되어있다.
HTTP 메시지 바디의 데이터 형식은 Content-Type 헤더 필드에 의해 지정되고, 이 헤더 필드는 데이터의 유형, 즉 텍스트, 이미지, JSON 등을 명시합니다. 예를 들어, Content-Type이 "text/html"인 경우, 바디에는 HTML 문서 데이터가 포함됩니다. Content-Type이 "application/json"인 경우, 바디에는 JSON 데이터가 포함된다..
HTTP 메시지 바디의 크기는 Content-Length 헤더 필드에 의해 나타낸다. 이를 통해 수신측은 데이터를 수신하기 위해 필요한 리소스와 크기를 결정할 수 있다.
출처 : 인프런 - 모든 개발자를 위한 HTTP 웹 기본지식 by 우아한형제 김영한이사님
'WEB HTTP > HTTP 기본' 카테고리의 다른 글
HTTP 메서드 - PUT, PATCH, DELETE (0) | 2023.03.17 |
---|---|
HTTP 메서드 - GET, POST (0) | 2023.03.17 |
HTTP 연결성과 비연결성(connectionless) (0) | 2023.03.17 |
HTTP 기본 (0) | 2023.03.16 |
URI? URL? URN? [웹HTTP] (0) | 2023.03.07 |