일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Computer Science
- Python
- codestates
- algorithm
- JavaScript
- typeScript
- Zerobase
- 알고리즘
- 코드스테이츠
- 컴퓨터공학
- react 기초
- Operating System
- OS
- java
- 자료구조
- 운영체제
- context switching
- 개발공부
- 비동기
- 글또
- useState
- 파이썬 알고리즘 인터뷰
- node.js
- execution context
- 자바스크립트
- REACT
- 파이썬
- 프로그래머스
- python algorithm
- 자바
- Today
- Total
Back to the Basics
[Computer Science][Codestates] - HTTP/Network 기초 - 3 : HTTP Messages 본문
[Computer Science][Codestates] - HTTP/Network 기초 - 3 : HTTP Messages
9Jaeng 2021. 10. 25. 20:271. HTTP
HTTP (Hyter Text Transfer Protocol) HTML과 같은 문서를 전송하기 위한 Application Layer (응용계층) Protocol이며 웹 브라우저와 웹 서버의 소통을 위해 개발되었다. HTTP의 가장 큰 특징으로는, 특정 상태를 유지하지 않는 Stateless 무상태성 이다.
무상태성이란 말 그대로 상태를 가지지 않는다는 의미이다. 서버와 클라이언트가 통신하는 과정에서 HTTP가 서버나 클라이언트의 상태를 확인하지 않는다.(HTTP는 단시 통신규약일 뿐이므로). 상태를 확인하는 방법으로는 쿠키 , 세션, API들을 통해 확인한다
2. HTTP messages
HTTP messages는 Server와 Client 사이에서 데이터가 교환되는 방식이며 ASCII 인코딩 된 multi line text 구조를 갖고 있다.
HTTP는 초기 버전인 HTTP/1.1과 이후 버전인 HTTP/2 버전이 있다
- HTTP/1.1 은 초기 버전이며 연결을 통해 공개적으로 전송되었다.(캡슐화를 하지 않거나 헤더를 압축하지 않는다는 의미인가?)
- HTTP/2는 최적화와 성능이 향상된 버전이다. HTTP/2 binary framing (바이너리 프레이밍) 메커니즘은 API나 config file의 변경을 요구하지 않는다.
HTTP messages는 client와 server 사이에서 데이터가 교환되는 방식이며 Reuest(요청) , Response(응답) 두 가지 유형이 있으며 구조적으로 비슷한 구조를 갖고 있다.
HTTP Request, Response에 대한 구조는 아래와 같이 구성되어있다.
- start line : 요청이나 응답 상태 (성공 또는 실패)를 나타낸다. 항상 첫 줄에 위치한다.
- HTTP headers : 요청 또는 설명 메시지의 본문을 나타낸다.
- empty line : 헤더와 본문을 구분하는 빈 줄
- body : 요청 관련된 데이터 또는 응답과 관련된 문서를 포함한다. 요청과 응답의 유형에 따라 선택적으로 사용한다.
stert line과 HTTP headers를 묶어서 요청이나 응답의 head 라고 한다. payload는 message body를 의미한다.
payload : 사용에 있어서 전송되는 데이터를 뜻함. 프로토콜 중에 프로토콜 오버헤드와 원하는 데이터를 구별할 때 사용된다.
HTTP Request
HTTP request는 client가 server에 보내는 message이다.
(1) start line
start line에는 세 가지의 요소들이 있다.
- HTTP method : 수행할 작업 (GET, PUT, POST) 또는 수행할 방식 (HEAD or OPTIONS)을 설명
- Request target (일반적으로 URL , URI 또는 protocol , port , domain name의 절대 경로) - HTTP method마다 다르다.
- origin 형식 :? 와 쿼리 문자열이 붙는 절대 경로. POST, GET, 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와 함께 사용한다
- ex) GET http://developer.mozilla.org/en-US/docs/Web/HTTP/Messages HTTP/1.1 Proxy
- authority 형식 : 도메인 이름과 포트 번호로 이루어진 URL의 authority component. HTTP 터널을 구축하는 경우 CONNECT와 함께 사용할 수 있다. ex) CONNECT developer.mozilla.org:80 HTTP/1.1
- asterisk 형식 OPTIONS와 함께 * 하나로 서버 전체를 표현한다. ex) OPTIONS * HTTP/1.1
- origin 형식 :? 와 쿼리 문자열이 붙는 절대 경로. POST, GET, HEAD, OPTIONS 등의 method와 함께 사용
- HTTP version : HTTP 버전에 따라 HTTP message 구조가 달라 지기 때문에 HTTP 버전을 함께 입력해야 한다
(2) Headres
요청의 Headers는 기본 구조를 따른다. (대소문자 구분 없는 문자열 : Header value ) 여러 값은 ", "를 붙인다.
Ex ) name:value, name:value
Header의 value는 헤더에 따라 다르고 헤더의 유형은 아래와 같이 일반 헤더(Gerneral Header) , 요청/응답 헤더 (Request / Response Header) , Representation Header(구 Entity Header)로 분류된다.
- 일반 헤더 (Gerneral Header) : message 전체에 적용되는 헤더로(요청과 응답 메시지에 공통적으로 사용됨), body를 통해 전송되는 데이터와는 관련이 없는 헤더이다. 요청/응답이 생성된 날짜 및 시간 등과 같은 HTTP통신에 대한 정보가 포함된다. EX ) Date:Tue, 17 Nov 2015 16:39:15 GMT
- 요청 헤더(Request Header) : fetch를 통해 가져올 resource 또는 클라이언트에 대한 추가적인 정보를 포함한다. User-Agent, Accept-Type, Accept-Language와 같은 헤더는 요청 정보를 구체화한다. Reference처럼 컨텍스트를 제공하거나 If-None과 같이 조건에 따라 제약을 추가할 수 있다. Ex ) User-Agent:”Mozilla/5.0 (Windows NT 10.0; WOW64; rv:41.0) Gecko/20100101Firefox/41.0″
User-Agent는 브라우저이고 위의 헤드는 Wondows 10과 fireffox 41.0 브라우저를 사용하고 있음을 알 수 있다.
- Rpresentation heaer : ( 구 Entity header) : body에 담긴 리소스 (컨텐츠 길이 , MIME 타입 등)을 포함하는 헤더이다. 실제 메시지 또는 전송중인 HTTP 본문에 대한 정보가 포함된다. 컨텍츠 길이, 콘텐츠의 언어, encoding , 유효기간 등 message가 body를 갖고 있다면 존재함 Ex ) Content-Length:4959 브라우저는 전송받은 data를 읽기 시작하고 head section에 있는 CSS, JavaScript, image files URL 등을 발견한다. 이를 fetch 하기 위해 별개의 HTTP 요청을 만들고 모든 요청이 전송되고 응답이 수신되면 content-legnth의 전체 합은 모든 요청의 합이 된다.
- body/content의 길이는 4959 bytes 임을 의미한다. 하지만 위의 길이가 전체 길이는 아니다.
(3) HTTP Body
Request의 Body는 HTTP Messeage구조의 마지막에 위치하며 POST, PUT과 같이 resource를 추가하거나 업데이트해야 할 경우에만 사용된다. body로 보내지는 data는 fetch 할 실제 data를 의미한다.
body는 아래와 같이 두 종류로 나눌 수 있다.
- Single-resource-bodies(단일 리소스 본문) : 헤더 두 개 (Content-type과 Conten-Length)로 정의된 단일 파일로 구성된다.
- Multiple-resource-bodies(다중 리소스 본문) : 여러 파트로 구성된 본문에서는 각 파트마다 다른 정보를 지닌다.
Web forms - Working with user data - Learn web development | MDN
https://developer.mozilla.org/en-US/docs/Learn/Forms
HTTP Responses
Server가 Client로부터 HTTP request를 받으면 HTTP response를 return 한다. 이 response는 요청된 information 또는 Error message 일수도 있다.
(1) Status line
응답의 첫 줄은 status line이라고 부르면 아래의 정보를 포함한다.
- 현재 프로토콜의 버전(HTTP/1.1)
- 상태 코드 - 요청의 결과를 나타낸다 (200, 302, 404 등등)
- 상태 텍스트 - 상태 코드에 대한 설명
Ex ) HTTP/1.1 404 Not Found.
- 일반 헤더 (Gerneral Header) : message 전체에 적용되는 헤더로(요청과 응답 메시지에 공통적으로 사용됨), body를 통해 전송되는 데이터와는 관련이 없는 헤더이다. 요
- 요청 헤더(Response Header) : 위치 또는 서버 자체에 대한 정보(이름, 버전 등)와 같이 응답에 대한 부가적인 정보를 갖는 헤더로, Vay, Accept-Ranges와 같이 상태 줄에 넣기에 공간이 부족했던 추가 정보를 제공. 요청 헤더와 구조가 동일하다. 값은 헤더에 따라 다르다. User에 의해 보내진 특정 page 또는 resource에 대한 request에 대한 server에서 browser로 보내진 헤더이며 ecoding, 응답을 생성하기 위해 사용된 server Software 등의 정보를 담고 있다.
- Representation heaer : ( 구 Entity header) : body에 담긴 리소스 (컨텍츠 길이 , MIME 타입 등)을 포함하는 헤더이다.
(3) HTTP Body
Client가 request 한 data를 포함한다.
응답의 본문음 HTTP messages 구조의 마지막에 위치하며 모든 응답에 body가 필요하지는 않다.
201, 204와 같은 상태 모드를 가지는 응답에는 body가 필요 없다.
- Single-resource-bodies(단일 리소스 본문) : 헤더 두 개 (Content-type과 Conten-Length)로 정의된 단일 파일로 구성된다. 길이를 모드는 단일-리소스 본문은 Transfer-Encoding이 chunked로 설정되어 있으며, 파일은 chunk로 나누어 인코딩 되어있다.
- Multiple-resource-bodies(다중 리소스 본문) : 여러 파트로 구성된 본문에서는 각 파트마다 다른 정보를 지닌다.
HTTP 1.x 와 HTTP 2에 대한 비교는 추후 포스팅 (추후가 몇 개인지..)