์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Inflearn
- Logging
- BBangting
- API
- Mapping
- Firebase
- springboot
- Security
- ์ฑ๊ฐ๋ฐ
- kotlin
- Community-App
- PROJECT
- BPM
- MySQL
- Spring
- ๊น์ํ
- log
- docker
- MVC
- HTTP
- JPA
- ์์ฒญ
- Today
- Total
yeon's blog
[HTTP ์น ๊ธฐ๋ณธ ์ง์] HTTP ํค๋ 1 - ์ผ๋ฐํค๋ ๋ณธ๋ฌธ
๐ฑ HTTP ํค๋ ๊ฐ์
HTTP ํค๋
header-field = field-name ":" OWS field-values OWS (OWS: ๋์ด์ฐ๊ธฐ ํ์ฉ)
HTTP ์ ์ก์ ํ์ํ ๋ชจ๋ ๋ถ๊ฐ์ ๋ณด๋ฅผ ๋ฃ๋๋ค.
์๋ฅผ ๋ค์ด ๋ฉ์์ง ๋ฐ๋์ ๋ด์ฉ, ๋ฉ์์ง ๋ฐ๋์ ํฌ๊ธฐ, ์์ถ, ์ธ์ฆ, ์์ฒญ ํด๋ผ์ด์ธํธ, ์๋ฒ ์ ๋ณด, ์บ์ ๊ด๋ฆฌ์ ๋ณด.. ๋ฑ...
ํ์ค ํค๋๋ ๊ต์ฅํ ๋ง๊ณ , ํ์ ์ ์์์ ํค๋ ์ถ๊ฐ๊ฐ ๊ฐ๋ฅํ๋ค.
๊ณผ๊ฑฐ์ HTTP ํค๋ ๋ถ๋ฅ๋ ์๋ต!
๐ฑ ํํ
#ํํ: ๋ฉํ ๋ฐ์ดํฐ์ ํํ ๋ฐ์ดํฐ๋ฅผ ํฉ์น ๊ฒ
HTTP BODY - RFC7230
๋ฉ์์ง ๋ณธ๋ฌธ์ ํตํด ์์ฒญ์ด๋ ์๋ต์์ ์ ๋ฌํ ์ค์ ๋ฐ์ดํฐ๋ฅผ ํํ ๋ฐ์ดํฐ ์ ๋ฌ ํ๋๋ฐ ์ฌ์ฉํ๋ค.
๋ฉ์์ง ๋ณธ๋ฌธ์ ํ์ด๋ก๋๋ผ๊ณ ๋ถ๋ฅธ๋ค.
Content-Type
ํด๋ผ์ด์ธํธ๋ ์๋ฒ ๊ฐ์ ์ค์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋ ๋ฐ์ดํฐ๋ฅผ ๋ณํํด์ ์ ๋ฌํด์ผ ํ๋๋ฐ,
์ด๋ ํค๋ Content-Type์ ๋ณํํ ํ์์ ์ค์ ํ๋ค.
text/html; charset=utf-8
application/json
image/png
Content-Encoding
ํํ ๋ฐ์ดํฐ๋ฅผ ์์ถํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ฅผ ๋ณด๋ผ ๋ Content-Encoding ๋ถ๊ฐ ์ ๋ณด๋ฅผ ๋ณด๋ด์ค์ผ ๋ฌด์์ผ๋ก ์์ถ๋๋์ง ์ ์ ์๋ค.
๋ฐ์ดํฐ ์ ๋ฌํ๋ ๊ณณ์์ ์์ถ ํ ์ธ์ฝ๋ฉ ํค๋๋ฅผ ์ถ๊ฐํ๊ณ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ์ชฝ์์ ์ธ์ฝ๋ฉ ํค๋์ ์ ๋ณด๋ก ์์ถ ํด์ ํ๋ค.
gzip
deflate
identity
Content-Language
ํํ ๋ฐ์ดํฐ์ ์์ฐ ์ธ์ด๋ฅผ ํํํ๋ค.
ko
en
en-US
Content-Length
ํํ ๋ฐ์ดํฐ์ ๊ธธ์ด๋ก ๋ฐ์ดํธ ๋จ์์ด๋ค.
Transfer-Encoding(์ ์ก ์ฝ๋ฉ)์ ์ฌ์ฉํ๋ฉด Content-Lenght๋ฅผ ์ฌ์ฉํ๋ฉด ์๋๋ค.
๐ฑ ์ฝํ ์ธ ํ์
#ํ์: ํด๋ผ์ด์ธํธ๊ฐ ์ ํธํ๋ ํํ์ ์์ฒญํ๋ ๊ฒ
- Accept : ํด๋ผ์ด์ธํธ๊ฐ ์ ํธํ๋ ๋ฏธ๋์ด ํ์ ์ ๋ฌ
- Accept-Charset : ํด๋ผ์ด์ธํธ๊ฐ ์ ํธํ๋ ๋ฌธ์ ์ธ์ฝ๋ฉ
- Accept-Encoding : ํด๋ผ์ด์ธํธ๊ฐ ์ ํธํ๋ ์์ถ ์ธ์ฝ๋ฉ
- Accept-Language : ํด๋ผ์ด์ธํธ๊ฐ ์ ํธํ๋ ์์ฐ ์ธ์ด
* ํ์ ํค๋๋ ์์ฒญ์์๋ง ์ฌ์ฉ
Accept-Language ์ ์ฉ ์
ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก ๋ณด๋ผ ๋ ํด๋ผ์ด์ธํธ๊ฐ ํ๊ตญ์ด์ธ์ง ์์ด์ธ์ง ์๋ฌด ์ ๋ณด๊ฐ ์๋ค.
๊ทธ๋ฌ๋ฉด ์๋ฒ๋ ๊ธฐ๋ณธ ์ธ์ด์ธ ์์ด๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ค.
Accept-Language ์ ์ฉ ํ
ํด๋ผ์ด์ธํธ๊ฐ ์ ํธํ๋ ์ธ์ด๋ก ํ๊ตญ์ด๋ฅผ ์ ๋ ฅํด์ ์๋ฒ์๊ฒ ์ ๋ฌํ๋ค.
์๋ฒ๋ ๊ธฐ๋ณธ ์ธ์ด๊ฐ ์์ด์ง๋ง ํ๊ตญ์ด๋ ์ง์ํ๊ธฐ ๋๋ฌธ์ ํด๋ผ์ด์ธํธ๊ฐ ์ํ๋ ํ๊ตญ์ด๋ก ๋ฃ์ด์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ค.
Accept-Language ๋ณต์กํ ์์
ํด๋ผ์ด์ธํธ๊ฐ ์ ํธํ๋ ์ธ์ด๋ฅผ ํ๊ตญ์ด ์ ๋ณด๋ฅผ ์ ๋ ฅํด์ ์๋ฒ์๊ฒ ์ ๋ฌํ๋๋ฐ ์๋ฒ๊ฐ ๊ธฐ๋ณธ์ด ๋ ์ผ์ด์ธ๋ฐ ์์ด๋ฅผ ์ง์ํ๋ค.
๋ค์ค ์ธ์ด ์ง์ ์๋ฒ๊ฐ ํ๊ตญ์ด๋ฅผ ์ง์์ ํ์ง ์์ ๊ธฐ๋ณธ ์ธ์ด์ธ ๋ ์ผ์ด๋ก ๋ณด๋ด๊ฒ ๋๋ค.
ํ์๊ณผ ์ฐ์ ์์ 1
- Quality Values(q) ๊ฐ์ ์ฌ์ฉํ๋ค.
- 0~1, ๊ฐ์ด ํด์๋ก ์ฐ์ ์์๊ฐ ๋๊ณ , ์๋ตํ๋ฉด 1์ด๋ค.
GET /event
Accept-Language:ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7
ํด๋ผ์ด์ธํธ์ ๋ธ๋ผ์ฐ์ ์์ ํ๊ตญ์ด๋ฅผ ์ ํธํ์ง๋ง ๋ค์ค ์ธ์ด ์ง์ ์๋ฒ๋ ๊ธฐ๋ณธ์ด ๋ ์ผ์ด์ด๊ณ ์์ด๋ฅผ ์ง์ํ๋ค.
์๋ฒ์์๋ ๋ ์ผ์ด๋ณด๋ค๋ ์์ด๋ฅผ ์ ํธํ๋ค๋ ๊ฑฐ๋ฅผ ์๊ณ ์์ด๋ก ๋ฉ์์ง๋ฅผ ๋ณด๋ด๊ฒ ๋๋ค.
ํ์๊ณผ ์ฐ์ ์์ 2
- ๊ตฌ์ฒด์ ์ผ ์๋ก ์ฐ์ ์์๊ฐ ๋๋ค.
GET /event
Accept: text/*, text/plain, text/plain;format=flowed, */*
- text/plain;format=flowed
- text/plain
- text/*
- */*
ํ์๊ณผ ์ฐ์ ์์ 3
๊ตฌ์ฒด์ ์ธ ๊ฒ์ ๊ธฐ์ค์ผ๋ก ๋ฏธ๋์ด ํ์ ๊ณผ ๋งค์นญํ๋ฉด ๋๋ค.
Media Type | Quality |
text/html;level=1 | 1 |
text/html | 0.7 |
text/plain | 0.3 |
image/jpeg | 0.5 |
text/html;level=2 | 0.4 |
text/html;level=3 | 0.7 |
GET /event
Accept: text/*;q=0.3, text/html;q=0.7, text/html;level=1, text/html;level=2;q=0.4, */*;q=0.5
๐ฑ ์ ์ก ๋ฐฉ์
๋จ์ ์ ์ก (Content-Length)
Content์ ๊ธธ์ด๋ฅผ ์ง์ ์ ํด์ ํ ๋ฒ์ ์์ฒญํ๊ณ ํ ๋ฒ์ ์๋ต ๋ฐ๋๋ค.
์์ถ ์ ์ก (Content-Encoding)
Contenxt-Ecoding ํ์ → Content๋ฅผ ์์ถํ ๋ ์ด๋ป๊ฒ ์์ถ๋์ด ์๋์ง ์์์ผ ํด๋ผ์ด์ธํธ์์ ์๊ณ ์์ถ์ ํ ์ ์๋ค.
๋ถํ ์ ์ก (Transfer-Encoding)
chunked(๋ฉ์ด๋ฆฌ) ๋ฉ์ด๋ฆฌ๋ก ์ชผ๊ฐ์ ์ ์ก์ ํ๋ค.
5byte๋ก Hello๋ฅผ ์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ก ๋ณด๋ธ๋ค. ๋ 5byte๋ก World๋ฅผ ๋ณด๋ด๊ณ ๋ง์ง๋ง์ผ๋ก 0byte๋ก src๋ฅผ ๋ณด๋ด๋ฉด ๋์ด๋ผ๋ ๊ฑธ ํํํ๋ค.
*๋ถํ ์ ์ก์ ํ ๋๋ ๋ฉ์ด๋ฆฌ๋ง๋ค ๊ธธ์ด๊ฐ ๋ค ์กด์ฌํ๋ฏ๋ก, Content-Length๋ฅผ ๋ฃ์ผ๋ฉด ์๋๋ค.
๋ฒ์ ์ ์ก (Content-Range)
์ด๋ฏธ์ง๋ฅผ ๋ฐ์๋๋ฐ ์ค๊ฐ์ ๋๊ธธ ๊ฒฝ์ฐ ๋ชป ๋ฐ์ ๋ฒ์๋ฅผ ์ง์ ํด ์ฌ์์ฒญ์ ํ๋ค.
๐ฑ ์ผ๋ฐ ์ ๋ณด
From
์ ์ ์์ด์ ํธ์ ์ด๋ฉ์ผ ์ ๋ณด๋ก, ์ผ๋ฐ์ ์ผ๋ก ์ ์ฌ์ฉํ์ง ์๋๋ค.
๊ฒ์ ์์ง ๋ด๋น์ํํ ์ฐ๋ฝํ ์ ์๋ ๋ฐฉ๋ฒ์ด ํ์ํ ๋ ์ฌ์ฉํ๋ค.
Referer
ํ์ฌ ์์ฒญ๋ ํ์ด์ง์ ์ด์ ์น ํ์ด์ง ์ฃผ์์ด๋ค.
A์์ B๋ก ์ด๋ํ๋ ๊ฒฝ์ฐ B๋ฅผ ์์ฒญํ ๋ Referer A๋ฅผ ํฌํจํด์ ์์ฒญํ๋ค.
Referer๋ฅผ ์ฌ์ฉํด์ ๋ฐ์ดํฐ ๋ถ์ ํ ๋ ์ ์ ๊ฒฝ๋ก ๋ถ์์ ๊ฐ๋ฅํ๋ค.
* referer๋ referrer์ ์คํ
User-Agent
ํด๋ผ์ด์ธํธ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด์ด๋ค.
์ฌ์ฉ์๋ค์ด ์ด๋ค ์ข ๋ฅ์ ๋ธ๋ผ์ฐ์ ์์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋์ง ํ์ ์ด ๊ฐ๋ฅํ๋ค.
Server
์์ฒญ์ ์ฒ๋ฆฌํ๋ ORIGIN ์๋ฒ์ ์ํํธ์จ์ด ์ ๋ณด์ด๋ค.
ORIGIN ์๋ฒ๋ ์ค์ HTTP ์๋ต์ ํด์ฃผ๋ ์๋ฒ์ด๋ค.
Date
๋ฉ์์ง๊ฐ ๋ฐ์ํ ๋ ์ง์ ์๊ฐ์ด๋ค.
์๋ต์์๋ง ์ฌ์ฉํ๋ค.
๐ฑ ํน๋ณํ ์ ๋ณด
โจ Host โจ
์์ฒญ์์ ์ฌ์ฉํ๊ณ ํ์๊ฐ์ด๋ค.(๋งค์ฐ ์ค์!!)
ํ๋์ ์๋ฒ๊ฐ ์ฌ๋ฌ ๋๋ฉ์ธ์ ์ฒ๋ฆฌํด์ผ ํ ๋ ์ฆ, ํ๋์ IP ์ฃผ์์ ์ฌ๋ฌ ๋๋ฉ์ธ์ด ์ ์ฉ๋์ด ์์ ๋ ๊ตฌ๋ถํด์ค์ผ ํ๋ค.
ํ๋์ ์๋ฒ IP : 200.200.200.2 ๊ฐ ์๋๋ฐ ์๋ฒ ์์ ์ฌ๋ฌ ๊ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ค๋ฅธ ๋๋ฉ์ธ์ผ๋ก ๊ตฌ๋๋์ด ์๋ค.
ํด๋ผ์ด์ธํธ๊ฐ /hello ๋ก GET ๋ฐฉ์์ผ๋ก ์์ฒญ์ ํ๋๋ฐ ์๋ฒ ์ ์ฅ์์๋ /hello ์ ๊ด๋ จ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด๋๋ก ๋ค์ด๊ฐ์ง ์์ ์๋ค.
์ด ๋, Host ํค๋์ ์ ๋ณด๋ฅผ ์ ๋ ฅํ๋ฉด ์๋ฒ์์ ์์ฒญ์ ๋ง๋ ๋๋ฉ์ธ์ฃผ์์ ๋ค์ด๊ฐ ์ ์๋ค.
Location
์๋ต์ ๊ฒฐ๊ณผ์ Location ํค๋๊ฐ ์์ผ๋ฉด, Location ์์น๋ก ์๋ ์ด๋(๋ฆฌ๋ค์ด๋ ํธ)!
201(Created) : Location ๊ฐ์ ์์ฒญ์ ์ํด ์์ฑ๋ ๋ฆฌ์์ค URI
3xx(Redirection) : Location ๊ฐ์ ์์ฒญ์ ์๋์ผ๋ก ๋ฆฌ๋ค์ด๋ ์ ํ๊ธฐ ์ํ ๋์ ๋ฆฌ์์ค
Allow
ํ์ฉ ๊ฐ๋ฅํ HTTP ๋ฉ์๋์ด๋ค.
405(Method Not Allowed) : ์ค๋ฅ๋ฅผ ๋ด๋ฉด์ ์๋ต์ ํฌํจํ๋ค.
Allow: GET, HEAD, PUT๋ง ์ง์์ ํ๋ค. ์๋ฒ์์ ๋ง์ด ๊ตฌํ๋์ง๋ ์๋๋ค.
Retry-After
์ ์ ์์ด์ ํธ๊ฐ ๋ค์ ์์ฒญ์ ํ๊ธฐ๊น์ง ๊ธฐ๋ค๋ ค์ผ ํ๋ ์๊ฐ์ด๋ค.
503(Service Unavaliable) : ์๋น์ค๊ฐ ์ธ์ ๊น์ง ๋ถ๋ฅ์ธ์ง ์๋ ค์ค ์ ์์
Retry-After : ๋ ์ง ํ๊ธฐ, ์ด๋จ์ ํ๊ธฐ
๐ฑ ์ธ์ฆ
Authorization
ํด๋ผ์ด์ธํธ ์ธ์ฆ ์ ๋ณด๋ฅผ ์๋ฒ์ ์ ๋ฌํ ์ ์๋ค.
WWW-Authenticate
๋ฆฌ์์ค ์ ๊ทผ ์ ํ์ํ ์ธ์ฆ ๋ฐฉ๋ฒ ์ ์ํ๋ค.
401(Unauthorize) : ์๋ต๊ณผ ํจ๊ป ์ฌ์ฉ
401 ์ค๋ฅ๊ฐ ๋ ๋,
โฌ๏ธ โฌ๏ธ โฌ๏ธ
WWW-Authenticate: Newauth realm="apps", type=1, title="Login to \"apps"\"", Basic realm="simple"
๐ฑ ์ฟ ํค
Set-Cookie
์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ก ์ฟ ํค๋ฅผ ์ ๋ฌ(์๋ต)ํ๋ค.
Cookie
ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์์ ๋ฐ์ ์ฟ ํค๋ฅผ ์ ์ฅํ๊ณ , HTTP ์์ฒญ์ ์๋ฒ๋ก ์ ๋ฌํ๋ค.
์น ๋ธ๋ผ์ฐ์ ์์ ๋ก๊ทธ์ธ ์ํ ์ฌ์ฉ์๊ฐ /welcome ์น ํ์ด์ง๋ก ์ ๊ทผํ๋ฉด, ์๋ฒ์์๋ ์๋์ผ๋ก ๋ค์ด์ค๊ฒ ๋๋ค.
/login ์ ์ ์ ๋ณด, ํจ์ค์๋ ๋ฑ์ POST ๋ฐฉ์์ผ๋ก ๋ณด๋ด ๋ก๊ทธ์ธ์ ํ๋ฉด, ์๋ฒ์์๋ ํ๊ธธ๋์ผ๋ก ๋ก๊ทธ์ธ ํ๋ค๊ณ ์๋ต์ ์ค๋ค.
์ด ์ํ์์ ๋ค์ /welcome์ผ๋ก ์ ๊ทผํ๋ฉด ์๋ฒ ์ ์ฅ์์ ๋ก๊ทธ์ธํ ์ฌ์ฉ์์ธ์ง ์๋์ง ๊ตฌ๋ถํ ์ ์๋ ์๋ค. HTTP๊ฐ ๋ฌด์ํ ํ๋กํ ์ฝ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ์์ฒญ๊ณผ ์๋ต์ ์ฃผ๊ณ ๋ฐ์ผ๋ฉด ์ฐ๊ฒฐ์ด ๋์ด์ง๊ณ , ํด๋ผ์ด์ธํธ๊ฐ ๋ค์ ์์ฒญํ๋ค ํด๋ ์๋ฒ๋ ์ด์ ์์ฒญ์ ๊ธฐ์ตํ์ง ๋ชปํ๋ค.
์ฆ, ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ์๋ก ์ํ๋ฅผ ์ ์งํ์ง ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ด๋ค.
ํด๊ฒฐ์ฑ ! โจ
๋ชจ๋ ์์ฒญ์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ํฌํจํด์ ๋ณด๋ด๋ฉด ๋๋ค.
๋ฌธ์ ์ !โจ
๋ชจ๋ ์์ฒญ๊ณผ ๋งํฌ์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๋ค ํฌํจํ๋ฉด ๋ณด์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉฐ ๊ฐ๋ฐํ๊ธฐ ํ๋ค๋ค.
๋ธ๋ผ์ฐ์ ๋ฅผ ์์ ํ ์ข ๋ฃํ๊ณ ๋ค์ ์ด๋ฉด? ์น ์คํ ๋ฆฌ์ง์ ์ ์ฅ์ ํด๋๊ณ ๋ค์ ๋๊ธฐ๋ฉด ๋์ง๋ง ๊ฐ๋ฐํ๊ธฐ ํ๋ค๋ค.
Cookie
์น ๋ธ๋ผ์ฐ์ ๊ฐ POST๋ก ๋ก๊ทธ์ธ์ ํ๋ฉด, ์๋ฒ์์๋ Set-Cookie๋ก ํ๊ธธ๋ ์ ๋ณด๋ฅผ ๋ง๋ค์ด ์๋ต ํด์ค๋ค.
์น ๋ธ๋ผ์ฐ์ ๋ด๋ถ์๋ ์ฟ ํค ์ ์ฅ์๊ฐ ์๋๋ฐ ์๋ฒ๊ฐ ์๋ต์์ ๋ง๋ Set-Cookie๋ฅผ ์ฟ ํค ์ ์ฅ์์ ์ ์ฅํ๋ค.
(key: user, value: ํ๊ธธ๋)
๋ก๊ทธ์ธ ์ดํ์ ์น ๋ธ๋ผ์ฐ์ ๊ฐ /welcome์ ๋ค์ด์ค๋ฉด ์๋์ผ๋ก ์๋ฒ์ ์์ฒญ์ ๋ณด๋ผ ๋๋ง๋ค ์ฟ ํค ์ ์ฅ์์์ ํ๊ธธ๋์ ์กฐํํ ํ HTTP ํค๋์ ์ฟ ํค๋ฅผ ๋ฃ์ด ์๋ฒ์ ๋ณด๋ธ๋ค.
์๋ฒ๋ ์ฟ ํค๋ฅผ ์ด์ด ํ๊ธธ๋ user์ธ๊ฒ์ ํ์ธํ๋ค.
์ฟ ํค
set-cookie: sessionId=abcde1234; expires=Sat, 26-Dec-2020 00:00:00 GMT; path=/; domain=.google.com; Secure
- ์ฌ์ฉ์ฒ
- ์ฌ์ฉ์ ๋ก๊ทธ์ธ ์ธ์ ๊ด๋ฆฌ : ๋ก๊ทธ์ธ์ ํ๋ฉด ์๋ฒ์์ ์ธ์ Id๋ฅผ ๋ง๋ค์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๊ณ ํด๋ผ์ด์ธํธ์ ๋ฐํํด์ค๋ค.
ํด๋ผ์ด์ธํธ๋ ์๋ฒ์ ์์ฒญํ ๋ ๋ง๋ค ์ธ์ Id๋ฅผ ๋ณด๋ด๊ณ , ์๋ฒ๋ ๋ฐ์ ์ธ์ Id๋ฅผ ํ์ ํ ์ ์๋ค.
- ๊ด๊ณ ์ ๋ณด ํธ๋ํน
- ์ฟ ํค ์ ๋ณด๋ ํญ์ ์๋ฒ์ ์ ์ก๋จ
๋คํธ์ํฌ ํธ๋ํฝ ์ถ๊ฐ ์ ๋ฐํด์ ์ต์ํ์ ์ ๋ณด๋ง ์ฌ์ฉ : ์ธ์ Id, ์ธ์ฆ ํ ํฐ
์๋ฒ์ ์ ์กํ์ง ์๊ณ ์น ๋ธ๋ผ์ฐ์ ๋ด๋ถ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ : ์น ์คํ ๋ฆฌ์ง (localStorage, sessionStorage) ์ฐธ๊ณ
- ์ฃผ์!
๋ณด์์ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๋ ์ ์ฅํ๋ฉด ์๋๋ค! (์ฃผ๋ฏผ๋ฒํธ, ์ ์ฉ์นด๋ ๋ฒํธ ๋ฑ๋ฑ)
์ฟ ํค - ์๋ช ์ฃผ๊ธฐ
Set-Cookie: expires=Sat, 26-Dec-2020 04:39:21 GMT
- expires : ์ฟ ํค๋ฅผ ๋ฌด์ ํ์ผ๋ก ๋ณด๊ดํ ์ ์๋ค. GMT๊ธฐ์ค์ผ๋ก ๋ง๋ฃ์ผ์ด ๋๋ฉด ์ฟ ํค๋ฅผ ์๋์ผ๋ก ์ญ์ ํ๋ค.
Set-Cookie: max-age=3600
- max-age : 0์ด๋ ์์๋ฅผ ์ง์ ํ๋ฉด ์ฟ ํค๊ฐ ์ญ์ ํ๋ค.
์ฟ ํค - ์ข ๋ฅ
์ธ์ ์ฟ ํค : ๋ง๋ฃ ๋ ์ง๋ฅผ ์๋ตํ๋ฉด ๋ธ๋ผ์ฐ์ ๊ฐ ์ข ๋ฃํ ๋๊น์ง ์ ์ง
์์ ์ฟ ํค : ๋ง๋ฃ ๋ ์ง๋ฅผ ์ ๋ ฅํ๋ฉด ํด๋น ๋ ์ง๊น์ง ์ ์ง
์ฟ ํค - ๋๋ฉ์ธ
ex) domain=example.org
๋ช ์ : ๋๋ฉ์ธ์ ๋ช ์๋ฅผ ํ๋ฉด, ๋ช ์ํ ๋ฌธ์ ๊ธฐ์ค ๋๋ฉ์ธ + ์๋ธ ๋๋ฉ์ธ ํฌํจ
- example.org ์ง์ ์ ํด์ ์ฟ ํค๋ฅผ ์์ฑํ๋ฉด dev.example.org๋ ์ฟ ํค๋ฅผ ์ ๊ทผํ ์ ์๋ค.
์๋ต : ํ์ฌ ๋ฌธ์ ๊ธฐ์ค ๋๋ฉ์ธ๋ง ์ ์ฉ
- example.org์์ ์ฟ ํค๋ฅผ ์์ฑํ๋๋ฐ ๋๋ฉ์ธ ์ง์ ์ ์๋ตํ๋ฉด,
example.org์์๋ง ์ฟ ํค๋ฅผ ์ ๊ทผํ ์ ์๊ณ , ํ์ ๋๋ฉ์ธ์ธ dev.example.org๋ ์ฟ ํค๋ฅผ ์ ๊ทผํ ์ ์๋ค.
์ฟ ํค - ๊ฒฝ๋ก
ex) path=/home
๊ฒฝ๋ก๋ฅผ ํฌํจํ ํ์ ๊ฒฝ๋ก ํ์ด์ง๋ง ์ฟ ํค๋ฅผ ์ ๊ทผํ ์ ์๋ค. ์ผ๋ฐ์ ์ผ๋ก path=/ ๋ฃจํธ๋ก ์ง์ ํ๋ค.
path=/home ์ง์
/home โก๏ธ ๊ฐ๋ฅ
/home/level1 โก๏ธ ๊ฐ๋ฅ
/home/level1/level2 โก๏ธ ๊ฐ๋ฅ
/hello โก๏ธ ๋ถ๊ฐ๋ฅ
์ฟ ํค - ๋ณด์
Secure
- ์ฟ ํค๋ http, https๋ฅผ ๊ตฌ๋ถํ์ง ์๊ณ ์ ์ก์ ํ๋ค.
- Secure๋ฅผ ์ ์ฉํ๋ฉด https์ธ ๊ฒฝ์ฐ์๋ง ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก key๋ฅผ ์ ์กํ๋ค.
HttpOnly
- XXS ๊ณต๊ฒฉ์ ๋ฐฉ์งํ๋ ๊ฒ์ด๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ ๊ทผํ ์ ์๋ค(document.cookie).
- http ์ ์ก์์๋ง ์ฌ์ฉํ ์ ์๋ค.
SameSite
- XSRF ๊ณต๊ฒฉ์ ๋ฐฉ์งํ๋ ๊ฒ์ด๋ค.
- ์์ฒญ ๋๋ฉ์ธ๊ณผ ์ฟ ํค์ ์ค์ ๋ ๋๋ฉ์ธ์ด ๊ฐ์ ๊ฒฝ์ฐ์๋ง ์ฟ ํค๋ฅผ ์ ์กํ ์ ์๋ค.