💡 HTTP Messages란
HTTP Messages란 클라이언트와 서버 사이에서 데이터가 교환되는 방식으로,
요청(Request)과 응답(Response)두가지 유형이 있다.
💡 HTTP Messages 요청과 응답의 구조
HTTP Message는 몇줄의 텍스트 정보로 구성되나, 개발자가 직접 작성하지 않아도
구성파일, API, 기타 인터페이스에서 자동 완성됨
start line | 헤드(head) |
-요청이나 응답의 상태 -항상 첫 번째 줄에 위치 -응답에서는 status line이라고 부름 |
HTTP headers | -요청을 지정하거나, 메시지에 포함된 본문을 설명하는 헤더의 집합 | |
empty line | -헤더와 본문을 구분하는 빈 줄 | |
payload | 바디(body) | -요청과 관련된 데이터나 응답과 관련된 데이터 또는 문서를 포함 -요청과 응답의 유형에 따라 선택적으로 사용 |
💡 HTTP Message Request (클라이언트 ➡️서버) 구조 상세보기
Start line | HTTP method | -수행할 작업(GET, PUT, POST 등)이나 방식(HEAD or OPTIONS)을 설명 |
요청 대상(일반적으로 URL이나 URI) 또는 프로토콜, 포트, 도메인의 절대 경로 | -형식은 HTTP method 마다 다름 1️⃣ origin 형식: '?'와 쿼리 문자열이 붙는 절대 경로 GET, POST, HEAD, OPTIONS 등의 method와 함께 사용 (예시) POST / HTTP 1.1 GET /background.png HTTP/1.0HEAD /test.html?query=alibaba HTTP/1.1 OPTIONS /anypage.html HTTP/1.0 2️⃣absolute 형식: 완전한 URL 형식 프록시에 연결하는 경우 대부분 GET method와 함께 사용 (예시) GET http://developer.mozilla.org/en-US/docs/Web/HTTP/Messages HTTP/1.1 3️⃣authority 형식 도메인 이름과 포트 번호로 이루어진 URL의 일부분 HTTP 터널을 구축하는 경우, CONNECT와 함께 사용 (예시) GET CONNECT developer.mozilla.org:80 HTTP/1.1 4️⃣asterisk 형식 OPTIONS 와 함께 별표(*) 하나로 서버 전체 표현 (예시) OPTIONS * HTTP/1.1 |
|
HTTP 버전 | HTTP 버전에 따라 HTTP message의 구조가 달라지므로 적어야함 | |
Headers 헤더 이름(대소문자 구분이 없는 문자열), 콜론( : ), 값(값은 헤더에 따라 다름) |
General headers | -메시지 전체에 적용되는 헤더 -body를 통해 전송되는 데이터와는 관련이 없음 |
Request headers | -fetch를 통해 가져올 리소스나 클라이언트 자체에 대한 자세한 정보를 포함하는 헤더 - User-Agent, Accept-Type, Accept-Language와 같은 헤더는 요청을 보다 구체화함 -Referer처럼 컨텍스트를 제공하거나 If-None과 같이 조건에 따라 제약을 추가할 수 있음 |
|
Representation headers | Entity headers로 불렀으며, body에 담긴 리소스의 정보(콘텐츠 길이, MIME 타입 등)를 포함하는 헤더 | |
Body -HTTP messages 구조의 마지막에 위치 -모든 요청에 body가 필요하지는 않음(GET, HEAD, DELETE, OPTIONS처럼 서버에 리소스를 요청하는 경우에는 본문이 필요하지 않음) -POST나 PUT과 같은 일부 요청은 데이터를 업데이트하기 위해 사용할때 필요 |
Single-resource bodies(단일-리소스 본문) | -헤더 두 개(Content-Type과 Content-Length)로 정의된 단일 파일로 구성 |
Multiple-resource bodies(다중-리소스 본문) |
-여러 파트로 구성된 본문에서는 각 파트마다 다른 정보를 지님 -보통 HTML form과 관련있음 |
💡 HTTP Message Responses (서버 ➡️클라이언트) 구조 상세보기
Status line (예시) HTTP/1.1 404 Not Found |
현재 프로토콜의 버전 | -HTTP/1.1 |
상태 코드 | -요청의 결과를 나타냄 (예시) 200, 302, 404 등 |
|
상태 텍스트 | -상태 코드에 대한 설명 | |
Headers 헤더 이름(대소문자 구분이 없는 문자열), 콜론( : ), 값(값은 헤더에 따라 다름) request랑 구조 같음 |
General headers | -메시지 전체에 적용되는 헤더 -body를 통해 전송되는 데이터와는 관련이 없음 |
Request headers | -위치 또는 서버 자체에 대한 정보(이름, 버전 등)와 같이 응답에 대한 부가적인 정보를 갖는 헤더 -Vary, Accept-Ranges와 같이 상태 줄에 넣기에는 공간이 부족했던 추가 정보를 제공 |
|
Representation headers | Entity headers로 불렀으며, body에 담긴 리소스의 정보(콘텐츠 길이, MIME 타입 등)를 포함하는 헤더 | |
Body -HTTP messages 구조의 마지막에 위치 -모든 응답에 body가 필요하지는 않음(201, 204와 같은 상태 코드를 가지는 응답에는 본문이 필요하지 않음) |
Single-resource bodies(단일-리소스 본문) | -헤더 두 개(Content-Type과 Content-Length)로 정의된 단일 파일로 구성 -길이를 모르는 단일 파일로 구성된 단일-리소스 본문은 Transfer-Encoding이 chunked 로 설정되어 있으며, 파일은 chunk로 나뉘어 인코딩되어 있음 |
Multiple-resource bodies(다중-리소스 본문) |
-서로 다른 정보를 담고 있는 body입니다 |
💡 HTTP의 특징: Stateless(무상태성)
HTTP로 클라이언트와 서버가 통신을 주고받는 과정에서, HTTP가 클라이언트나 서버의 상태를 확인하지 않는다.
HTTP는 통신 규약일 뿐이므로, 상태를 저장하지 않는다.
따라서 필요에 따라 다른 방법(쿠키-세션, API 등)을 통해 상태를 확인할 수 있다.
'개념 > 기초지식' 카테고리의 다른 글
[HTTP/네트워크] SSR&CSR 표 하나로 정리 (0) | 2022.08.07 |
---|---|
[HTTP/네트워크] AJAX와 AJAX의 장단점 (0) | 2022.08.04 |
[HTTP/네트워크] 크롬 브라우저 에러 읽기 (0) | 2022.08.04 |
[HTTP/네트워크] 기초개념 - Domain과 DNS (0) | 2022.08.04 |
[HTTP/네트워크] 기초개념 - IP, PORT(포트) (0) | 2022.08.04 |