HTTP
HTTP(HyperText Transfer Protocol)๋ Web(World Wide Web, WWW, W3)์์ ๊ฐ์ฅ ํต์ฌ์ด ๋๋ ํ๋กํ ์ฝ๋ก ์น์์ ์ ๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋๋ก ๋ช ์๋ ํ๋กํ ์ฝ์ ๋๋ค. TCP๋ฅผ ์ฃผ๋ก ์ฌ์ฉํ๋ฉฐ, HTTP/3 ๋ถํด UDP๋ฅผ ํตํ ํต์ ๋ ์ง์ํ๊ณ ์๊ณ , ๊ธฐ๋ณธ์ ์ผ๋ก 80ํฌํธ์ SSL์ด ์ ์ฉ๋ 443 ํฌํธ(https)๋ฅผ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํฉ๋๋ค.
Version | DT | Desc |
---|---|---|
HTTP/0.9 | TCP | ์ด๊ธฐ HTTP ํ๋กํ ์ฝ, ๋จ์ผ Line, Only GET Method |
HTTP/1.0 | TCP | Header ์ง์, Content-Type, StatusCode |
HTTP/1.1 | TCP | Persistent Connection, Pipelining |
HTTP/2 | TCP | Multiplexed Streams, Header Compression |
HTTP/3 (QUIC) | UDP | QUIC(Quick UDP Internet Connections) |
๐ย Popular Version
ํ์ฌ ๊ฐ์ฅ ๋์ค์ ์ผ๋ก ์ฌ์ฉ๋๋๊ฑด HTTP/1.1๊ณผ HTTP/2 ์ ๋๋ค. ์ค์ ๋ก HTTP/2์ ๊ฒฝ์ฐ๋ 1.1์ ํ์ฅ ๋ฒ์ ์ ๋๋์ด๊ธฐ ๋๋ฌธ์ ์ค์ง์ ์ผ๋ก ํ์ฌ ์น์ ์ง๋ฐฐํ๋๊ฑด HTTP/1.1์ ๋๋ค. ๋ค๋ง HTTP/2๋ฅผ ์ง์ํ๋ ์๋น์ค๋ ๋์ด๋๊ณ , ๊ฐ HTTP ๋ฒ์ ์์ ์ง์ํ๊ณ ์ฒ๋ฆฌํ ์ ์๋ ๊ฒ๋ค์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ์น ํ ์คํ ์ ์ํด์ ๊ฐ ๋ฒ์ ์ ํน์ง์ ์์๋๋๋ฅ ์ข์ต๋๋ค.
๐คย Connections
๊ฐ ๋ฒ์ ์์ Connection์ ๋ํ ์ฒ๋ฆฌ๊ฐ ์ค์ ์ ์ผ๋ก ๋ณ๊ฒฝ๋ฉ๋๋ค. ์ฑ๋ฅ์ ์ธ ๋ถ๋ถ์ ํด๊ฒฐํ๊ธฐ ์ํจ์ด๊ฒ ์ง๋ง, ๋ณด์ ํ ์คํ ์ ์ฅ์์ ์ด๋ฐ ์ฒ๋ฆฌ ๋ฐฉ์์์ ๊ณต๊ฒฉ์ด๋ ์ทจ์ฝ์ ์ ํํธ๋ฅผ ์ป์ ์ ์๊ธฐ ๋๋ฌธ์ ์์๋๋ ๊ฒ์ด ์ข์ต๋๋ค.
- HTTP/0.9
- 1 Connection = 1 Req + 1 Res
- HTTP/1.0
- 1 Connection = 1 Req + 1 Res
- HTTP/1.1
- 1 Connection = N Req + N Res
- Pipelining
- Req๋ ๋ณ๋ ฌ, Res๋ ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌ๋จ
- HTTP/2
- 1 Connection = N Req + N Res
- Multiplexed Streams
- Req/Res ๋ชจ๋ ๋ณ๋ ฌ ์ฒ๋ฆฌ
- HTTP/3
- UDP
๐ HTTP/0.9
์ด๊ธฐ HTTP ๋ฒ์ ์ผ๋ก ์์ฒญ์ ํ๋์ Line์ผ๋ก, GET Method๋ง ์ง์ํ์ต๋๋ค. HTTP ํค๋๋ผ๋ ๊ฐ๋ ๋ ์๊ณ ๋จ์ํ ํ์ผ์ ์ฝ์ด์ ๋ณด์ฌ์ฃผ๋ ์ ๋ณด์ ์ญํ ๋ง ์ํํฉ๋๋ค.
GET /app
<html>
response!
</html>
๐ย HTTP/1.0
HTTP ํค๋๋ผ๋ ๊ฐ๋ ์ด ๋์ ๋์ด Request/Response ๋ด ํค๋๋ฅผ ํตํด ์ฌ๋ฌ๊ฐ์ง ๋ฉํ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋๋ก ๊ตฌ์ฑ๋์์ต๋๋ค. ์ด๋๋ถํฐ Request ๋ด ๋ฒ์ ์ ๋ณด๊ฐ ํฌํจ๋์๊ณ Response์ Status Code๋ฅผ ํตํด ์ฒ๋ฆฌ ์ํฉ์ ํ์ ํ ์ ์๊ฒ ๋์์ต๋๋ค.
GET /app HTTP/1.0
User-Agent: MyCustomApp
200 OK
Content-Type: text/html
<html>
response!
</html>
์์ ์์ฒญ(Req-Res)๋ฅผ ์ฒ๋ฆฌํด์ผ ๋ค์ ์์ฒญ์ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ๋ฆฌ์์ค๋ฅผ ๊ฐ์ ธ์ค๋ ๊ตฌ๊ฐ์์ ๋๋ ์ด๊ฐ ์ปค์ง๋ฉด ์ ์ฒด์ ์ผ๋ก ์๋์ ์ํฅ์ ๋ฐ๋ ๋จ์ ์ด ์์ต๋๋ค.
๐ย HTTP/1.1
1.1 ๋ถํด Persistent Connect์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค. ๊ทธ๋์ ์ง์ ํ ์๊ฐ ๋์ Connection์ ์ข ๋ฃํ์ง ์๊ณ ์ ์ง์์ผ ํ๋์ ์ปค๋ฅ์ ์ ์ฌ๋ฌ๊ฐ์ ์์ฒญ์ ์ ์ก(Pipeline)ํ ์ ์๋๋ก ๋ณ๊ฒฝ๋์์ต๋๋ค. ์ฌ๋ฌ๊ฐ์ ์์ฒญ์ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋์ง ์๊ณ ๊ฐ๊ฐ์ Response๋ฅผ ๊ฐ์ง๋๋ค.
GET /app HTTP/1.1
User-Agent: MyCustomApp
200 OK
Connection: Keep-Alive
Content-Encoding: gzip
Keep-Alive: timeout=5, max=1000
Content-Type: text/html; charset=utf-8
<html>
response!
</html>
Pipeline์ ํตํด ์ฌ๋ฌ ์์ฒญ(Req)์ ๋์์ ์ ์กํ ์ ์๊ธฐ ๋๋ฌธ์ ๋น ๋ฅด๊ฒ ์ฌ๋ฌ ๋ฆฌ์์ค๋ฅผ ํธ์ถํ๊ณ ์ฒ๋ฆฌํ ์๊ฒ ๋ฉ๋๋ค. ์ด๋ก์ธํด 1.0์ ์๋ ๋ฌธ์ ๊ฐ ์ค์ด๋ค์์ฃ . ๋ค๋ง Response์ ์ฒ๋ฆฌ๋ ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค.
๐ย HTTP/2
HTTP2 ๋ถํด Multiplexed Stream, ์ฆ ๊ฐ ์์ฒญ์ Stream์ผ๋ก ๊ตฌ์ฑํด์ ๋ณ๋ ฌ์ ์ธ ์ฒ๋ฆฌ๋ฅผ ์ง์ํฉ๋๋ค. ๊ทธ๋์ Req, Res ๋ชจ๋ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
๐ย HTTP/3
QUIC(Quick UDP Internet Connections)๋ฅผ ๊ธฐ๋ฐ์ผ๋ก UDP๋ฅผ ์ฌ์ฉํ๋ฉฐ TCP์ ๊ตฌ์กฐ์ ๋ฌธ์ (3-way handshake์ ์ค๋ฒํค๋)๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ฒ์ ์ ๋๋ค. ๊ธฐ์กด HTTP ๋ฒ์ ์์ TCP์ Stream์ด ์ฒด์ธ์ผ๋ก ์ฐ๊ฒฐ๋๋ ๊ฒ๊ณผ ๋ค๋ฅด๊ฒ HTTP/3์์ UDP Strream ๋น ๊ฐ๊ฐ ๋ ๋ฆฝ๋ ์ฒด์ธ์ ๊ฐ์ง๋๋ค.