๐ HTTP ํค๋
โ ์ฉ๋
- HTTP ์ ์ก์ ํ์ํ ๋ชจ๋ ๋ถ๊ฐ์ ๋ณด๋ฅผ ๋ด์
- e.g ๋ฉ์ธ์ง ๋ฐ๋์ ๋ด์ฉ, ๋ฉ์ธ์ง ๋ฐ๋์ ํฌ๊ธฐ, ์์ถ, ์ธ์ฆ, ์์ฒญ ํด๋ผ์ด์ธํธ, ์๋ฒ ์ ๋ณด, ์บ์ ๊ด๋ฆฌ ์ ๋ณด ๋ฑ
- ํ์ค ํค๋ ๋๋ฌด ๋ง์
- ํ์์ ์์์ ํค๋ ์ถ๊ฐ ๊ฐ๋ฅ
โ ๋ถ๋ฅ - RFC2616(๊ณผ๊ฑฐ) ํ๊ธฐ
- General ํค๋ : ์์ฒญ ๋ฉ์ธ์ง, ์๋ต ๋ฉ์ธ์ง์ ์๊ด์์ด ๋ฉ์ธ์ง ์ ์ฒด์ ์ ์ฉ๋๋ ์ ๋ณด e.g. Connection: close
- Request ํค๋ : ์์ฒญ ์ ๋ณด e.g. User-Agent: Mozilla/5.0 (Macintosh; ..) ์น๋ธ๋ผ์ฐ์ ์ ๋ณด
- Response ํค๋ : ์๋ต ์ ๋ณด e.g. Server: Apache
- Entity ํค๋ : ์ํฐํฐ ๋ฐ๋ ์ ๋ณด e.g. Content-Type: text/html, Content-Length: 3423
โ RFC723x ๋ณํ (์ต์ )
- ์ํฐํฐ -> ํํ(Representation)
- ํํ(Representation) = ํํ ๋ฉํ๋ฐ์ดํฐ + ํํ ๋ฐ์ดํฐ
- ํํ : ์์ฒญ์ด๋ ์๋ต์์ ์ ๋ฌํ ์ค์ ๋ฐ์ดํฐ
- ํํ ํค๋๋ ํํ ๋ฐ์ดํฐ๋ฅผ ํด์ํ ์ ์๋ ์ ๋ณด ์ ๊ณต
- ๋ฉ์ธ์ง ๋ฐ๋๋ฅผ ํตํด ํํ ๋ฐ์ดํฐ ์ ๋ฌ
- ๋ฉ์ธ์ง ๋ฐ๋๋ฅผ ํ์ด๋ก๋ ๋ผ๊ณ ๋ ํจ
๐ ํํ ํค๋์ ๊ตฌ์ฑ ์์
โ Content-Type : ํํ ๋ฐ์ดํฐ์ ํ์
- ๋ฏธ๋์ด ํ์ , ๋ฌธ์ ์ธ์ฝ๋ฉ
- e.g. text/html; charset=utf-8, application/json, image/png
โ Content-Encoding : ํํ ๋ฐ์ดํฐ์ ์์ถ ๋ฐฉ์
- ํํ ๋ฐ์ดํฐ๋ฅผ ์์ถํ๊ธฐ ์ํด ์ฌ์ฉ
- ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ๊ณณ์์ ์์ถ ํ ์ธ์ฝ๋ฉ ํค๋ ์ถ๊ฐ
- ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ์ชฝ์์ ์ธ์ฝ๋ฉ ํค๋์ ์ ๋ณด๋ก ์์ถ ํด์
- e.g. gzip, deflate, identity
โ Content-Language : ํํ ๋ฐ์ดํฐ์ ์์ฐ ์ธ์ด
- ํํ ๋ฐ์ดํฐ์ ์์ฐ ์ธ์ด๋ฅผ ํํ
- e.g. ko, en, en-US
โ Content-Length : ํํ ๋ฐ์ดํฐ์ ๊ธธ์ด
- ๋ฐ์ดํธ ๋จ์
- ์ ์ก ์ฝ๋ฉ(Transfer-Encoding)์ ์ฌ์ฉํ๋ฉด Content-Length๋ฅผ ์ฌ์ฉํ๋ฉด ์๋จ
๐ ํ์(์ฝํ ์ธ ๋ค๊ณ ์์์ด์ )
ํด๋ผ์ด์ธํธ๊ฐ ์ ํธํ๋ ํํ์ ์์ฒญํ ์ ์๊ณ ์๋ฒ๋ ์์ฒญ ์ฌํญ์ ์ต๋ํ ๋ง์ถฐ์ค ์ ์๋ค. ํ์ ํค๋๋ ์์ฒญ ์์๋ง ์ฌ์ฉํ๋ค.
- Accept : ํด๋ผ์ด์ธํธ๊ฐ ์ ํธํ๋ ๋ฏธ๋์ด ํ์ ์ ๋ฌ
- Accept-Charset : ํด๋ผ์ด์ธํธ๊ฐ ์ ํธํ๋ ๋ฌธ์ ์ธ์ฝ๋ฉ
- Accept-Encoding : ํด๋ผ์ด์ธํธ๊ฐ ์ ํธํ๋ ์์ถ ์ธ์ฝ๋ฉ
- Accept-Language : ํด๋ผ์ด์ธํธ๊ฐ ์ ํธํ๋ ์์ฐ ์ธ์ด
โ ํ์๊ณผ ์ฐ์ ์์
- Quality Values(q) ๊ฐ ์ฌ์ฉ
- 0~1 ํด์๋ก ๋์ ์ฐ์ ์์ (์๋ต์ 1)
๐ ์ ์ก ๋ฐฉ์
โ ๋จ์ ์ ์ก
- Content-Length๋ฅผ ์ ์ ์์ ๋ ์ฌ์ฉ
- ํ๋ฒ์ ์์ฒญํ๊ณ ํ๋ฒ์ ๋ฐ์
โ ์์ถ ์ ์ก
- Content-encoding์ ์ถ๊ฐํ์ฌ ์์ถ ์ ๋ณด์ ํจ๊ป ๋ฉ์ธ์ง ๋ฐ๋๋ฅผ ์์ถ
- ๋ณดํต ์ฉ๋์ด ์ ๋ฐ ์ด์ ์ค์ด๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์
โ ๋ถํ ์ ์ก
- Transfer Encoding: chunked ์ฌ์ฉ
- ๋ฉ์ธ์ง ๋ฐ๋๋ฅผ ๋๋์ด์ ๋ณด๋
- ๊ฐ chunk๋ง๋ค ๊ธธ์ด๊ฐ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ Content-Length ์ ๋ณด๋ฅผ ๋ณด๋ด๋ฉด ์๋จ -> ์ ์ฒด ๊ธธ์ด ์์ ๋ถ๊ฐ
โ ๋ฒ์ ์ ์ก
- ๋ฆฌ์์ค๋ฅผ ์ฌ์์ฒญํ ๋ ์ ์ก๋์ง ์์ ์ผ๋ถ(๋ฒ์)๋ง ์์ฒญํ ์ ์์
๐ ์ผ๋ฐ ์ ๋ณด
โ From
- ์ ์ ์์ด์ ํธ์ ์ด๋ฉ์ผ ์ ๋ณด
- ๊ฒ์ ์์ง ๊ฐ์ ๊ณณ์์ ์ฃผ๋ก ์ฌ์ฉ
- ์์ฒญ์์ ์ฌ์ฉ
- ์ผ๋ฐ์ ์ผ๋ก ์ ์ฌ์ฉ๋์ง ์์
โ Referer
- ๋ง์ด ์ฌ์ฉํจ
- ํ์ฌ ์์ฒญ๋ ํ์ด์ง์ ์ด์ ์น ํ์ด์ง ์ฃผ์ (๋ค๋ก๊ฐ๊ธฐ ๊ฐ์ ๋๋)
- A -> B๋ก ์ด๋ํ๋ ๊ฒฝ์ฐ B๋ฅผ ์์ฒญํ ๋ Referer: A๋ฅผ ํฌํจํด์ ์์ฒญ
- ์ ์ ๊ฒฝ๋ก๋ฅผ ๋ถ์ํ ๋ ๋ง์ด ์ฌ์ฉ
- ์์ฒญ์์ ์ฌ์ฉ
โ User Agent
- ํด๋ผ์ด์ธํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด(์น ๋ธ๋ผ์ฐ์ ์ ๋ณด ๋ฑ)
- ํต๊ณ ์ ๋ณด ์ถ์ถ์ ์ฌ์ฉ
- ์ด๋ค ์ข ๋ฅ์ ๋ธ๋ผ์ฐ์ ์์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋์ง ํ์ ๊ฐ๋ฅ
- ์์ฒญ์์ ์ฌ์ฉ
โ Server
- ์์ฒญ์ ์ฒ๋ฆฌํ๋ ORIGIN ์๋ฒ์ ์ํํธ์จ์ด ์ ๋ณด
- ORIGIN ์๋ฒ : ํ๋ก์ ์๋ฒ, ์บ์ ์๋ฒ ๋ฑ์ด ์๋ ์ค์ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ์๋ฒ
- ์๋ต์์ ์ฌ์ฉ
โ Date
- ๋ฉ์ธ์ง๊ฐ ๋ฐ์ํ ๋ ์ง์ ์๊ฐ
- ์๋ต์์ ์ฌ์ฉ
๐ ํน๋ณํ ์ ๋ณด
โ Host
- ์์ฒญํ ํธ์คํธ ์ ๋ณด(๋๋ฉ์ธ)
- ์์ฒญ์์ ์ฌ์ฉ
- ํ์ ๊ฐ
- ํ๋์ ์๋ฒ๊ฐ ์ฌ๋ฌ ๋๋ฉ์ธ์ ์ฒ๋ฆฌํด์ผ ํ ๋ ์ฌ์ฉ
- ํ๋์ IP์ฃผ์์ ์ฌ๋ฌ ๋๋ฉ์ธ์ด ์ ์ฉ๋์ด ์์๋ ์ฌ์ฉ
โ Location
- ํ์ด์ง ๋ฆฌ๋ค์ด๋ ์
- ์น ๋ธ๋ผ์ฐ์ ๋ 3xx ์๋ต ๊ฒฐ๊ณผ์ Location ํค๋๊ฐ ์์ผ๋ฉด Location ์์น๋ก ์๋ ์ด๋(๋ฆฌ๋ค์ด๋ ํธ)
- 201 (Created) : Location ๊ฐ์ ์์ฒญ์ ์ํด ์์ฑ๋ ๋ฆฌ์์ค URI
- 3xx (Redirection) : Location ๊ฐ์ ์์ฒญ์ ์๋์ผ๋ก ๋ฆฌ๋ค์ด๋ ์ ํ๊ธฐ ์ํ ๋์ ๋ฆฌ์์ค๋ฅผ ๊ฐ๋ฆฌํด
โ Allow
- ํ์ฉ ๊ฐ๋ฅํ HTTP ๋ฉ์๋๋ฅผ ๋ํ๋
- 405 Method Not Allowed์์ ์๋ต์ ํฌํจํด์ผํจ
- POST๋ฅผ ๋นผ๊ณ ์์ฒญํ๋ค๋ฉด -> Allow : GET, HEAD, PUT
- ๋ง์ด ๊ตฌํ๋์ด ์์ง๋ ์์
โ Retry-After
- ์ ์ ์์ด์ ํธ๊ฐ ๋ค์ ์์ฒญ์ ํ๊ธฐ๊น์ง ๊ธฐ๋ค๋ ค์ผ ํ๋ ์๊ฐ
- 503 (Service Unavailable): ์๋น์ค๊ฐ ์ธ์ ๊น์ง ๋ถ๋ฅ์ธ์ง ์๋ ค์ค ์ ์์
- ์ด๋จ์, ๋ ์ง ๋จ์๋ก ํ๊ธฐํ ์ ์์
๐ ์ธ์ฆ
- Authorization
- ํด๋ผ์ด์ธํธ ์ธ์ฆ ์ ๋ณด๋ฅผ ์๋ฒ์ ์ ๋ฌ
- ์ธ์ฆ์ ์ข ๋ฅ๋ง๋ค value๊ฐ ๋ค๋ฆ
- WWW-Authenticate
- ๋ฆฌ์์ค ์ ๊ทผ์ ํ์ํ ์ธ์ฆ ๋ฐฉ๋ฒ ์ ์
- 401 Unauthorized ์๋ต๊ณผ ํจ๊ป ์ฌ์ฉ
- ์ ๋๋ก ๋ ์ธ์ฆ ์ ๋ณด๋ฅผ ๋ง๋ค๊ธฐ ์ํ ์ ๋ณด๋ฅผ ์ ๊ณต
๐ ์ฟ ํค
- Set-Cookie : ์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ก ์ฟ ํค ์ ๋ฌ(์๋ต)
- Cookie : ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์์ ๋ฐ์ ์ฟ ํค๋ฅผ ์ ์ฅํ๊ณ HTTP ์์ฒญ์ ์๋ฒ๋ก ์ ๋ฌ
โ ์ฟ ํค๋ฅผ ๋ฏธ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
- ํด๋ผ์ด์ธํธ๊ฐ ๋ก๊ทธ์ธ์ ํ๊ณ ์๋ก์ด ์์ฒญ์ ํ๋ฉด ์๋ฒ๋ ๋ก๊ทธ์ธํ ์ํ๋ฅผ ๊ตฌ๋ถํ์ง ๋ชปํจ
- HTTP๋ ๋ฌด์ํ ํ๋กํ ์ฝ์ด๊ธฐ ๋๋ฌธ
- ํด๋ผ์ด์ธํธ๊ฐ ๋ค์ ์์ฒญํ๋ฉด ์๋ฒ๋ ์ด์ ์์ฒญ์ ๊ธฐ์ตํ์ง ๋ชปํจ
- ํด๋ผ์ด์ธํธ์ ์๋ฒ๋ ์๋ก ์ํ๋ฅผ ์ ์ฅํ์ง ์์
์ด์ ๋ํ ๋์์ผ๋ก ๋ชจ๋ ์์ฒญ์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ํฌํจ์์ผ ๋ณด๋ธ๋ค๊ณ ์๊ฐํด๋ณด์ → ๋ณด์ ๋ฌธ์ ๋ฐ์
โ ์ฟ ํค๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
์ฌ์ฉ์ ๋ก๊ทธ์ธ ์ธ์ ๊ด๋ฆฌ, ๊ด๊ณ ์ ๋ณด ํธ๋ํน์ ์ฌ์ฉ๋จ
1๏ธโฃ ๋ก๊ทธ์ธ
- ์น ๋ธ๋ผ์ฐ์ ์์ ํด๋ผ์ด์ธํธ๊ฐ ๋ก๊ทธ์ธ์ ํ๊ณ ์์ฒญ ๋ฉ์ธ์ง๋ฅผ ๋ณด๋
- ์๋ฒ๋ Set-Cookie ํค๋๋ฅผ ๋ง๋ค์ด์ ์ ๋ณด๋ฅผ ๋ด์ ์๋ต
- ์น ๋ธ๋ผ์ฐ์ ๋ด๋ถ์ ์ฟ ํค ์ ์ฅ์์ ์๋ต ๋ฉ์ธ์ง๋ก๋ถํฐ ๋ฐ์ ์ ๋ณด๊ฐ ์ ์ฅ๋จ
2๏ธโฃ ๋ก๊ทธ์ธ ์ดํ welcome ํ์ด์ง ์ ๊ทผ
- ์ด ํ ์น ๋ธ๋ผ์ฐ์ ๋ ์๋ฒ์ ์์ฒญ์ ๋ณด๋ผ ๋๋ง๋ค ์ฟ ํค ์ ์ฅ์์์ ์ฟ ํค๋ฅผ ์กฐํํจ
- ์์ฒญ ๋ฉ์ธ์ง๋ฅผ ๋ณด๋ผ ๋ Cookie ํค๋ ์ถ๊ฐํด์ ์๋ฒ์ ์ ์ก (์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ๋ URL์ ์ถ๊ฐํ ํ์๊ฐ ์์)
3๏ธโฃ ๋ชจ๋ ์์ฒญ์ ์ฟ ํค ์ ๋ณด ์๋ ํฌํจ
- ์ฟ ํค ์ ๋ณด๋ ํญ์ ์๋ฒ์ ์ ์ก๋จ
- ๋ณด์์ ๋ฌธ์ ๊ฐ ์์ ์ ์์ผ๋ฏ๋ก ์ ์ฝ ๋ฐฉ๋ฒ ์กด์ฌ
- ์ ๋ณด๋ฅผ ๊ทธ๋๋ก ์ ๋ฌํ์ง ์๊ณ ์๋ฒ์์ ์ธ์ ํค๋ฅผ ๋ง๋ค์ด์ ํด๋ผ์ด์ธํธ์๊ฒ ๋ฐํํด์ค
- ๋คํธ์ํฌ ํธ๋ํฝ์ ์ถ๊ฐ๋ก ์ ๋ฐํ ์ ์์ด ์ต์ํ์ ์ ๋ณด๋ง ์ฌ์ฉํจ (์ธ์ id, ์ธ์ฆ ํ ํฐ)
- ์์ฒญํ ๋๋ง๋ค ์ฟ ํค ์ ๋ณด๋ฅผ ์๋ฒ์ ์ ์กํ์ง ์๊ณ , ์น ๋ธ๋ผ์ฐ์ ๋ด๋ถ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ํ์ํ ๋๋ง ์ฌ์ฉํ๊ณ ์ถ์ผ๋ฉด ์น ์คํ ๋ฆฌ์ง ์ฌ์ฉ
โป ์ฃผ์ โป : ๋ณด์์ ๋ฏผ๊ฐํ ์ ๋ณด(e.g. ์ฃผ๋ฏผ๋ฒํธ, ์ ์ฉ์นด๋ ๋ฒํธ ๋ฑ)๋ ์ ์ฅํ๋ฉด ์๋จ
โ ์ฟ ํค ์๋ช ์ฃผ๊ธฐ
- Set-Cookie: expires=Sat, 26-Dec-2020 04:39:21 GMT
- ๋ง๋ฃ์ผ์ด ๋๋ฉด ์ฟ ํค ์ญ์
- Set-Cookie: max-age=3600 (3600์ด)
- ์ง์ ์๊ฐ์ด ์ง๋๊ฑฐ๋ 0 ๋๋ ์์๋ฅผ ์ง์ ํ๋ฉด ์ฟ ํค ์ญ์
- ์ธ์ ์ฟ ํค : ๋ง๋ฃ ๋ ์ง๋ฅผ ์๋ตํ๋ฉด ๋ธ๋ผ์ฐ์ ์ข ๋ฃ์ ๊น์ง๋ง ์ ์ง
- ์์ ์ฟ ํค : ๋ง๋ฃ ๋ ์ง๋ฅผ ์ ๋ ฅํ๋ฉด ํด๋น ๋ ์ง๊น์ง ์ ์ง
โ ์ฟ ํค ๋๋ฉ์ธ ์ง์
- e.g. domain=example.org
- ๋ช
์ํ ๊ฒฝ์ฐ : ๋ช
์ํ ๋ฌธ์ ๊ธฐ์ค ๋๋ฉ์ธ + ์๋ธ ๋๋ฉ์ธ ํฌํจ
- example.org, dev.example.org์์ ์ฟ ํค ์ ๊ทผ
- ์๋ตํ ๊ฒฝ์ฐ : ํ์ฌ ๋ฌธ์ ๊ธฐ์ค ๋๋ฉ์ธ๋ง ์ ์ฉ
- example.org์์๋ง ์ฟ ํค ์ ๊ทผ
- dev.example.org๋ ์ฟ ํค ๋ฏธ์ ๊ทผ
โ ์ฟ ํค ๊ฒฝ๋ก ์ง์
- e.g. paht=/home
- ์ด ๊ฒฝ๋ก๋ฅผ ํฌํจํ ํ์ ๊ฒฝ๋ก ํ์ด์ง๋ง ์ฟ ํค ์ ๊ทผ
- ์ผ๋ฐ์ ์ผ๋ก path=/ ๋ฃจํธ๋ก ์ง์
โ ์ฟ ํค ๋ณด์ ์ค์
๐ป Secure
- ์ค์ ํด์ฃผ์ง ์์ผ๋ฉด ์ฟ ํค๋ http, https๋ฅผ ๊ตฌ๋ถํ์ง ์๊ณ ์ ์ก
- Secure๋ฅผ ์ ์ฉํ๋ฉด https์ธ ๊ฒฝ์ฐ์๋ง ์ ์ก
๐ป HttpOnly
- XSS ๊ณต๊ฒฉ ๋ฐฉ์ง
- ์๋ฐ์คํฌ๋ฆฝํธ๋ก(doument.cookie)๋ก ํด๋น ๋ก์ปฌ PC์ ์ ์ฅ๋ ์ฟ ํค๋ฅผ ์กฐํํ๋ ๊ธฐ๋ฅ์ ๋ง์
- HTTP ์ ์ก์๋ง ์ฌ์ฉ (์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ ์ธ๋ถ ํ๋ก๊ทธ๋จ ์ ๊ทผ ๋ถ๊ฐ)
๐ป SameSite
- XSRF ๊ณต๊ฒฉ ๋ฐฉ์ง
- ์์ฒญ ๋๋ฉ์ธ๊ณผ ์ฟ ํค์ ์ค์ ๋ ๋๋ฉ์ธ์ด ๊ฐ์ ๊ฒฝ์ฐ์๋ง ์ฟ ํค ์ ์ก
๊ฐ์ ์๋ฃ
๋ชจ๋ ๊ฐ๋ฐ์๋ฅผ ์ํ HTTP ์น ๊ธฐ๋ณธ ์ง์ - ์ธํ๋ฐ | ๊ฐ์
์ค๋ฌด์ ๊ผญ ํ์ํ HTTP ํต์ฌ ๊ธฐ๋ฅ๊ณผ ์ฌ๋ฐ๋ฅธ HTTP API ์ค๊ณ ๋ฐฉ๋ฒ์ ํ์ตํฉ๋๋ค., - ๊ฐ์ ์๊ฐ | ์ธํ๋ฐ...
www.inflearn.com
'WEB' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[HTTP] HTTP ํค๋ - (2) ์บ์์ ์กฐ๊ฑด๋ถ ์์ฒญ (0) | 2022.03.14 |
---|---|
[HTTP] HTTP ์ํ์ฝ๋ (0) | 2022.03.13 |
[HTTP] HTTP ๋ฉ์๋ ํ์ฉ (0) | 2022.03.13 |