HTTP ๋ฉ์์ง
HTTP ๋ฉ์์ง
HTTP ๋ฉ์์ง๋ ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ์ ๋ฐ์ดํฐ๊ฐ ๊ตํ๋๋ ๋ฐฉ์์ด๋ค. ๋ฉ์์ง์ ํ์ ์ ์์ฒญ(request)์ ์๋ต(response)๋ก ๋๋์ด์ง๋ค.
๋ฉ์์ง ํน์ง
- ASCII๋ก ์ธ์ฝ๋ฉ๋ ํ ์คํธ ์ ๋ณด์ด๋ฉฐ ์ฌ๋ฌ ์ค๋ก ๋์ด ์๋ค.
- HTTP ์ด๊ธฐ์ HTTP1.1์ ๋ฉ์์ง๋ ์ฌ๋์ด ์ฝ์ ์ ์์์ง๋ง, HTTP/2์์๋ ์ต์ ํ์ ์ฑ๋ฅ ํฅ์์ ์ํด HTTP ํ๋ ์์ผ๋ก ๋๋์ด์ก๋ค.
- HTTP ๋ฉ์์ง๋ ๊ฐ๋ฐ์ ๋์ ์ํํธ์จ์ด, ๋ธ๋ผ์ฐ์ , ํ๋ก์ ํน์ ์น ์๋ฒ๊ฐ ๋์ ์์ฑํด์ค๋ค. ํ๋ก์, ์๋ฒ์ ๊ฒฝ์ฐ ์ค์ ํ์ผ์ ํตํด, ๋ธ๋ผ์ฐ์ ์ ๊ฒฝ์ฐ API ํน์ ๋ค๋ฅธ ์ธํฐํ์ด์ค๋ฅผ ํตํด ์ ๊ณต๋๋ค.
HTTP/2์ binary framing ๋งค์ปค๋์ฆ์ ์ฌ์ฉ ์ค์ธ API๋ ์ค์ ํ์ผ์ ๋ณ๊ฒฝํ์ง ์์๋ ๋๋๋ก ์ค๊ณ๋์๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์๊ฐ ์ดํดํ๊ธฐ ์ฝ๋ค.
HTTP ์์ฒญ๊ณผ ์๋ต์ ๊ตฌ์กฐ
- start-line: ์คํ๋์ด์ผ ํ ์์ฒญ, ์์ฒญ ์ํ์ ๋ํ ๊ฒฐ๊ณผ
- option: HTTP ํค๋ ์ธํธ: ์์ฒญ์ ๋ํ ์ค๋ช , ๋ฉ์์ง ๋ณธ๋ฌธ์ ๋ํ ์ค๋ช
- ๋น ์ค(blank line): ์์ฒญ์ ๋ํ ๋ชจ๋ ๋ฉํ ์ ๋ณด๊ฐ ์ ์ก๋์์์ ์๋ฆฐ๋ค.
- ์์ฒญ๊ณผ ๊ด๋ จ๋ ๋ด์ฉ, ์๋ต๊ณผ ๊ด๋ จ๋ ๋ฌธ์ ๋ฑ์ด ์ต์
์ผ๋ก ๋ค์ด๊ฐ๋ค.
- ๋ณธ๋ฌธ์ ์กด์ฌ ์ ๋ฌด ๋ฐ ํฌ๊ธฐ๋ HTTP ํค๋์ ๋ช ์๋๋ค.
HTTP Request ๊ตฌ์กฐ
start line
- HTTP ๋ฉ์๋(
GET
,POST
,PUT
,HEAD
,OPTIONS
) - ์์ฒญ ํ๊ฒ
- origin ํ์
- ๋์
?
์ ๋ฌธ์์ด์ด ๋ถ๋ ์ ๋ ๊ฒฝ๋ก๋ก, ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ํ์์ด๋ค. GET
,POST
,HEAD
,OPTIONS
๋ฉ์๋์ ํจ๊ป ์ฌ์ฉํ๋ค.
- ๋์
- absolute ํ์
- ์์ ํ URL ํ์
- ํ๋ก์์ ์ฐ๊ฒฐํ๋ ๊ฒฝ์ฐ
GET
๊ณผ ํจ๊ป ์ฌ์ฉ
- authority ํ์
- ๋๋ฉ์ธ ์ด๋ฆ ๋ฐ ์ต์ ํฌํธ๋ก ์ด๋ฃจ์ด์ง URL์ authority component
- HTTP ํฐ๋์ ๊ตฌ์ถํ๋ ๊ฒฝ์ฐ
CONNECT
์ ํจ๊ป ์ฌ์ฉ
- asterisk ํ์
OPTIONS
์ ํจ๊ป*
๋ก ๊ฐ๋จํ๊ฒ ์๋ฒ ์ ์ฒด๋ฅผ ๋ํ๋ธ๋คOPTIONS * HTTP/1.1
- origin ํ์
- HTTP ๋ฒ์
Header
- General Header
- ๋ฉ์์ง ์ ์ฒด์ ์ ์ฉ
Via
- Request Header
User-Agent
,Accept-Type
๊ณผ ๊ฐ์ ํค๋๋ ์์ฒญ์ ๋ด์ฉ์ ์ข ๋ ๊ตฌ์ฒดํ์ํค๊ณ (Accept-Language
), ์ปจํ ์คํธ๋ฅผ ์ ๊ณตํ๊ธฐ๋ ํ๋ฉฐ (Referer
), ์กฐ๊ฑด์ ๋ฐ๋ฅธ ์ ์ฝ ์ฌํญ์ ๊ฐํ๊ธฐ๋ ํ๋ฉด์(If-None
) ์์ฒญ ๋ด์ฉ์ ์์
- Entity Header
Content-Length
์ ๊ฐ์ ํค๋๋ ์์ฒญ ๋ณธ๋ฌธ์ ์ ์ฉ๋๋ค.
Body
๋ณธ๋ฌธ(Body)๋ ์์ ์๋ ์๊ณ , ์์ ์๋ ์๋ค. ๋ฆฌ์์ค๋ฅผ ๊ฐ์ ธ์ค๋ ์์ฒญ์ ๋ณธ๋ฌธ์ด ํ์ ์์ง๋ง POST์ฒ๋ผ ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ ์์ฒญ์ ๋ณธ๋ฌธ์ด ์๋ค.
- ๋จ์ผ-๋ฆฌ์์ค ๋ณธ๋ฌธ(single-resource bodies)
- ๋ค์ค-๋ฆฌ์์ค ๋ณธ๋ฌธ(multiple-resource bodies)
HTTP ์๋ต
status line
์)
HTTP/1.1 404 Not Found
ํ๋กํ ์ฝ ๋ฒ์ , ์ํ ์ฝ๋, ์ํ ํ ์คํธ๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
Header
์๋ต ๋ฉ์์ง ํค๋์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ข ๋ฅ๊ฐ General Header, Response Header, Entity Header๋ก ๋๋์ด์ง๋ค.
Body
์์ฒญ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ชจ๋ ์๋ต์ ๋ณธ๋ฌธ์ด ๋ค์ด๊ฐ์ง๋ ์๋๋ค. 201, 204์ ๊ฐ์ ์ํ ์ฝ๋๋ฅผ ๊ฐ์ง ์๋ต์๋ ๋ณดํต ๋ณธ๋ฌธ์ด ์๋ค. ๋ณธ๋ฌธ์ ๋ค์ ์ธ ๊ฐ์ง๋ก ๋๋์ด์ง๋ค.
- ๊ธธ์ด๋ฅผ ์๋ ๋จ์ผ-๋ฆฌ์์ค ๋ณธ๋ฌธ(single-resource bodies)
- ๊ธธ์ด๋ฅผ ๋ชจ๋ฅด๋ ๋จ์ผ-๋ฆฌ์์ค ๋ณธ๋ฌธ
- Transfer-Encoding์ด chunked๋ก ์ค์ ๋์ด ์์ผ๋ฉท, ํ์ผ์ ์ฒญํฌ๋ก ๋๋์ด ์ธ์ฝ๋ฉ๋์ด ์๋ค.
- ๋ค์ค-๋ฆฌ์์ค ๋ณธ๋ฌธ(multiple-resource bodies)
HTTP/2 ํ๋ ์
HTTP/1.x ๋ฉ์์ง์ ์ฑ๋ฅ์์ ๊ฒฐํจ
- ๋ณธ๋ฌธ๊ณผ ๋ฌ๋ฆฌ header๋ ์์ถ์ด ๋์ง ์๋๋ค.
- ์ฐ์๋ ๋ฉ์์ง๋ ๋น์ทํ header ๊ตฌ์กฐ๋ฅผ ๋์ง๋ง, ๋ฉ์์ง๋ง๋ค ๋ฐ๋ณต๋์ด ์ ์ก๋๋ค.
- ๋ค์ค ์ ์ก(multiplexing)์ด ๋ถ๊ฐ๋ฅ
- ๋นํจ์จ์ ์ธ codl TCP ์ฐ๊ฒฐ ์ฌ์ฉ: ์๋ฒ ํ๋์ ์ฐ๊ฒฐ์ ์ฌ๋ฌ ๊ฐ ์ด์ด์ผ ํ๋ค.
HTTP/2
HTTP/1.x ๋ฉ์์ง๋ฅผ ํ๋ ์์ผ๋ก ๋๋์ด ์คํธ๋ฆผ์ ๋ผ์ ๋ฃ๋๋ค.
๋ฐ์ดํฐ์ ํค๋ ํ๋ ์์ด ๋ถ๋ฆฌ๋์๊ธฐ ๋๋ฌธ์ ํค๋๋ฅผ ์์ถํ ์ ์๋ค.
์คํธ๋ฆผ ์ฌ๋ฌ๊ฐ๋ฅผ ํ๋๋ก ๋ฌถ์ ์ ์์ด์ ๊ธฐ์ ์ ์ํ๋๋ TCP ์ฐ๊ฒฐ์ด ์ข ๋ ํจ์จ์ ์ผ๋ก ์ด๋ฃจ์ด์ง๋ค.
์ถ์ฒ
https://developer.mozilla.org/ko/docs/Web/HTTP/Messages