HTTP ์ญ์ฌ
์์ฉ๊ณ์ธต์ ์ํ๋ HTTP, ์ด๋ ์น ์ฌ์ดํธ๋ฅผ ์ด์ฉํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
HTTP/ 1.1 ~ HTTP/2 ๋ TCP ๊ธฐ๋ฐ ํ๋กํ ์ฝ,
HTTP/3 ๋ UDP ๊ธฐ๋ฐ ํ๋กํ ์ฝ
HTTP ํน์ง
- ํด๋ผ์ด์ธํธ ์๋ฒ ๊ตฌ์กฐ = ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์์ฒญ์ ๋ณด๋ด๋ฉด ์๋ฒ๋ ๊ทธ์ ๋ํ ์๋ต์ ๋ณด๋ธ๋ค.
- ๋ฌด์ํ์ฑ ํ๋กํ ์ฝ (stateless) = ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์ ์ํ๋ฅผ ๋ณด์กดํ์ง ์๋๋ค. (ํด๋ผ์ด์ธํธ๊ฐ ๊ธฐ์ตํด์ ๋ฐ์ดํฐ ์ ์ก)
- ์ฅ์ : ์๋ฒ ํ์ฅ์ฑ ๋์(์ค์ผ์ผ ์์)
- ๋จ์ : ํด๋ผ์ด์ธํธ๊ฐ ์ถ๊ฐ ๋ฐ์ดํฐ ์ ์ก,
๋ก๊ทธ์ธ์ด ํ์ ์๋ ๋จ์ํ ์๋น์ค ์๊ฐ ํ๋ฉด ๊ฐ์ ๊ฒฝ์ฐ์๋ ๋ฌด์ํ๋ก ์ค๊ณํ ์ ์์ง๋ง, ๋ก๊ทธ์ธ์ด ํ์ํ ์๋น์ค๋ผ๋ฉด ์ ์ ์ ์ํ๋ฅผ ์ ์งํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ธ๋ผ์ฐ์ ์ฟ ํค, ์๋ฒ ์ธ์ , ํ ํฐ ๋ฑ์ ์ด์ฉํด ์ํ๋ฅผ ์ ์งํ๋ค.
- ๋น์ฐ๊ฒฐ์ฑ (connectionless) = ์ฐ๊ฒฐ์ ์ ์งํ์ง ์๋๋ค. (์ค์ ๋ก ์์ฒญ์ ์ฃผ๊ณ ๋ฐ์ ๋๋ง ์ฐ๊ฒฐ์ ์ ์งํ๊ณ ์๋ต์ ์ฃผ๊ณ ๋๋ฉด TCP/IP ์ฐ๊ฒฐ์ ๋๋๋ค. ์ต์ํ์ ์์์ผ๋ก ์๋ฒ ์ ์ง๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ค. )
- ์ฅ์ : ํธ๋ํฝ์ด ๋ง์ง ์๊ณ , ๋น ๋ฅธ ์๋ต์ ์ ๊ณตํ ์ ์๋ ๊ฒฝ์ฐ, ๋น์ฐ๊ฒฐ์ฑ์ ํน์ง์ ํจ์จ์ ์ผ๋ก ์๋ํ๋ค.
- ๋จ์ : ํธ๋ํฝ์ด ๋ง๊ณ , ํฐ ๊ท๋ชจ์ ์๋น์ค๋ฅผ ์ด์ํ ๋๋ ๋น์ฐ๊ฒฐ์ฑ์ ํ๊ณ๊ฐ ๋ํ๋๋ค.
1. TCP/IP ์ฐ๊ฒฐ์ (3 way handshake) ์๊ฐ ์ถ๊ฐ
2. ์น ๋ธ๋ผ์ฐ์ ๋ก ์ฌ์ดํธ๋ฅผ ์์ฒญํ๋ฉด html, css, js ๋ฑ ๋ง์ ์์์ด ํจ๊ป ๋ค์ด๋ก๋ ๋๋ค.
๐ HTTP ์ง์ ์ฐ๊ฒฐ(persistent connections) ๋ก ๋ฌธ์ ํด๊ฒฐ
์ฐ๊ฒฐ์ด ์ด๋ฃจ์ด์ง๊ณ ๋ ๋ค, ๊ฐ๊ฐ์ ์์๋ค์ ์์ฒญํ๊ณ ๋ชจ๋ ์์์ ๋ํ ์๋ต์ด ๋์์จ ํ์ ์ฐ๊ฒฐ์ ์ข ๋ฃํ๋ค.
- HTTP ๋ฉ์ธ์ง
- ๋จ์ํจ, ํ์ฅ ๊ฐ๋ฅ
HTTP ๋ฉ์ธ์ง ( HTTP ํค๋ & ๋ฐ๋)
- HTTP ๋ฐ๋ : ๋ฐ์ดํฐ ๋ฉ์์ง ๋ณธ๋ฌธ์ ํตํด ํํ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ค. (๋ฐ์ดํฐ๋ฅผ ์ค์ด๋๋ฅด๋ ๋ถ๋ถ : ํ์ด๋ก๋)
*ํํ์ ์์ฒญ์ด๋ ์๋ต์์ ์ ๋ฌํ ์ค์ ๋ฐ์ดํฐ๋ฅผ ๋ปํ๋ฉฐ ํํ ํค๋๋ ํํ ๋ฐ์ดํฐ๋ฅผ ํด์ํ ์ ์๋ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ค.
- HTTP ํค๋ : HTTP ์ ์ก์ ํ์ํ ๋ชจ๋ ๋ถ๊ฐ์ ๋ณด๋ฅผ ๋ด๋๋ค.
ex) ๋ฉ์ธ์ง ๋ฐ๋์ ๋ด์ฉ, ๋ฉ์ธ์ง ๋ฐ๋์ ํฌ๊ธฐ, ์์ถ, ์ธ์ฆ, ์์ฒญ ํด๋ผ์ด์ธํธ, ์๋ฒ ์ ๋ณด, ์บ์ ๊ด๋ฆฌ ์ ๋ณด...
- HTTP ํค๋ ํ์
<field-name> : <field-value>
(field-name์ ๋์๋ฌธ์ ๊ตฌ๋ถ ์๋ค. )
ํํ ํค๋
- Content-Type : ํํ ๋ฐ์ดํฐ์ ํ์ / ๋ฏธ๋์ด ํ์ , ๋ฌธ์ ์ธ์ฝ๋ฉ
- Content-Encoding : ํํ ๋ฐ์ดํฐ์ ์์ถ ๋ฐฉ์ / ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ๊ณณ์์ ์์ถ ํ ์ธ์ฝ๋ฉ ํค๋ ์ถ๊ฐ & ๋ฐ์ดํฐ ์ฝ๋ ์ชฝ์์ ์ธ์ฝ๋ฉ ํค๋์ ์ ๋ณด๋ก ์์ถ ํด์
- Content-Language : ํํ ๋ฐ์ดํฐ์ ์์ฐ ์ธ์ด
- Content-Length : ํํ ๋ฐ์ดํฐ์ ๊ธธ์ด / ๋ฐ์ดํธ ๋จ์ / transfer-encoding ์ฌ์ฉํ๋ฉด content-length ์ฌ์ฉํ๋ฉด ์๋๋ค. (transfer-encoding์ chunked ๋ฐฉ์์ธ๋ฐ ๋ง์ ์์ ๋ฐ์ดํฐ๋ฅผ ๋ถํ ํด์ ๋ณด๋ด๊ธฐ ๋๋ฌธ์ ์ ์ฒด ๋ฐ์ดํฐ์ ํฌ๊ธฐ๋ฅผ ์ ์ ์๋ค. )
ํํ ํค๋๋ ์์ฒญ, ์๋ต ๋ ๋ค ์ฌ์ฉ.
์์ฒญ(Request)์์ ์ฌ์ฉ๋๋ ํค๋
* From: ์ ์ ์์ด์ ํธ์ ์ด๋ฉ์ผ ์ ๋ณด
๊ฒ์ ์์ง์์ ์ฃผ๋ก ์ฌ์ฉํ๊ณ , ์ผ๋ฐ์ ์ผ๋ก ์ ์ฌ์ฉํ์ง ์๋๋ค.
* Referer: ์ด์ ์น ํ์ด์ง ์ฃผ์
ํ์ฌ ์์ฒญ๋ ํ์ด์ง์ ์ด์ ์น ํ์ด์ง ์ฃผ์,
a -> b ๋ก ์ด๋ํ๋ ๊ฒฝ์ฐ, b๋ฅผ ์์ฒญํ ๋ Referer: a๋ฅผ ํฌํจํด์ ์์ฒญํ๋ค.
์ ์ ๊ฒฝ๋ก ์์ง ๊ฐ๋ฅํ๋ค.
* User-Agent: ์ ์ ์์ด์ ํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด
์ด๋ค ์ข ๋ฅ์ ๋ธ๋ผ์ฐ์ ์์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋์ง ํ์ ๊ฐ๋ฅํ๋ค.
ํต๊ณ ์ ๋ณด
* Host: ์์ฒญํ ํธ์คํธ ์ ๋ณด(๋๋ฉ์ธ) / ํ์ ํค๋
ํ๋์ ์๋ฒ๊ฐ ์ฌ๋ฌ ๋๋ฉ์ธ์ ์ฒ๋ฆฌํด์ผ ํ ๋ ํธ์คํธ ์ ๋ณด๋ฅผ ๋ช ์ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
ํ๋์ IP ์ฃผ์์ ์ฌ๋ฌ ๋๋ฉ์ธ์ด ์ ์ฉ๋์ด ์์ ๋ ํธ์คํธ ์ ๋ณด๋ฅผ ๋ช ์ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
(Host ์ ๋ณด๊ฐ ์๋ค๋ฉด IP ์ฃผ์๋ง์ ๊ฐ์ง๊ณ ์ด๋ค ๋๋ฉ์ธ์ผ๋ก ์์ฒญ์ด ์๋์ง ํ์ธํ๊ธฐ ์ด๋ ต๋ค. )
* Origin: ์๋ฒ๋ก POST ์์ฒญ์ ๋ณด๋ผ ๋, ์์ฒญ์ ์์ํ ์ฃผ์๋ฅผ ๋ํ๋
์ฌ๊ธฐ์ ์์ฒญ์ ๋ณด๋ธ ์ฃผ์์ ๋ฐ๋ ์ฃผ์๊ฐ ๋ค๋ฅด๋ฉด CORS ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
์๋ต ํค๋์ access-control-allow-origin ๊ณผ ๊ด๋ จ
* Authorization: ์ธ์ฆ ํ ํฐ(e.g. JWT)์ ์๋ฒ๋ก ๋ณด๋ผ ๋ ์ฌ์ฉํ๋ ํค๋
ํ ํฐ์ ์ข ๋ฅ + ์ค์ ํ ํฐ ๋ฌธ์๋ฅผ ์ ์ก
ex) Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l
์๋ต(Response)์์ ์ฌ์ฉ๋๋ ํค๋
* Server: ์์ฒญ์ ์ฒ๋ฆฌํ๋ ORIGIN ์๋ฒ์ ์ํํธ์จ์ด ์ ๋ณด
* Date: ๋ฉ์์ง๊ฐ ๋ฐ์ํ ๋ ์ง์ ์๊ฐ
* Location: ํ์ด์ง ๋ฆฌ๋๋ ์
์น ๋ธ๋ผ์ฐ์ ๋ 3xx ์๋ต ๊ฒฐ๊ณผ์ Location ํค๋๊ฐ ์์ผ๋ฉด, Location ์์น๋ก ์๋ ์ด๋
201(created) : Location ๊ฐ์ ์์ฒญ์ ์ํด ์์ฑ๋ ๋ฆฌ์์ค URI
3xx(redirection) : Location ๊ฐ์ ์์ฒญ์ ์๋์ผ๋ก ๋ฆฌ๋๋ ์ ํ๊ธฐ ์ํ ๋์ ๋ฆฌ์์ค๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
* Allow: ํ์ฉ ๊ฐ๋ฅํ HTTP ๋ฉ์๋
405(method not allowed)์์ ์๋ต์ ํฌํจ
ex) Allow : GET, HEAD, PUT
* Retry-After: ์ ์ ์์ด์ ํธ๊ฐ ๋ค์ ์์ฒญ์ ํ๊ธฐ๊น์ง ๊ธฐ๋ค๋ ค์ผ ํ๋ ์๊ฐ
503(service unavailable) : ์๋น์ค๊ฐ ์ธ์ ๊น์ง ๋ถ๋ฅ์ธ์ง ์๋ ค์ค ์ ์์
์ฝํ ์ธ ํ์ ํค๋ = ํด๋ผ์ด์ธํธ๊ฐ ์ ํธํ๋ ํํ ์์ฒญ
Accept : ํด๋ผ์ด์ธํธ๊ฐ ์ ํธํ๋ ๋ฏธ๋์ด ํ์ ์ ๋ฌ
Accept-Charset : ํด๋ผ์ด์ธํธ๊ฐ ์ ํธํ๋ ๋ฌธ์ ์ธ์ฝ๋ฉ
Accept-Encoding : ํด๋ผ์ด์ธํธ๊ฐ ์ ํธํ๋ ์์ถ ์ธ์ฝ๋ฉ
Accept-Language : ํด๋ผ์ด์ธํธ๊ฐ ์ ํธํ๋ ์์ฐ ์ธ์ด / ์ฐ์ ์์ ์์ฒญ๋ ๊ฐ๋ฅ
if) ํ๊ตญ์ด ๋ธ๋ผ์ฐ์ ์์ ํน์ ์น์ฌ์ดํธ์ ์ ์ํ์ ๋ ์ฝํ ์ธ ํ์(Accept-Language)์ด ์ ์ฉ๋์ง ์์๋ค๋ฉด ์๋ฒ๋ ์์ฒญ์ผ๋ก ๋ฐ์ ์ฐ์ ์์๊ฐ ์์ผ๋ฏ๋ก ๊ธฐ๋ณธ ์ธ์ด๋ก ์ค์ ๋ ์์ด๋ก ์๋ตํ๋ค.
if) ํด๋ผ์ด์ธํธ์์ Accept-Language๋ก KO๋ฅผ ์์ฑํด ์์ฒญํ๋ค๋ฉด ์๋ฒ์์๋ ํด๋น ์ฐ์ ์์ ์ธ์ด๋ฅผ ์ง์ํ ์ ์๊ธฐ ๋๋ฌธ์ ํ๊ตญ์ด๋ก ๋ ์๋ต์ ๋๋ ค์ค๋ค.
* ํ์ ํค๋๋ ์์ฒญ์์๋ง ์ฌ์ฉ
์ฐธ๊ณ )
https://en.wikipedia.org/wiki/List_of_HTTP_header_fields
https://developer.mozilla.org/ko/docs/Web/HTTP/Content_negotiation