HTTP/1.x 메시지

HTTP/1.x 메시지는 클라이언트와 서버 간에 정보를 교환하는 방식입니다. 이 메시지는 크게 두 부분으로 나뉩니다: **요청(Request)**과 응답(Response). 각각의 요청과 응답은 다음과 같은 구성 요소로 이루어집니다.


트리로 정리한 메시지 구성요소

HTTP Message
├──Request
│   ├──Start-Line
│   │   ├──Method
│   │   │   ├──GET : 리소스를 조회합니다.
│   │   │   ├──POST : 리소스를 생성하거나 데이터를 서버로 전송합니다.
│   │   │   ├──PUT : 리소스의 모든 현재 표현을 요청 payload로 바꿉니다.
│   │   │   ├──DELETE : 리소스를 삭제합니다.
│   │   │   ├──CONNECT : 목적 리소스로 식별되는 서버로의 터널을 맺습니다.
│   │   │   ├──OPTIONS : 목적 리소스의 통신을 설정합니다.
│   │   │   └──PATCH : 리소스의 부분만을 수정합니다.
│   │   ├──Request Target : 요청이 전송되는 리소스의 식별자. 포맷은 HTTP 메소드에 따라 다릅니다.
│   │   │   ├──Origin Form : 끝에 '?'와 쿼리 문자열이 붙는 절대 경로. 가장 일반적이며, GET, POST, HEAD, OPTIONS 메서드와 함께 사용.
│   │   │   │   ├──Example with GET: `GET /background.png HTTP/1.0`
│   │   │   │   ├──Example with POST: `POST / HTTP/1.1`
│   │   │   │   ├──Example with HEAD: `HEAD /test.html?query=alibaba HTTP/1.1`
│   │   │   │   └──Example with OPTIONS: `OPTIONS /anypage.html HTTP/1.0`
│   │   │   ├──Absolute Form : 완전한 URL 형식. 주로 프록시에 연결하는 경우와 GET 메서드에 사용.
│   │   │   │   └──Example: `GET <http://developer.mozilla.org/ko/docs/Web/HTTP/Messages> HTTP/1.1`
│   │   │   ├──Authority Form : 도메인 이름 및 옵션 포트(':'가 앞에 붙음). 주로 CONNECT 메서드와 HTTP 터널을 구축하는 경우에 사용.
│   │   │   │   └──Example: `CONNECT developer.mozilla.org:80 HTTP/1.1`
│   │   │   └──Asterisk Form : 별표('*') 하나로 서버 전체를 나타냄. 주로 OPTIONS 메서드와 함께 사용.
│   │   │       └──Example: `OPTIONS * HTTP/1.1`
│   │   └──HTTP Version : 사용되는 HTTP 프로토콜의 버전.
│   ├──Headers
│   │   ├──General Headers
│   │   │   ├──Cache-Control : 캐싱 동작을 제어합니다.
│   │   │   └──Connection : 컨트롤 옵션과 네트워크 관련 설정을 지정합니다.
│   │   ├──Request Headers
│   │   │   ├──Accept : 클라이언트가 이해할 수 있는 미디어 타입을 지정합니다.
│   │   │   ├──Host : 요청이 전송되는 대상 서버의 도메인을 지정합니다.
│   │   │   └──Authorization : 인증 정보를 전달합니다.
│   │   └──Representation Headers
│   │       ├──Content-Type : 요청 본문의 미디어 타입을 지정합니다.
│   │       └──Content-Length : 요청 본문의 길이를 지정합니다.
│   ├──Body
│   │   ├──Single-Resource Bodies
│   │   │   ├──Text Data : 일반 텍스트 데이터 (예: 텍스트, JSON, XML 등)
│   │   │   ├──Binary Data : 바이너리 데이터 (예: 이미지, 파일 등)
│   │   │   └──Form Data : 폼 입력 데이터 (예: `application/x-www-form-urlencoded`, `multipart/form-data`)
│   │   └──Multiple-Resource Bodies
│   │       └──Multipart Data : 여러 리소스를 하나의 본문으로 전송 (예: 이메일의 본문과 첨부파일)
│   └──Empty Line : 헤더와 본문을 구분합니다.
└──Response
    ├──Start-Line
    │   ├──HTTP Version : 사용되는 HTTP 프로토콜의 버전.
    │   ├──Status Code : 응답 상태를 나타내는 코드.
    │   └──Reason Phrase : 상태 코드를 설명하는 간단한 문구.
    ├──Headers
    │   ├──General Headers
    │   │   ├──Cache-Control : 캐싱 동작을 제어합니다.
    │   │   └──Connection : 컨트롤 옵션과 네트워크 관련 설정을 지정합니다.
    │   ├──Response Headers
    │   │   ├──Location : 리다이렉트 대상 URL을 지정합니다.
    │   │   └──WWW-Authenticate : 인증 방식을 나타냅니다.
    │   └──Representation Headers
    │       ├──Content-Type : 응답 본문의 미디어 타입을 지정합니다.
    │       └──Content-Length : 응답 본문의 길이를 지정합니다.
    ├──Body
    │   ├──Single-Resource Bodies
    │   │   ├──Text Data : 일반 텍스트 데이터 (예: HTML, JSON, XML 등)
    │   │   ├──Binary Data : 바이너리 데이터 (예: 이미지, 파일 다운로드 등)
    │   │   └──Stream Data : 스트리밍 데이터 (예: 비디오, 오디오 스트림)
    │   └──Multiple-Resource Bodies
    │       └──Multipart Data : 여러 리소스를 하나의 본문으로 전송 (예: 다중 범위(`ranges`) 응답)
    └──Empty Line : 헤더와 본문을 구분합니다.

요청(Request)과 응답(Response)

요청(Request)

HTTP/1.x에서의 요청은 클라이언트가 서버에게 어떤 자원을 요청하는 메시지입니다. 이는 메서드, URI, 그리고 HTTP 버전으로 구성됩니다.

응답(Response)

요청을 받은 서버가 클라이언트에게 돌려주는 메시지입니다. 이는 상태 코드, 상태 메시지, 그리고 HTTP 버전으로 구성됩니다.