๐ Intro
๐HTTP๋?
* HyperText Transfer Protocol
* Image, ์์ฑ, ์์, JSON, XML (API) ๋ฑ ๊ฑฐ์ ๋ชจ๋ ํํ์ ๋ฐ์ดํฐ ์ ์ก ๊ฐ๋ฅ.
* ์๋ฒ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์๋๋ ๋๋ถ๋ถ HTTP ์ฌ์ฉ.
๐HTTP์ ์ญ์ฌ
์ฌ๋ฌ๊ฐ์ง ๋ฒ์ ์์ง๋ง...
HTTP/1.1 (1997) ๋ฒ์ ๋ง ์๋ฉด ๋จ. ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๊ณ ๊ฐ์ฅ ์ค์ํ ๋ฒ์ .
๐ ๊ธฐ๋ฐ ํ๋กํ ์ฝ
* TCP: HTTP/1.1, HTTP/2
* UDP: HTTP/3
๐ ํน์ง
1. ํด๋ผ์ด์ธํธ ์๋ฒ ๊ตฌ์กฐ
2. ๋ฌด์ํ ํ๋กํ ์ฝ(Stateless), ๋น์ฐ๊ฒฐ์ฑ
3. HTTP ๋ฉ์ธ์ง๋ฅผ ์ฌ์ฉํด ํต์
-> ๋จ์ํ๊ณ ํ์ฅ ๊ฐ๋ฅ
๐ ํด๋ผ์ด์ธํธ ์๋ฒ ๊ตฌ์กฐ
๐ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ๋ถ๋ฆฌ๋์ด ๋ ๋ฆฝ์ ์ผ๋ก ์กด์ฌํ๋ค๋ ๊ฒ์ด ํฌ์ธํธ!
* ๋ณต์กํ ๋น์ฆ๋์ค ๋ก์ง์ด๋ ๋ฐ์ดํฐ๋ ์๋ฒ์๋ง, UI์ ์ฌ์ฉ์ฑ ๋ฑ์ ํด๋ผ์ด์ธํธ์์!
*Request Response ๊ตฌ์กฐ
* ํด๋ผ์ด์ธํธ๋ ์๋ฒ์ ์์ฒญ์ ๋ณด๋ด๊ณ ์๋ต์ ๋๊ธฐ
* ์๋ฒ๊ฐ ์์ฒญ์ ๋ํ ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค์ด์ ์๋ต
๐ Stateful, Stateless
๐ Stateful (์ํ์ ์ง)
* ํ๋์ ํด๋ผ์ด์ธํธ์ ํญ์ ๊ฐ์ ์๋ฒ๊ฐ ์ ์ง๋์ด์ผ ํจ. ์๋ฒ์์ ์ ๋ณด๊ฐ ๊ณ์ ์ ์ง๋์ด์ผ ํ๋๊น.
-> ์ฅ์ ๋๋ฉด ๋งํ๋๊ฑฐ์ง.
๐Stateless (๋ฌด์ํ)
"์๋ฒ๋ ์๋ฌด๊ณ ํ ๋ชฐ๋ผ์ฉใ " ์ ๋ง์ธ๋๋ก ์ํ ์ ๋ณด๋ฅผ ์น ๋ค ํ๋ฒ์ ์๋ฒ์๊ฒ ์๋ ค์ค์ผ ํจ.
์๋ฒ๊ฐ ํ์ํ ์ ๋ณด๋ฅผ ๋ชจ๋ ์์ฒญ์ ๋ณด๋ด๋ฉด ํด๋ผ์ด์ธํธ๊ฐ ๊ทธ๋๊ทธ๋ ์๋ฒ์๊ฒ ๋ค ๋๊ฒจ์ค. ์๋ฒ๋ ์ ๋ณด๋ฅผ ๊ฐ๊ณ ์์ง ์์.
-> ์๋ฒ๋ฅผ ์ฝ๊ฒ ๋ฐ๊ฟ ์ ์์ด์ OK, ๊ฐ์๊ธฐ ์์ฒญ์ด ํญ์ฃผํด๋ ์๋ฒ ์๋ง์ด ํฌ์ ํด์ฃผ๋ฉด ๋๋๊น OK
-> ์ฅ์ ๋๋ฉด ์ค๊ณ ์๋ฒ๋ฅผ ํตํด ๋ค๋ฅธ ์๋ฒ๋ ํต์ ํ๋ฉด ๋์ง.
-> ์ค์ผ์ผ ์์(์๋ฒ ํ์ฅ) ์ ๋ฆฌ
๐ Stateless ์ ์ค๋ฌด ํ๊ณ
์ํ ์ ์ง๋ ์ต์ํ์ผ๋ก ํ๊ณ ์ต๋ํ stateless๋ก ์ค๊ณํด์ผ ํ์ง๋ง, ๋ชจ๋ ๊ฒ์ stateless๋ก ์ค๊ณํ ์๋ ์์.
์๋ฅผ ๋ค์ด ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ๊ฒฝ์ฐ๋ ์ํ๋ฅผ ์ ์งํด์ค์ผ ํจ. ๋ก๊ทธ์ธํ ์ฌ์ฉ์์ ๊ฒฝ์ฐ ๋ก๊ทธ์ธํ๋ค๋ ์ํ๋ฅผ ์๋ฒ์ ์ ์งํด์ค์ผ ํ๋๊น.
-> ์ผ๋ฐ์ ์ผ๋ก ๋ธ๋ผ์ฐ์ ์ฟ ํค์ ์๋ฒ ์ธ์ ๋ฑ์ ์ฌ์ฉํด์ ์ํ ์ ์ง.
๐ Stateless ์ ์ค์์ฑ
์ ์ฐฉ์ ์ด๋ฒคํธ๋ฅผ ์๊ฐํด๋ณด์. ์ ํํ ๋์์ ์๋ง์ ์์ฒญ์ด ๋ค์ด์ค๋ฉด ๋์ฉ๋ ํธ๋ํฝ ๋ฐ์!
-> ์ต๋ํ statelessํ๋๋ก ์ค๊ณํด์ผ ์๋ฒ๋ฅผ ๋๋ ค์ ๋์ํ ์ ์์.
๋ณดํต์ ๋ก๊ทธ์ธ๋ ํ์์๊ณ ์ํ๋ ์๋ HTML ์ ์ ํ์ด์ง๋ฅผ ๋จผ์ ๋ฟ๋ฆฌ๊ณ ์ฌ๊ธฐ์ ์๊ฐ์ ์ต๋ํ ๋์ด์ ์์ฒญ์ ์ข ๋ถ์ฐ์ํค๋ ๋ฐฉ๋ฒ์ด ์๋ค๊ณ ใ ใ
๐ ๋น์ฐ๊ฒฐ์ฑ (connectionless)
๐๋น์ฐ๊ฒฐ์ฑ์ด๋?
* ์ฌ๋ฌ๊ฐ์ ์๋ฒ์ ํด๋ผ์ด์ธํธ๊ฐ ์์ ๋ ์๋ฒ ํ๋๋น ์ฌ๋ฌ๊ฐ์ ํด๋ผ์ด์ธํธ์ ๊ณ์ ์ฐ๊ฒฐ์ ์ ์งํ๋๊ฒ ์๋๋ผ 1:1๋ก ํ๋์ฉ๋ง ์ฐ๊ฒฐ ์ ์ง
-> ์๋ฒ ์์์ ๋งค์ฐ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์.
* HTTP๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฐ๊ฒฐ์ ์ ์งํ์ง ์๋ ๋ชจ๋ธ
๐ ๋น์ฐ๊ฒฐ์ฑ์ ํ๊ณ์ ๊ทน๋ณต
* TCP/IP ์ฐ๊ฒฐ์ ์๋ก ๋งบ์ด์ผ ํจ -> 3 way handshake(์ฌ.์ฌ์ก.์ก) ์๊ฐ์ด ์ถ๊ฐ๋จ
* ์น ๋ธ๋ผ์ฐ์ ๋ก ์ฌ์ดํธ๋ฅผ ์์ฒญํ๋ฉด HTML ๋ฟ๋ง ์๋๋ผ ์๋ฐ์คํฌ๋ฆฝํธ, css, ์ถ๊ฐ ์ด๋ฏธ์ง ๋ฑ ์๋ง์ ์์์ด ํจ๊ป ๋ค์ด๋ก๋
-> ๊ทธ๋์ ์ง๊ธ์ HTTP ์ง์ ์ฐ๊ฒฐ (Persistent Connections)๋ก ๋ฌธ์ ํด๊ฒฐ
๐ HTTP ์ง์ ์ฐ๊ฒฐ
ํ๋ฒ ์ฐ๊ฒฐ ํ ๊ณ์ ์ฐ๊ฒฐ ์ ์ง - ์์ฒญ - ์๋ต - ์์ฒญ - ์๋ต - ์์ฒญ - ์๋ต - ์ข ๋ฃ
๐ HTTP ๋ฉ์ธ์ง
๐ ์ ์ฒด์ ์ธ HTTP ๋ฉ์ธ์ง ๊ตฌ์กฐ
๐ HTTP ์์ฒญ ๋ฉ์ธ์ง
๐ start-line (์์ ๋ผ์ธ)
start-line์ request-line ๊ณผ status-line์ผ๋ก ๊ตฌ๋ถ๋๋๋ฐ ์์ฒญ ๋ฉ์ธ์ง์ start-line์ request-line!
request-line์ ๊ตฌ์กฐ๋ ๋ฐ๋ก
method SP(๊ณต๋ฐฑ) request-target SP HTTP-version CRLF(์ํฐ)
* HTTP method: GET, POST, PUT, DELETE ๋ฑ๋ฑ
* request-target: '/'๋ก ์์ํ๋ ์ ๋๊ฒฝ๋ก
* HTTP-version: HTTP/1.1 ๊ฐ์ ๋ฒ์
๐ HTTP ์๋ต ๋ฉ์ธ์ง
๐ start-line (์์ ๋ผ์ธ)
์๋ต ๋ฉ์ธ์ง์ start-line์ status-line!
status-line์ ๊ตฌ์กฐ๋ ๋ฐ๋ก
HTTP-version SP(๊ณต๋ฐฑ) status-target SP reason-phrase CRLF(์ํฐ)
* HTTP-version: HTTP/1.1 ๊ฐ์ ๋ฒ์
* status-target: ์์ฒญ ์ฑ๊ณต,์คํจ๋ฅผ ๋ํ๋ (200: ์ฑ๊ณต / 400: ํด๋ผ์ด์ธํธ ์์ฒญ ์ค๋ฅ / 500: ์๋ฒ ๋ด๋ถ ์ค๋ฅ)
* reason-target: ์ด์ ๋ฌธ๊ตฌ. ์ฌ๋์ด ์ดํดํ ์ ์๋ ์งง์ ์ํ ์ฝ๋ ์ค๋ช ๊ธ
๐ header (ํค๋)
๐ ๊ตฌ์กฐ
field-name":"OWS field-value OWS (* OWS: ๋์ด์ฐ๊ธฐ ํ์ฉ)
* field-name: ๋์๋ฌธ์ ๊ตฌ๋ถX
๐ ์ฉ๋
* HTTP ์ ์ก์ ํ์ํ ๋ชจ๋ ๋ถ๊ฐ์ ๋ณด.
* ๋ฉ์ธ์ง ๋ฐ๋์ ๋ด์ฉ, ๋ฉ์ธ์ง ๋ฐ๋์ ํฌ๊ธฐ, ์์ถ, ์ธ์ฆ, ์์ฒญ ํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ ) ์ ๋ณด, ์๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด, ์บ์ ๊ด๋ฆฌ ์ ๋ณด ๋ฑ๋ฑ ํ์ํ ๋ฉํ์ ๋ณด๊ฐ ๋ชจ๋ ๋ค์ด์์.
* ํ์ค ํค๋๊ฐ ๊ต์ฅํ ๋ง์
* ํ์์ ์์์ ํค๋ ์ถ๊ฐ ๊ฐ๋ฅ
๐ message body
* ์ค์ ์ ์กํ ๋ฐ์ดํฐ
* HTML ๋ฌธ์, ์ด๋ฏธ์ง, ์์, JSON ๋ฑ byte๋ก ํํํ ์ ์๋ ๋ชจ๋ ๋ฐ์ดํฐ ์ ์ก ๊ฐ๋ฅ
'Web > HTTP' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
HTTP ์ํ ์ฝ๋ (0) | 2022.01.11 |
---|---|
HTTP API ์ค๊ณ ์์ (0) | 2022.01.11 |
HTTP ๋ฉ์๋์ ํ์ฉ (0) | 2022.01.10 |
URI์ ์น ๋ธ๋ผ์ฐ์ ์์ฒญ ํ๋ฆ (0) | 2022.01.10 |
HTTP์ ๊ธฐ์ด, ์ธํฐ๋ท ๋คํธ์ํฌ (0) | 2021.12.13 |