[HTTP]HyperText Transfer Protocol
- HyperText Transfer Protocol
- HTML과 같은 문서를 전송하기 위한 프로토콜
- 웹 브라우저와 웹 서버의 소통
HTTP Messages
라이언트와 서버 사이에서 데이터가 교환되는 방식
- 요청
- 응답
- start line - start line에는 요청이나 응답의 상태, 첫 번째 줄, 응답에서는 status line
- HTTP headers - 요청 지정, 메시지에 포함된 본문을 설명하는 헤더의 집합
- empty line - 헤더와 본문을 구분하는 빈 줄
- body : 요청과 관련된 데이터나 응답과 관련된 데이터 또는 문서, 요청과 응답의 유형에 따라 선택적으로 사용
HTTP의 특징
Stateless - 상태를 가지지 않는다는 뜻
통신을 주고받는 과정에서, HTTP가 클라이언트나 서버의 상태를 확인하지 않음
HTTP Requests
Start line(세 가지 요소)
-
수행할 작업(GET, PUT, POST 등)이나 방식(HEAD or OPTIONS)을 설명하는 HTTP method
- 요청 대상(일반적으로 URL이나 URI) 또는 프로토콜, 프로토콜, 포트, 도메인의 절대 경로는 요청 컨텍스트에 작성. HTTP method 마다 다름
- origin 형식 : ‘?’와 쿼리 문자열이 붙는 절대 경로. GET, POST, HEAD, OPTIONS 등의 method와 함께 사용.
- POST / HTTP 1.1
- GET /background.png HTTP/1.0
- HEAD /test.html?query=alibaba HTTP/1.1
- OPTIONS /anypage.html HTTP/1.0
- absolute 형식 : 완전한 URL 형식, 프록시에 연결하는 경우 대부분 GET method와 함께 사용.
- GET http://developer.mozilla.org/en-US/docs/Web/HTTP/Messages HTTP/1.1
- authority 형식 : 도메인 이름과 포트 번호로 이루어진 URL의 일부분. HTTP 터널을 구축하는 경우, CONNECT와 함께 사용.
- CONNECT developer.mozilla.org:80 HTTP/1
- asterisk 형식 : OPTIONS 와 함께 별표(*) 하나로 서버 전체를 표현.
- OPTIONS * HTTP/1.1
- origin 형식 : ‘?’와 쿼리 문자열이 붙는 절대 경로. GET, POST, HEAD, OPTIONS 등의 method와 함께 사용.
- HTTP 버전에 따라 HTTP message의 구조가 달라짐. 따라서 start line에 HTTP 버전을 함께 입력.
Headers
요청의 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 구조의 마지막에 위치. GET, HEAD, DELETE, OPTIONS 등 서버에 리소스 요청 경우 body가 필요하지 않음. POST나 PUT과 같은 일부 요청은 데이터를 업데이트하기 위해 사용.
- Single-resource bodies(단일-리소스 본문) : 헤더 두 개(Content-Type과 Content-Length)로 정의된 단일 파일로 구성.
- Multiple-resource bodies(다중-리소스 본문) : 여러 파트로 구성된 본문에서는 각 파트마다 다른 정보를 지님. 보통 HTML form과 관련.
HTTP Responses
Status line(세 가지 요소)
- 현재 프로토콜의 버전(HTTP/1.1)
- 상태 코드 - 요청의 결과. (ex. 200, 302, 404 등)
- 상태 텍스트 - 상태 코드에 대한 설명
Status line의 예시 - HTTP/1.1 404 Not Found
Headers
요청 헤더와 동일한 구조. 대소문자 구분 없는 문자열, 콜론(:), 값 입력. 값은 헤더에 따라 다름
- General headers : 메시지 전체에 적용되는 헤더, body를 통해 전송되는 데이터와는 관련이 없음.
- Response headers : 위치 또는 서버 자체에 대한 정보(이름, 버전 등)와 같이 응답에 대한 부가적인 정보, Vary, Accept-Ranges와 같이 상태 줄에 넣기에는 공간이 부족했던 추가 정보.
- Representation headers : 이전에는 Entity headers로 불렀으며, body에 담긴 리소스의 정보(콘텐츠 길이, MIME 타입 등)를 포함.
body
구조의 마지막에 위치. 201, 204와 같은 상태 코드를 가지는 응답에는 body가 필요하지 않음.
- Single-resource bodies(단일-리소스 본문) :
- 길이가 알려진 단일-리소스 본문은 두 개의 헤더(Content-Type, Content-Length)로 정의.
- 길이를 모르는 단일 파일로 구성된 단일-리소스 본문은 Transfer-Encoding이 chunked로 설정되어 있음, 파일은 chunk로 나뉘어 인코딩되어 있음.
- Multiple-resource bodies(다중-리소스 본문) : 서로 다른 정보를 담고 있는 body.
댓글남기기