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 : 헤더와 본문을 구분합니다.
HTTP/1.x에서의 요청은 클라이언트가 서버에게 어떤 자원을 요청하는 메시지입니다. 이는 메서드, URI, 그리고 HTTP 버전으로 구성됩니다.
HTTP/1.1
**을 사용합니다.요청을 받은 서버가 클라이언트에게 돌려주는 메시지입니다. 이는 상태 코드, 상태 메시지, 그리고 HTTP 버전으로 구성됩니다.