HTTP ํค๋
- ์ ์
ํค๋ ํ๋๋ field-name + “:” + OWS + field-value + OWS๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. (OWS = ๋์ด์ฐ๊ธฐ ํ์ฉ)
field-name์๋ ๋์๋ฌธ์ ๊ตฌ๋ถ์ด ์๋ค.
๋ ธ๋์นธ์ด ํค๋๋ถ๋ถ์ด๋ค.
- ์ฉ๋
HTTP ์ ์ก์ ํ์ํ ๋ชจ๋ ๋ถ๊ฐ ์ ๋ณด
ex) ๋ฉ์์ง ๋ฐ๋ ๋ด์ฉ, ๋ฉ์์ง ๋ฐ๋ ํฌ๊ธฐ, ์์ถ, ์ธ์ฆ, ์์ฒญ ํด๋ผ์ด์ธํธ, ์๋ฒ์ ๋ณด, ์บ์๊ด๋ฆฌ์ ๋ณด
ํ์คํค๋๊ฐ ๋๋ฌด ๋ง๋ค.
ํ์์ ์์์ ํค๋๋ฅผ ์ถ๊ฐํ ์ ์๋ค.
๊ณผ๊ฑฐ - RFC2616
1. HTTP ํค๋
- ํค๋ ๋ถ๋ฅ
General Header = ๋ฉ์์ง ์ ์ฒด์ ์ ์ฉ๋๋ ์ ๋ณดex) Connection: close
Request Header = ์์ฒญ ์ ๋ณด ex) User-Agent: Mozilla/5.0 (Macintosh; ..)
Response Header = ์๋ต ์ ๋ณด ex) Server: Apache
Entity Header = Entity ๋ฐ๋ ์ ๋ณด ex) Content-Type: text/html, Content-Length: 3423
2. HTTP ๋ฐ๋
๋ฉ์์ง ๋ณธ๋ฌธ์ Entity ๋ณธ๋ฌธ์ ์ ๋ฌํ๋๋ฐ ์ฌ์ฉํ๋ค.
Entity ๋ณธ๋ฌธ - ์์ฒญ์ด๋ ์๋ต์์ ์ ๋ฌํ ์ค์ ๋ฐ์ดํฐ
Entity ํค๋ - Entity ๋ณธ๋ฌธ์ ๋ฐ์ดํฐ๋ฅผ ํด์ํ ์ ์๋ ์ ๋ณด, ๋ฐ์ดํฐ ์ ํ(html, json), ๋ฐ์ดํฐ ๊ธธ์ด, ์์ถ ์ ๋ณด ๋ฑ
ํ์ RFC2616๊ฐ ํ๊ธฐ๋๊ณ 2014๋ ์ RC7230~7235๊ฐ ๋ฑ์ฅํ๋ฉด์ ์ํฐํฐ ๋ฐ๋๋ ์ฌ๋ผ์ง๋ค.
Entity ๋์ ํํ(ํํ ๋ฉํ๋ฐ์ดํฐ + ํํ ๋ฐ์ดํฐ)์ด ์ถ๊ฐ๋์๋ค.
ํ์ฌ - RFC7230
HTTP ๋ฐ๋
๋ฉ์์ง ๋ณธ๋ฌธ(message body = payload)์ ํตํด ํํ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ค.
ํํ - ์์ฒญ์ด๋ ์๋ต์์ ์ ๋ฌํ ์ค์ ๋ฐ์ดํฐ, ํํ = ํํํค๋ + ํํ๋ฐ์ดํฐ
ํํ ํค๋ - ํํ ๋ฐ์ดํฐ๋ฅผ ํด์ํ ์ ์๋ ์ ๋ณด, ๋ฐ์ดํฐ ์ ํ(html, json), ๋ฐ์ดํฐ ๊ธธ์ด, ์์ถ ์ ๋ณด
ex) ํ์์ด๋ผ๋ ๋ฆฌ์์ค๋ฅผ json์ด๋ผ๋ ํํ์ผ๋ก ์ ๋ฌํ๋ค.
ํํ
ํํ ํค๋๋ ์ ์ก, ์๋ต ๋ ๋ค์ ์ฌ์ฉ๋๋ค.
- Content-Type - ํํ ๋ฐ์ดํฐ์ ํ์์ผ๋ก html์ธ์ง json์ธ์ง ๋ฑ์ ์๋ ค์ค๋ค.
- Content-Encoding - ํํ ๋ฐ์ดํฐ์ ์์ถ ๋ฐฉ์
- Content-Language - ํํ ๋ฐ์ดํฐ์ ์์ฐ ์ธ์ด
- Content-Length - ํํ ๋ฐ์ดํฐ์ ๊ธธ์ด ์ ํํ๋ payload ํค๋์ ํด๋นํ๋ค.
1. Content-Type
๋ฐ๋์ ๋ค์ด๊ฐ๋๊ฒ ๋ญ์ผ?
๋ฏธ๋์ด ํ์ , ๋ฌธ์ ์ธ์ฝ๋ฉ ๋ฑ ํํ ๋ฐ์ดํฐ์ ํ์์ผ๋ก ๋ฐ๋์ ์ด๋ค ๋ฐ์ดํฐ๊ฐ ๋ค์ด๊ฐ๋์ง ์ค๋ช ํ๋ค.
ex)
- text/html; charset=UTF-8
- application/json
- image/png
2. Content-Encoding
ํํ ๋ฐ์ดํฐ๋ฅผ ์์ถํ ๋ ์ฌ์ฉํ๋ค. ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ๊ณณ์์ ๋ฉ์์ง ๋ฐ๋๋ฅผ ์์ถํ๊ณ ๊ทธ ์ ๋ณด๋ฅผ ์ธ์ฝ๋ฉ ํค๋์ ์ถ๊ฐํด์ ๋ณด๋ธ๋ค. ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ์ชฝ์์ ์ด ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์์ถ์ ํด์ ํ๋ค.
ex)
- gzip
- deflate
- identity
3. Content-Language
์ ํ๊ตญ์ด๋ฅผ ์ฐ๋๊ตฌ๋~, ์ ์์ด๋ฅผ ์ฐ๋๊ตฌ๋~
ํํ ๋ฐ์ดํฐ์ ์์ฐ์ธ์ด๋ฅผ ํํํ๋ค.
ex)
- ko
- en
- en-US
4. Content-Length
ํํ ๋ฐ์ดํฐ์ ๊ธธ์ด๋ฅผ ๋ฐ์ดํธ ๋จ์๋ก ๋ํ๋ด๋ฉฐ, Transfer-Encoding(์ ์ก ์ฝ๋ฉ)์ฌ์ฉ์ ์ ์ก ์ฝ๋ฉ ์์ ์ ๋ณด๊ฐ ๋ค ๋ค์ด์์ด ์ฌ์ฉํ๋ฉด ์๋๋ค.
์ฝํ ์ธ ํ์
ํด๋ผ์ด์ธํธ๊ฐ ์ ํธํ๋ ํํ์ ์๋ฒ์ ์์ฒญํ๋ ๊ฒ์ผ๋ก, ์ํ๋ ๋๋ก ์๋ฒ๋ ํํ ๋ฐ์ดํฐ๋ฅผ ๋ง๋ค๋ฉด ๋๋ค.
ํ์ ํค๋๋ ์์ฒญ์๋ง ์ฌ์ฉํ๋ค.
- Accept: ํด๋ผ์ด์ธํธ๊ฐ ์ ํธํ๋ ๋ฏธ๋์ด ํ์ ์ ๋ฌ
- Accept-Charset: ํด๋ผ์ด์ธํธ๊ฐ ์ ํธํ๋ ๋ฌธ์ ์ธ์ฝ๋ฉ
- Accept-Encoding: ํด๋ผ์ด์ธํธ๊ฐ ์ ํธํ๋ ์์ถ ์ธ์ฝ๋ฉ
- Accept-Language: ํด๋ผ์ด์ธํธ๊ฐ ์ ํธํ๋ ์์ฐ ์ธ์ด
1. Accept-Language๋ฅผ ์ ์ฉํ๊ธฐ ์ ์๋ ๊ธฐ๋ณธ๊ฐ์ธ ์์ด๋ก ์๋ต์ ํ๋ค.
์ธ์ด ์ ๋ณด๊ฐ ์์ผ๋ฏ๋ก ๊ธฐ๋ณธ๊ฐ์ธ ์์ด๋ก ๋ฐํํด์ค๋ค.
2. ์ ์ฉํ๋ฉด ์ ํธํ๋ ์ธ์ด๋ฅผ ํ์ธํ๊ณ ์์ผ๋ฉด ๊ทธ ์ธ์ด๋ก ๋ณด๋ด์ค๋ค.
Accept-Language๋ฅผ ์ ํด์คฌ์ผ๋ฏ๋ก ํ๊ตญ์ด๋ก ๋ฐํํด์ค๋ค.
3. ํ์ง๋ง ๋ง์ฝ ๊ธฐ๋ณธ์ด ๋ ์ผ์ด ์ด๊ณ ์์ด๋ฅผ ์ง์ํ๋ ๊ณณ์ด๋ฉด ํ๊ตญ์ด๊ฐ ์๋๋๋ผ๋ ์์ด๊ฐ ์๋ ๋ ์ผ์ด๋ก ๋์จ๋ค.
ํ์๊ณผ ์ฐ์ ์์1
๋ฐ๋ผ์ ์ฐ์ ์์๋ฅผ ์ ํ ์ ์๋ค. q๊ฐ์ 0~1 ์ฌ์ด์ ์ฐ์ ์์๋ฅผ ๋ถ์ฌํ๋ค. ํด ์๋ก ์ฐ์ ์์๊ฐ ๋์ผ๋ฉฐ ์๋ตํ๋ฉด 1์ด๋ค.
ex) Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7
์๋ต๋์์ผ๋ฏ๋ก ํ๊ตญ์ธ์ด ์ฐ๋ ํ๊ตญ์ด ko=1๋ก ์ฐ์ ์์๊ฐ ๊ฐ์ฅ ๋๋ค. ๊ทธ ๋ค์ ์ผ๋ฐ ํ๊ตญ์ด, ๋ฏธ๊ตญ์์ด,๊ณตํต ์์ด ์์ด๋ค.
์ฐ์ ์์๋ฅผ ์ฃผ๋ฉด ํ๊ตญ์ด ๋ค์์ผ๋ก ์์ด๋ฅผ ์ํ๋ค๋ ๊ฒ์ ์๋ฒ๊ฐ ํ์ ํ๊ณ ์์ด๋ก ๋ณด๋ด์ค๋ค.
ํ์๊ณผ ์ฐ์ ์์2
๋ด์ฉ์ ๊ตฌ์ฒด์ ์ธ ๊ฒ์ ์ฐ์ ํ๋ค.
- Accept: text/, text/plain, text/plain;format=flowed, /
1์์: text/plain;format=flowed
2์์: text/plain
3์์: text/*
4์์: /
์ ์ก ๋ฐฉ์
1. ๋จ์ ์ ์ก(Content-Length) - ์์ฒญ์ ํ๋ฉด ๋ฏธ๋ฆฌ ์ปจํ ์ธ ์ ๊ธธ์ด๋ฅผ ์๊ณ ์ง์ ํด์ ๋ณด๋ด๋ ๋ฐฉ์์ด๋ค.
2. ์์ถ ์ ์ก(Content-Encoding) - ์๋ฒ์์ ์์ถ ํด์ ์ฉ๋์ ์ค์ธ ํ Content-Encoding์ ๋ญ๋ก ์์ถํ๋์ง ์ ๋ณด๋ฅผ ๊ฐ์ด ๋ณด๋ธ๋ค. ๊ทธ๋์ผ ํด๋ผ์ด์ธํธ์์ ์๊ณ ํ ์ ์๋ค.
3. ๋ถํ ์ ์ก(Transfer-Encoding) - ๋ฉ์ด๋ฆฌ๋ก ์ชผ๊ฐ์ ๋ณด๋ธ๋ค๋ ์๋ฏธ๋ก chunked ๊ฐ์ ์ฃผ๋ ๋ฐฉ์์ด๋ค.
“5Byte๋ฅผ ๋จผ์ ๋ณด๋ด๊ณ ์ด ๊ฐ์ด Hello”์ด๊ณ , ๋๋๋ฉด 0 \r\n ์ ๋ณด๋ธ๋ค.
ํ ๋ฒ์ ์ญ ๋ณด๋ด๋ ค๋ฉด ๋๊ธฐ ์๊ฐ์ด ํ์ํ๋ฐ ์ด๋ ๊ฒ ์ชผ๊ฐ๋ฉด ๋ง๋ค์ด์ง๋ ๋๋ก ๋ฐ๋ก๋ฐ๋ก ์๋ต์ ๋ฐ์ ์ ์๋ ์ฅ์ ์ด ์๋ค. ์ฐธ๊ณ ๋ก ์ด ๋ฐฉ์์ Content-Length๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ์ชผ๊ฐ์ ๋ณด๋ด๋ฏ๋ก ๊ธธ์ด๋ฅผ ์์ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
4. ๋ฒ์ ์ ์ก(Range, Content-range) - ์ ๋ฐ ์ ๋ ๋ฐ๊ณ ๋๊ฒผ๋๋ฐ ์ฒ์๋ถํฐ ๋ค์ ์์ฒญํ๊ธฐ์ ์๊น์ฐ๋ ๋ฒ์๋ฅผ ์ง์ ํด์ ์์ฒญํ๋ ๋ฐฉ์์ด๋ค.
ํค๋์ ํฌํจ๋๋ ์ ๋ณด
1. ์ผ๋ฐ ์ ๋ณด
- From
์ ์ ์์ด์ ํธ์ ์ด๋ฉ์ผ ์ ๋ณด, ์ ์ฌ์ฉ๋์ง ์์. ์์ฒญ์์ ์ฌ์ฉํ๋ ์ ๋ณด๋ก ๊ฒ์ ์์ง ๋ฑ์์ ์ฃผ๋ก ์ฌ์ฉํ๋ค.
- Referer
์ด์ ์น ํ์ด์ง ์ฃผ์๋ฅผ ์๋ ค์ค๋ค.
ํ์ฌ ์์ฒญ๋ ํ์ด์ง์ ์ด์ ์น ํ์ด์ง ์ฃผ์, ์์ฒญ์์ ์ฌ์ฉํ๋ ์ ๋ณด๋ก ์์ฃผ ์ฌ์ฉํ๋ค.
A์์ B๋ก ์ด๋ํ๋ ๊ฒฝ์ฐ, B ์์ฒญ ์ Referer: A๋ฅผ ํฌํจํด์ ์์ฒญํ๋ค.
Referer ์ ๋ณด๋ก ์ ์ ๊ฒฝ๋ก๋ฅผ ๋ถ์ํ ์ ์๋ค.
- User-Agent
ํด๋ผ์ด์ธํธ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด( ex)์น ๋ธ๋ผ์ฐ์ ์ ๋ณด), ์์ฒญ์์ ์ฌ์ฉํ๋ ์ ๋ณด๋ก ์ด๋ค ์ข ๋ฅ์ ๋ธ๋ผ์ฐ์ ์์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋์ง ํ์ ๊ฐ๋ฅํ๋ฉฐ, ์ฌ์ฉ์ ํต๊ณ ์ ๋ณด๋ฅผ ๋ณด๊ธฐ ์ข๋ค.
- Server
์์ฒญ์ ์ฒ๋ฆฌํ๋ origin ์๋ฒ์ ์ํํธ์จ์ด ์ ๋ณด๋ก ์ค์ ์๋ต์ ํด์ฃผ๋ ์ง์ง ์๋ฒ๋ฅผ origin์ด๋ผ๊ณ ํ๋ค.
์ค๊ฐ์ ์๋ ๊ฑฐ ๋ค ๋นผ๊ณ ๋์ ์์ฒญ์ด ์๋ ๋ง์ง๋ง ์๋ฒ
์๋ต์์ ์ฌ์ฉํ๋ ์ ๋ณด์ด๋ค.
- Date
๋ฉ์์ง๊ฐ ๋ฐ์ํ ๋ ์ง์ ๋ณด,์๋ต์์ ์ฌ์ฉํ๋ ์ ๋ณด์ด๋ค.
2. ํน๋ณํ ์ ๋ณด
- Host(๋๋ฉ์ธ) - ์์ฒญํ ํธ์คํธ ์ ๋ณด(๋๋ฉ์ธ)
์์ฒญ์์ ์ฌ์ฉํ๋ ์ ๋ณด์ด๋ฉฐ ํ์ ๊ฐ์ด๋ค.
ํ๋์ ์๋ฒ๊ฐ ์ฌ๋ฌ ๋๋ฉ์ธ์ ์ฒ๋ฆฌํด์ผ ํ ๋. ์ฆ, ํ IP์ ์ฌ๋ฌ ๋๋ฉ์ธ์ด ์ ์ฉ๋ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ค.
์๋ฅผ ๋ค์ด, ๊ฐ์ ํธ์คํธ๋ก ์ฌ๋ฌ ๋๋ฉ์ธ์ ํ๋ฒ์ ์ฒ๋ฆฌํ๋ ์๋ฒ๊ฐ ์์ด์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฌ๋ฌ ๊ฐ ๊ตฌ๋๋๊ณ ์์ ์
์๋ค.
host๊ฐ ์์ผ๋ฉด ์๋ฒ๋ /hello๊ฐ ์ด๋ค ์ ํ๋ฆฌ์ผ์ด์ ์ ํด๋น๋๋์ง ์ ์ ์๋ค. ํต์ ์ IP๋ก๋ง ํ๊ธฐ ๋๋ฌธ์
host๋ฅผ ๋ด์ ์ ์กํ๋ฉด ์๋ฒ๋ ์ ์ ํ ๊ณณ์ผ๋ก ๋ณด๋ธ๋ค.
ํฌํธ๋ ๋น์ทํ๊ฐ?
ํธ์คํธ: IP์ ์ด๋ฆ์ ๋ถ์ฌํ ๋๋ฉ์ธ ๋ค์์ด๋ ์๋ฒ์ปดํจํฐ IP
ํฌํธ: ํ ์ปดํจํฐ์์ ์ด๋ ์๋ฒ ํ๋ก๊ทธ๋จ๊ณผ ํต์ ํ ๊ฒ์ธ์ง ์ง์ ํด์ฃผ๋ ์ถ์ ๊ตฌ
- Location
ํ์ด์ง ๋ฆฌ๋ค์ด๋ ์ ์ ์ฐ์ธ๋ค.
์น ๋ธ๋ผ์ฐ์ ๊ฐ 3xx ์๋ต ๊ฒฐ๊ณผ์ Location์ด ์์ผ๋ฉด ๊ทธ ์์น๋ก ์๋ ์ด๋ํ๋ค.
201 (Created)์ผ ๋ ์์ฒญ์ ์ํด ์์ฑ๋ ๋ฆฌ์์ค URI ๊ฐ์ด ๋ค์ด์จ๋ค.
3xx (Redirection)์ผ ๋ ์์ฒญ์ ์๋์ผ๋ก ๋ฆฌ๋ค์ด๋ ์ ํ๊ธฐ ์ํ ๋์ ๋ฆฌ์์ค๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
- Allow
ํ์ฉ ๊ฐ๋ฅํ HTTP ๋ฉ์๋๋ฅผ ๋ํ๋ธ๋ค.
405 (Method Not Allowed)์ผ ๋ ์๋ต์ ํฌํจํด์ผ ํ๋ค.
- Retry-After
์ ์ ์์ด์ ํธ๊ฐ ๋ค์ ์์ฒญ์ ํ๊ธฐ์ ๊น์ง ๊ธฐ๋ค๋ ค์ผ ํ๋ ์๊ฐ์ผ๋ก
503 (Service Unavailable)์ผ ๋ ์๋น์ค๊ฐ ์ธ์ ๊น์ง ๋ถ๋ฅ์ธ์ง ์๋ ค์ค ์ ์๋ค.
์ธ์ฆ
- Authorization
ํด๋ผ์ด์ธํธ ์ธ์ฆ ์ ๋ณด๋ฅผ ์๋ฒ์ ์ ๋ฌํ๋ค. ๋ค์ด๊ฐ๋ ๊ฐ์ ์ธ์ฆ ๋ฐฉ์๋ง๋ค ๋ค๋ฅด๋ค.
Authorization ํค๋๋ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์๊ฒ ์์ ์ ์ธ์ฆํ๋ ๋ฐ ์ฌ์ฉ
- WWW-Authenticate
๋ฆฌ์์ค์ ์ ๊ทผํ ๋ ํ์ํ ์ธ์ฆ ๋ฐฉ๋ฒ์ ์ ์ํ๋ค.
401 Unauthorized์๋ต์ ํจ๊ป ์ฌ์ฉํ๋ค. 401์ค๋ฅ์ ์๋์๊ฐ์ ํค๋๋ฅผ ๋ฃ์ด์ค๋ค.
WWW-Authenticate: Newauth realm="apps", type=1, title="Login to \\"apps\\"", Basic realm="simple"
WWW-Authenticate ํค๋๋ ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์๊ฒ ์ด๋ค ์ธ์ฆ ๋ฐฉ๋ฒ์ ์ฌ์ฉํด์ผ ํ๋์ง ์๋ ค์ฃผ๋ ๋ฐ ์ฌ์ฉ
์ ๋ฆฌํ์๋ฉด
Authorization๋ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ๋ก ์์ฒญ์ ๋ณด๋ผ ๋, ์๊ฒฉ ์ฆ๋ช ์ ์๋ฒ์ ์ ๋ฌํ๋ ๋ฐ ์ฌ์ฉ๋๋ฉฐ,์ฃผ๋ก HTTP ์์ฒญ์์ ์ธ์ฆ ์ ๋ณด๋ฅผ ํฌํจํ๋ ๋ฐ์ ํ์ฉ๋๋ค.
WWW-Authenticate๋ ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์๊ฒ ๋ณด๋ธ ์๋ต์์, ํด๋ผ์ด์ธํธ์๊ฒ ์ด๋ค ์ธ์ฆ ๋ฐฉ๋ฒ์ ์ฌ์ฉํด์ผ ํ๋์ง ์๋ ค์ฃผ๋ ๋ฐ์ ์ฌ์ฉ๋๊ณ , ํด๋ผ์ด์ธํธ๋ ์ด ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ธ์ฆ ํค๋๋ฅผ ์์ฑํ์ฌ ๋ค์ ์๋ฒ๋ก ์ ์กํ๋ค.
์ฟ ํค
์น ๋ธ๋ผ์ฐ์ ์์ ์ด๋ค ์๋ฒ์ ์ฒ์ ์ ๊ทผ์ ํ๋ค๊ณ ํด๋ณด์.
๋ก๊ทธ์ธ์ ํ๋ฉด ์๋ฒ๋ ๋ก๊ทธ์ธ์ ํ๋ค๊ณ ์๋ต์ ์ค๋ค.
๋ก๊ทธ์ธ ํ ๋ค์ /welcome ํ์ด์ง์ ์ ๊ทผ์ ํ๋ฉด ์๋ฒ๋ ์ฒ์ ์ ๊ทผํ ๊ฒ๊ณผ ๊ฐ์ ์๋ต์ ์ค๋ค.
/welcome์ ์ ๊ทผํ๋ค๋ ๊ฒ ๋ง๊ณ ๋ ์ด๋ค ์ ๋ณด๋ ์๊ธฐ ๋๋ฌธ์ ์๋ฒ๋ ๋๊ฐ ๋ก๊ทธ์ธ์ ํ๋์ง ์ ์ ์๋ค.
HTTP๋ ๋ฌด์ํ ํ๋กํ ์ฝ์ด๊ธฐ์, ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ์์ฒญ๊ณผ ์๋ต์ ์ฃผ๊ณ ๋ฐ์ผ๋ฉด ์ฐ๊ฒฐ์ด ๋๊ธด๋ค.
์๋ก ์ํ๋ฅผ ์ ์งํ์ง ์๊ธฐ ๋๋ฌธ์ ํด๋ผ์ด์ธํธ๊ฐ ๋ค์ ์์ฒญํด๋ ์๋ฒ๋ ์ด์ ์์ฒญ์ ๊ธฐ์ตํ์ง ๋ชปํ๋ค.
๋์์ผ๋ก ๋ชจ๋ ์์ฒญ์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ํฌํจํด์ ๋ณด๋ผ ์ ์๋ค.
ํ์ง๋ง ์ด ๋์์ ๋ชจ๋ ์์ฒญ๊ณผ ๋งํฌ์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ํฌํจํ๊ธฐ ๋๋ฌธ์ ๋ณด์ ๋ฌธ์ ๋ ์๊ธฐ๊ณ ๊ฐ๋ฐ์ด ๋ณต์กํด์ง๋ค.
๋ํ, ๋ธ๋ผ์ฐ์ ๋ฅผ ์์ ํ ์ข ๋ฃํ๊ณ ๋ค์ ์ด๋ฉด ๋ ๋ค์๋ณด๋ด์ผ ํ๋ค.
๊ทธ๋์ ์ฟ ํค๊ฐ ๋์ ๋์๋ค.
๋ธ๋ผ์ฐ์ ๊ฐ ๋ก๊ทธ์ธ์ ํ๋ฉด ์๋ฒ๊ฐ Set-Cookie ํค๋์ ์ ๋ณด๋ฅผ ๋ฃ์ด ๋ฐํํ๋ค.
๊ทธ๋ฌ๋ฉด ์น ๋ธ๋ผ์ฐ์ ๋ด๋ถ์ ์๋ ์ฟ ํค ์ ์ฅ์์ Set-Cookie ๊ฐ์ ์ ์ฅํ๋ค.
๋ก๊ทธ์ธ ์ดํ์ ๋ค์ ํ์ด์ง์ ์ ๊ทผํ๋ฉด ๋ฌด์กฐ๊ฑด ์ฟ ํค ์ ์ฅ์์์ ์กฐํํด์ Cookie์ ์ ์ ๊ฐ์ ๋ฃ์ด ๋ณด๋ธ๋ค.
์ง์ ๋ถํ๊ฒ URL์ ๋ฃ์ ํ์๊ฐ ์์ด์ง๋ ๊ฒ์ด๋ค.
์ฟ ํค๋ ๋ชจ๋ ์์ฒญ์ ์ฟ ํค ์ ๋ณด๋ฅผ ์๋์ผ๋ก ํฌํจ์ํจ๋ค.
set-cookie: sessionId=abcde1234; expires=Sat, 26-Dec-2020 00:00:00 GMT; path=/; domain=.google.com; Secure**
์ฟ ํค ์ฌ์ฉ์ฒ
- ์ฌ์ฉ์ ๋ก๊ทธ์ธ ์ธ์ ๊ด๋ฆฌ
์ ์ ์ ๋ณด๋ฅผ ๊ทธ๋๋ก ๋ณด๋ด๋ฉด ์ํํ๊ธฐ ๋๋ฌธ์ ์ธ์ ํค๋ฅผ ์๋ฒ์์ ๋ง๋ค์ด์ DB์ ์ ์ฅํด๋๊ณ sessionId ๊ฐ์ผ๋ก ๋ณด๋ธ๋ค. ํด๋ผ์ด์ธํธ๋ ๊ทธ sessionId๋ฅผ ์ ์ฅํด๋๊ณ ์์ฒญํ ๋๋ง๋ค ๋ณด๋ธ๋ค.
- ๊ด๊ณ ์ ๋ณด ํธ๋ํน
์ด ์น๋ธ๋ผ์ฐ์ ๋ฅผ ์ฐ๋ ์ฌ๋์ด ์ด๋ฐ ๊ด๊ณ ๋ฅผ ๋ณธ๋ค๋ ์ ๋ณด๋ฅผ ์์งํ๋ค.
๋จ์
์ฟ ํค ์ ๋ณด๋ ํญ์ ์๋ฒ์ ์ ์ก๋๋ฏ๋ก ๋คํธ์ํฌ ํธ๋ํฝ์ ์ ๋ฐํ๋ค.
๊ทธ๋์ ์ธ์ ID์ ์ธ์ฆ ํ ํฐ ์ ๋์ ์ต์ํ์ ์ ๋ณด๋ง ์ฌ์ฉํด์ผ ํ๋ค.
์ฃผ๋ฏผ ๋ฒํธ์ ์ ์ฉ์นด๋ ๋ฒํธ ๋ฑ ๋ณด์์ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๋ ์ ์ฅํ๋ฉด ์๋๋ค.
์๋ฒ์ ์ ์กํ์ง ์๊ณ ํด๋ผ์ด์ธํธ ์ฆ, ์น ๋ธ๋ผ์ฐ์ ๋ด๋ถ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ถ๋ค๋ฉด ์น ์คํ ๋ฆฌ์ง๋ฅผ ์ฌ์ฉํ๋ค.
์๋ช ์ฃผ๊ธฐ(expires, max-age)
- Set-Cookie: expires=Sat, 26-Dec-2020 04:39:21 GMT
๋ง๋ฃ์ผ์ด ๋๋ฉด ์ฟ ํค๋ฅผ ์ญ์ ํ๋ค.
- Set-Cookie: max-age=3600 (3600์ด)
0์ด๋ ์์๋ฅผ ์ง์ ํ๋ฉด ์ฟ ํค๋ฅผ ์ญ์ ํ๋ค.
- ์ธ์ ์ฟ ํค
๋ง๋ฃ ๋ ์ง๋ฅผ ์๋ตํ๋ฉด ๋ธ๋ผ์ฐ์ ๋ฅผ ์ข ๋ฃํ ๋๊น์ง๋ง ์ ์งํ๋ค.
- ์์ ์ฟ ํค
๋ง๋ฃ ๋ ์ง๋ฅผ ์ ๋ ฅํ๋ฉด ํด๋น ๋ ์ง๊น์ง ์ ์งํ๋ค.
domain
์ฟ ํค๊ฐ ์ฌ์ฉ๋๋ ๋๋ฉ์ธ์ ๋ช ์ํ ์ ์๋ค.
ex) domain = example.org
- ๋ช ์: ๋ช ์ํ ๋ฌธ์ ๊ธฐ์ค์ ๋๋ฉ์ธ๊ณผ ์๋ธ ๋๋ฉ์ธ์ ์ ๊ณตํ๋ค.
example.org๋ ๋ฌผ๋ก ์ด๊ณ dev.example.org์ ํํ์๋ ์ฟ ํค๋ก ์ ๊ทผํ๋ค.
- ์๋ต: ํ์ฌ ๋ฌธ์ ๊ธฐ์ค์ ๋๋ฉ์ธ๋ง ์ ์ฉํ๋ค.
example.org์์๋ง ์ฟ ํค๋ก ์ ๊ทผํ๋ค. dev.example.org๋ ์ฟ ํค๋ก ์ ๊ทผํ ์ ์๋ค.
path
path=/home
ํด๋น ๊ฒฝ๋ก๋ฅผ ํฌํจํ ํ์ ๊ฒฝ๋ก ํ์ด์ง๋ง ์ฟ ํค๋ก ์ ๊ทผํ๋ค.
์ผ๋ฐ์ ์ผ๋ก๋ “path = /๋ฃจํธ”๋ก ์ง์ ํ๋ค.
- /home -> ๊ฐ๋ฅ
- /home/level1 -> ๊ฐ๋ฅ
- /home/level1/level2 -> ๊ฐ๋ฅ
- /hello -> ๋ถ๊ฐ๋ฅ
๋ณด์
- Secure
์๋ ์ฟ ํค๋ http, https๋ฅผ ๊ตฌ๋ถํ์ง ์๊ณ ์ ์กํ๋ค. ํ์ง๋ง Secure๋ฅผ ์ ์ฉํ๋ฉด https์ธ ๊ฒฝ์ฐ์๋ง ์ ์กํ๋ค.
- HttpOnly
XSS ๊ณต๊ฒฉ์ ๋ฐฉ์งํ๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์์ ์๋ ์ฟ ํค๋ฅผ ์ ๊ทผํ ์ ์๋๋ฐ(document.cookie) ์ด ์ต์ ์ด ๋ค์ด๊ฐ๋ฉด ๋ถ๊ฐ๋ฅํ๋ค. HTTP๋ฅผ ํตํด์๋ง ์ฟ ํค๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ค.
- SameSite
XSRF ๊ณต๊ฒฉ์ ๋ฐฉ์งํ๋ค. ์์ฒญํ ๋๋ฉ์ธ๊ณผ ์ฟ ํค์ ์ค์ ๋ ๋๋ฉ์ธ์ด ๊ฐ์ ๋๋ง ์ฟ ํค๋ฅผ ์ ์กํ๋ ๊ฒ์ด๋ค. ๋ค๋ฅธ ์ฌ์ดํธ์์ ์ธํ ํ ์ฟ ํค๋ฅผ ์ ์ก๋์ง ์๊ฒ ํ๋ค.
'๐ผ ๋ฐฑ์ค๋ > HTTP' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
9. JSON (0) | 2024.01.09 |
---|---|
8. HTTP ํค๋ - ์บ์์ ์กฐ๊ฑด๋ถ ์์ฒญ (0) | 2024.01.09 |
6. HTTP ์ํ ์ฝ๋ (1) | 2024.01.09 |
5. HTTP ๋ฉ์๋ ํ์ฉ (1) | 2024.01.09 |
4. HTTP API ๋ฉ์๋ (2) | 2024.01.09 |