Fairy ' s
[16. March] HTTP messages / TIL 본문
HTTP (HyperText Transfer Protocol)
- html 과 같은 문서 전송을 위한 응용 계층 프로토콜
- HTTP는 무상태성 (Stateless)이라는 특징을 가지고 있다.
- 무상태성 (Stateless) : 서버는 동일한 클라이언트의 요청에 대한 정보를 유지하지 않으며, 독립적인 응답으로 응답한다. 즉, 상태를 저장하지 않는다는 뜻이며, 필요에 따라 다른 방법(쿠키-세션, API 등)을 통해 상태를 확인할 수 있다.
- HTTP messages : 클라이언트와 서버 사이 데이터가 교환되는 방식
- start line : 항상 첫 번째 줄에 위치하며, 요청이나 응답의 상태를 나타낸다. (응답에서는 'status line'이라고 부른다.)
- HTTP headers : 요청을 지정하거나, 메시지에 포함된 본문을 설명하는 헤더의 집합
- empty line : 헤더와 본문을 구분하는 빈 줄
- body : 요청, 응답 유형에 따라 선택적으로 사용되며, 요청·응답과 관련된 데이터나, 응답과 관련된 문서를 포함한다.
- start line과 HTTP headers를 묶어 요청이나 응답의 'head' 라고 하고,
- payload(전송되는 데이터)를 'body' 라고 한다.
HTTP messages 유형
요청 (Requests)
- Start line
- 수행할 작업(GET, PUT, POST 등)이나 방식(HEAD or OPTIONS)을 설명하는 HTTP method를 나타낸다.
ex ≫ GET method는 리소스를 받아야하고, POST method는 데이터를 서버로 전송한다.
- 요청 대상 또는 프로토콜, 포트, 도메인의 절대 경로는 요청 컨텍스트에 작성된다. 이 *요청 형식은 HTTP method마다 다르다.
- 버전에 따라 메시지의 구조가 달라지므로, start line에 HTTP 버전을 함께 입력한다.
*요청 형식 | 설명 |
origin 형식 | '?' 와 쿼리 문자열이 붙는 절대 경로. POST, GET, HEAD, OPTIONS 등의 method와 함께 사용한다. |
absolute 형식 | 완전한 URL 형식. *프록시에 연결하는 경우 대부분 GET method와 함께 사용한다. |
authority 형식 | 도메인 이름과 포트 번호로 이루어진 URL의 authority component 이다. HTTP 터널을 구축하는 경우, CONNECT와 함께 사용할 수 있다. |
asterisk 형식 | OPTIONS와 함께 별표(*) 하나로 서버 전체를 표현한다. |
- Headers
- 기본 구조를 따른 형태로, 헤더 이름/콜론/값을 입력한다. 여러 종류의 헤더가 있으며 다음과 같이 그룹을 나눌 수 있다.
헤더 이름 | 설명 |
General headers | 메시지 전체에 적용되는 헤더. body를 통해 전송되는 데이터와는 관련이 없는 헤더이다. |
Request headers | *fetch를 통해 가져올 리소스나 클라이언트 자체에 대한 자세한 정보를 포함하는 헤더이다. User-Agent, Accepte-Type, Accept-Language 같은 헤더는 요청을 보다 구체화 하며, *Referer 처럼 컨텍스트를 제공하거나 *If-None 과 같이 조건에 따라 제약을 추가할 수 있다. |
Representation headers | Entity header 라고도 부르며, body에 담긴 리소스의 정보를 포함하는 헤더이다. |
- Body
- 요청의 본문은 HTTP messages 구조의 마지막에 위치하며, 모든 요청에 body가 필요하진 않다.
- body가 필요하지 않은 경우 : GET, HEAD, DELETE, OPTIONS처럼 서버에 리소스를 요청하는 경우
- POST나 PUT 같은 일부 요청은 데이터를 업데이트 하기 위해 사용한다.
body 종류 | 설명 |
Single-resource bodies(단일-리소스 본문) | 헤더 두 개(Content-Type과 Content-Length)로 정의된 단일 파일로 구성된다. |
Multiple-resource bodies(다중-리소스 본문) | 여러 파트로 구성된 본문에서는 각 파트마다 다른 정보를 지닌다. 보통 HTML form과 관련이 있다. |
응답 (Responses)
- Status line
- 응답의 첫 줄
- 현재 프로토콜의 버전(HTTP/1.1), 상태 코드(요청의 결과/200, 302, 404 등), 상태 텍스트(설명) 을 나타낸다.
ex ≫ HTTP/1.1 404 Not Found. - Header
- 요청 헤더와 동일한 구조인 문자열, 콜론, 값 형태이다.
- 요청 헤더의 그룹 중 Request header가 Response header로 변경된 그룹을 가지고 있다.
- Response header : 위치 또는 서버 자체에 대한 정보와 같이 응답에 부가적인 정보를 갖는 헤더.
Vary, Accept-Ranges와 같이 상태 줄 넣기에는 공간이 부족했던 추가 정보를 제공한다.
- Body
- 요청의 본문과 같이 모든 응답에는 body가 필요하진 않다.
- body가 필요하지 않은 경우 : 201, 204와 같은 상태 코드를 가지는 응답
body 종류 | 설명 |
Single-resource bodies(단일-리소스 본문) | 길이가 알려진 body는 두 개의 헤더로 정의한다. 길이를 모르는 body는 Transfer-Encoding이 chunked로 설정되어 있으며, 파일은 chunk로 나뉘어 인코딩 되어 있다. |
Multiple-resource bodies(다중-리소스 본문) | 서로 다른 정보를 담고 있는 body이다. |
* 프록시 (proxy) : 사용자 장치와 인터넷 사이의 게이트웨이 역할을 하는 중간 서버 또는 소프트웨어
* fetch : 개발자가 HTTP 요청을 만들어 서버나 네트워크에서 리소스를 검색할 수 있도록 하는 웹 API
* Referer : 사용자가 웹사이트를 방문하기 위해 링크를 클릭할 때 HTTP 요청 헤더와 함께 전달되는 정보
* if-None : 캐싱을 구현하고 서버 성능을 최적화하는 데 사용되는 HTTP 요청 헤더
'Devops Bootcamp' 카테고리의 다른 글
[22. March] HTTP #2 / TIL (0) | 2023.03.22 |
---|---|
[22. March] HTTP #1 / TIL (0) | 2023.03.22 |
[15. March] 웹 서비스 접근 / TIL #2 (2) | 2023.03.15 |
[15. March] 클라이언트 - 서버 / TIL #1 (0) | 2023.03.15 |
[14. March] 시스템 모니터링 / TIL #2 (0) | 2023.03.14 |
Comments