๐Ÿ’ป Computer Science

07. HTTP ์›น ๊ธฐ๋ณธ ์ง€์‹ - HTTP ํ—ค๋” ๊ฐœ์š”

์• ์ •์“ฐ 2021. 5. 6. 13:27

์ผ๋ฐ˜ํ—ค๋”

HTTP ํ—ค๋” ๊ฐœ์š”

์šฉ๋„ : HTTP ์ „์†ก์— ํ•„์š”ํ•œ ๋ชจ๋“  ๋ถ€๊ฐ€์ •๋ณด

์˜ˆ) ๋ฉ”์‹œ์ง€ ๋ฐ”๋””์˜ ๋‚ด์šฉ, ๋ฉ”์‹œ์ง€ ๋ฐ”๋””์˜ ํฌ๊ธฐ, ์••์ถ•, ์ธ์ฆ, ์š”์ฒญ ํด๋ผ์ด์–ธํŠธ, ์„œ๋ฒ„ ์ •๋ณด, ์บ์‹œ ๊ด€๋ฆฌ ์ •๋ณด ...๋“ฑ๋“ฑ

ํ‘œ์ค€ ํ•ด๋”๊ฐ€ ์žˆ์ง€๋งŒ ๋„ˆ๋ฌด ๋งŽ๊ณ  ํ•„์š”์‹œ ์ž„์˜์˜ ํ—ค๋” ์ถ”๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. ์˜ˆ) TOKEN : AEJEONG

 

๊ณผ๊ฑฐ์—์˜ HTTP ํ—ค๋” ๋ถ„๋ฅ˜

Request ํ—ค๋” : ์š”์ฒญ ์ •๋ณด ์˜ˆ) User-Agent : Mozila/5.0 (Macintosh; ..) -> ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์–ด๊ฒŒ ์œ ์ €์˜ ๊ธฐ๊ธฐ ์ •๋ณด๋ฅผ ์•Œ๋ ค์ค€๋‹ค.

Response ํ—ค๋” : ์‘๋‹ต ์ •๋ณด ์˜ˆ) Server: Apache -> ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์„œ๋ฒ„ ์ •๋ณด๋ฅผ ์•Œ๋ ค์ค€๋‹ค.

General ํ—ค๋” : ๋ฉ”์‹œ์ง€ ์ „์ฒด์— ์ ์šฉ๋˜๋Š” ์ •๋ณด ์˜ˆ) Connection: close 

Entity ํ—ค๋” : ์—”ํ‹ฐํ‹ฐ ๋ฐ”๋”” ์ •๋ณด ์˜ˆ) Content-Type : text/html, Content-Length: 3423

-> HTTP BODY๋Š” Entity ๋ณธ๋ฌธ์„ ์ „๋‹ฌํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•˜๋Š”๋ฐ ์š”์ฒญ/์‘๋‹ต์—์„œ ์ „๋‹ฌํ•  ์‹ค์ œ ๋ฐ์ดํ„ฐ์ด๋‹ค. ์—ฌ๊ธฐ์„œ Entity ํ—ค๋”๋Š” Entity ๋ณธ๋ฌธ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ•ด์„ํ•  ์ˆ˜ ์žˆ๋Š” ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ด์ค€๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด ๋ฐ์ดํ„ฐ ์œ ํ˜•(html, json), ๋ฐ์ดํ„ฐ ๊ธธ์ด, ์••์ถ• ์ •๋ณด ๋“ฑ๋“ฑ 

 

2014๋…„ ์ดํ›„ ์ŠคํŽ™์ด ๋ณ€๊ฒฝ๋œ๋‹ค

- Entity -> Representation(ํ‘œํ˜„) , ํ‘œํ˜„ = ํ‘œํ˜„ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ + ํ‘œํ˜„ ๋ฐ์ดํ„ฐ ์ฆ‰ ์‹ค์ œ ์ „๋‹ฌ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œํ˜„์ด๋ผ๊ณ  ์ •์˜ํ•˜์˜€๋‹ค.

๋ชจ๋“  ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ HTTP ์›น ๊ธฐ๋ณธ ์ง€์‹ - ๊น€์˜ํ•œ / ์ธํ”„๋Ÿฐ

- ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ(body)์„ ํ†ตํ•ด ํ‘œํ˜„ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ (ํŽ˜์ด๋กœ๋“œ)

- ํ‘œํ˜„์€ ์š”์ฒญ์ด๋‚˜ ์‘๋‹ต์—์„œ ์ „๋‹ฌํ•  ์‹ค์ œ ๋ฐ์ดํ„ฐ

- ํ‘œํ˜„ ํ—ค๋”๋Š” ํ‘œํ˜„ ํ—ค๋”๋ฅผ ํ•ด์„ํ•  ์ˆ˜ ์žˆ๋Š” ์ •๋ณด ์ œ๊ณต (๋ฐ์ดํ„ฐ ์œ ํ˜•, ๊ธธ์ด, ์••์ถ• ์ •๋ณด ๋“ฑ๋“ฑ)

 

-> HTTP ๋ฉ”์‹œ์ง€๋กœ ํšŒ์›์˜ ๋Œ€ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ „๋‹ฌํ•œ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ ํ—ค๋”์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ‘œํ˜„

- Content-Type : ํ‘œํ˜„ ๋ฐ์ดํ„ฐ์˜ ํ˜•์‹ ์„ค๋ช… - ๋ฏธ๋””์–ด ํƒ€์ž…, ๋ฌธ์ž ์ธ์ฝ”๋”ฉ ์˜ˆ) text/html; charset=utf-8 , application/json

- Content-Encoding : ํ‘œํ˜„ ๋ฐ์ดํ„ฐ ์ธ์ฝ”๋”ฉ - ํ‘œํ˜„ ๋ฐ์ดํ„ฐ ์••์ถ•ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ, ๋ฐ์ดํ„ฐ ์ „๋‹ฌํ•˜๋Š” ๊ณณ์—์„œ ์••์ถ• ํ›„ ์ธ์ฝ”๋”ฉ ํ—ค๋” ์ถ”๊ฐ€, ๋ฐ์ดํ„ฐ ์ฝ๋Š” ์ชฝ์—์„œ ์••์ถ• ํ•ด์ œ

- Content-Language : ํ‘œํ˜„ ๋ฐ์ดํ„ฐ์˜ ์ž์—ฐ ์–ธ์–ด - ํ‘œํ˜„ ๋ฐ์ดํ„ฐ์˜ ์ž์—ฐ ์–ธ์–ด๋ฅผ ํ‘œํ˜„ ์˜ˆ) ko, en, en-US

- Content-Length : ๋ฐ”์ดํŠธ ๋‹จ์œ„, Transfer-Encoding(์ „์†ก ์ฝ”๋”ฉ)์„ ์‚ฌ์šฉํ•˜๋ฉด ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋œ๋‹ค.

 

 

ํ˜‘์ƒ(์ฝ˜ํ…์ธ  ๋„ค๊ณ ์ด์—์ด์…˜)

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„ ํ˜ธํ•˜๋Š” ํ‘œํ˜„ ์š”์ฒญ

-> ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์—๊ฒŒ ์›ํ•˜๋Š” ๋ฐฉ์‹์„ ์š”์ฒญํ•œ๋‹ค.

- Accept : ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„ ํ˜ธํ•˜๋Š” ๋ฏธ๋””์–ด ํƒ€์ž… ์ „๋‹ฌ

- Accept-Charset : ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„ ํ˜ธํ•˜๋Š” ๋ฌธ์ž ์ธ์ฝ”๋”ฉ

- Accept-Encoding : ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„ ํ˜ธํ•˜๋Š” ์••์ถ• ์ธ์ฝ”๋”ฉ

- Accept-Language : ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„ ํ˜ธํ•˜๋Š” ์ž์—ฐ ์–ธ์–ด

-> ํ˜‘์ƒ ํ—ค๋”๋Š” ์š”์ฒญ์‹œ์—๋งŒ ์‚ฌ์šฉ

 

ํด๋ผ์ด์–ธํŠธ์—์„œ ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค -> ์„œ๋ฒ„๋Š” ์˜์–ด๋กœ๋œ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ์‘๋‹ตํ•œ๋‹ค.

Accept-Language ๋ฅผ ์ ์šฉํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ์—์„œ ์š”์ฒญํ•  ๋•Œ Accept-Language: ko ๋ฅผ ๊ฐ™์ด ๋ณด๋‚ด๊ฒŒ ๋˜์–ด์„œ ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์›ํ•˜๋Š” ์–ธ์–ด์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์šฐ์„ ์ˆœ์œ„๋ฅผ ์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณตํ•ด์ฃผ๋Š” ์–ธ์–ด๊ฐ€ ๋…์ผ์–ด ์ผ๋•Œ ํ•œ๊ตญ ํด๋ผ์ด์–ธํŠธ๋Š” ์˜์–ด๋กค ์ข€๋” ์นœ์ˆ™ํ•ดํ•œ๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ํด๋ผ์ด์–ธํŠธ์—์„œ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ •ํ•ด ์ฃผ์–ด์„œ ์ข€๋” ์นœ์ˆ™ํ•œ ์–ธ์–ด๋กœ ๋ฆฌ์†Œ๋ฅผ ์‘๋‹ต๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

 

0~1 ๋กœ ์ˆซ์ž๊ฐ€ ๋†’์„ ์ˆ˜๋ก ์šฐ์„ ์ˆœ์œ„๊ฐ€ ํฌ๋‹ค.

์˜ˆ)

GET /event

Accept-Language: ko-KR,ko;q=0.9,en-US,q=0.8,en;q=0.7

 

์‹ค์ œ ํŽ˜์ด์ง€ Network - Headers ์‚ดํŽด๋ณด์•˜๋‹ค.

๊ตฌ์ฒด์ ์ธ ๊ฒƒ์ด ์šฐ์„ ํ•œ๋‹ค. 

Accept: text/*,text/plain,text/plain;format=flowed, */*

์ธ์‹ ๋˜๋Š” ์ˆœ์„œ : text/plain;format=flowed -> text/plain -> text/* -> */*

== ๊ตฌ์ฒด์ ์ธ ๊ฒƒ์„ ๊ธฐ์ค€์œผ๋กœ ๋ฏธ๋””์–ด ํƒ€์ž…์„ ๋งž์ถ˜๋‹ค.

 

 

์ „์†ก ๋ฐฉ์‹

- ๋‹จ์ˆœ ์ „์†ก : Content-Length ํ•œ๋ฒˆ์— ์š”์ฒญํ•˜๊ณ  ํ•œ๋ฒˆ์— ๋ฐ›๋Š”๋‹ค.

- ์••์ถ• ์ „์†ก : Content-Encoding (gzip) ์••์ถ•ํ•ด์„œ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์‘๋‹ตํ•œ๋‹ค.

- ๋ถ„ํ•  ์ „์†ก : Transfer-Encoding : chunked ์„œ๋ฒ„์—์„œ ๋งŒ๋“ค์–ด์งˆ ์‘๋‹ต์ด ๋งŒ๋“ค์–ด์งˆ ๋•Œ๋งˆ๋‹ค ๋ถ„ํ• ๋˜์„œ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ณด๋‚ธ๋‹ค. (ํ•œ๋ฒˆ์— ๋ณด๋‚ด๊ธฐ์—” ์ปค์„œ ์‹œ๊ฐ„์ด ์˜ค๋ž˜๊ฑธ๋ฆด ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ถ„ํ•  ์ „์†ก) - length๋ฅผ ๋„ฃ์œผ๋ฉด ์•ˆ๋œ๋‹ค, ๋ถ„ํ• ๋˜์–ด ์ „๋‹ฌ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ณ„์† ๋ณ€๊ฒฝ.

- ๋ฒ”์œ„ ์ „์†ก : Reang, Content-Range - ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ฒ”์œ„๋ฅผ ์ •ํ•ด์„œ ์š”์ฒญํ•˜๊ณ  ์„œ๋ฒ„๋Š” ํ•ด๋‹น ๋ฒ”์œ„๋ฅผ ์ „๋‹ฌํ•œ๋‹ค. 

 

 

์ผ๋ฐ˜ ์ •๋ณด

- From : ์œ ์ € ์—์ด์ „ํŠธ์˜ ์ด๋ฉ”์ผ ์ •๋ณด, ์ผ๋ฐ˜์ ์œผ๋กœ ์ž˜ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Œ, ๊ฒ€์ƒ‰ ์—”์ง„ ๊ฐ™์€ ๊ณณ์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ (์š”์ฒญ)

- Referer : ์ด์ „ ์›น ํŽ˜์ด์ง€ ์ฃผ์†Œ, A->B ๋กœ ์ด๋™ํ•  ๋•Œ B๋ฅผ ์š”์ฒญํ•  ๋•Œ Refere:A ๋ฅผ ํฌํ•จํ•˜์—ฌ ์š”์ฒญํ•œ๋‹ค.,์œ ์ž… ๊ฒฝ๋กœ ๋ถ„์„์ด ๊ฐ€๋Šฅํ•˜๋‹ค (์š”์ฒญ)

- User-Agent : ์œ ์ € ์—์ด์ „ํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ •๋ณด, ํด๋ผ์ด์–ธํŠธ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ •๋ณด ( ์›น ๋ธŒ๋ผ์šฐ์ € ์ •๋ณด, ๋“ฑ๋“ฑ), ํ†ต๊ณ„ ์ •๋ณด, ์–ด๋–ค ์ข…๋ฅ˜์˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•œ์ง€ ํŒŒ์•…์ด ๊ฐ€๋Šฅํ•˜๋‹ค. (์š”์ฒญ)

- Server : ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ORIGIN ์„œ๋ฒ„์˜ ์†Œํ”„ํŠธ์›จ์–ด ์ •๋ณด (์‘๋‹ต)

ORIGIN ์„œ๋ฒ„๋ž€ ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ ์ค‘๊ฐ„์˜ ํ”„๋ก์‹œ ์„œ๋ฒ„๊ฐ€ ์•„๋‹Œ ๋ฆฌ์†Œ์Šค๊ฐ€ ์žˆ๋Š” ์„œ๋ฒ„๋ฅผ ์นญํ•œ๋‹ค!

์˜ˆ) Server : Apache/2.2.22 (Debian)

- Date : ๋ฉ”์‹œ์ง€๊ฐ€ ๋ฐœ์ƒํ•œ ๋‚ ์งœ์™€ ์‹œ๊ฐ„ (์‘๋‹ต)

 

ํŠน๋ณ„ํ•œ ์ •๋ณด

- Host : ์š”์ฒญํ•œ ํ˜ธ์ŠคํŠธ ์ •๋ณด (๋„๋ฉ”์ธ) (์š”์ฒญ)  * ํ•„์ˆ˜

ํ•˜๋‚˜์˜ ์„œ๋ฒ„๊ฐ€ ์—ฌ๋Ÿฌ ๋„๋ฉ”์ธ์„ ์ฒ˜๋ฆฌ ํ•  ๋•Œ

ํ•˜๋‚˜์˜ IP ์ฃผ์†Œ์— ์—ฌ๋Ÿฌ ๋„๋ฉ”์ธ์ด ์ ์šฉ๋˜์–ด ์žˆ์„ ๋•Œ 

 

ํ•˜๋‚˜์˜ ์„œ๋ฒ„์— aaa.com, bbb.com, ccc.com ์˜ ๋„๋ฉ”์ธ์„ ํ˜ธ์ŠคํŒ…ํ•˜๊ณ  ์žˆ์„ ๋•Œ IP ๋งŒ์œผ๋กœ ์ฐพ์•„๊ฐˆ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— Host ํ•„๋“œ๋ฅผ ํ—ค๋”์— ํ•„์ˆ˜๋กœ ์ •ํ•˜์˜€๋‹ค.

 

- Location : ํŽ˜์ด์ง€ ๋ฆฌ๋‹ค์ด๋ ‰์…˜

์›น ๋ธŒ๋ผ์šฐ์ €๋Š” 3xx ์‘๋‹ต์˜ ๊ฒฐ๊ณผ์— Location ํ—ค๋”๊ฐ€ ์žˆ์œผ๋ฉด, Location ์œ„์น˜๋กœ ์ด๋™ํ•œ๋‹ค (๋ฆฌ๋‹ค์ด๋ ‰ํŠธ)

201 ์—์„œ๋Š” ์š”์ฒญ์— ์˜ํ•ด ์ƒ์„ฑ๋œ ๋ฆฌ์†Œ์Šค URI์„ Location์— ๋‹ด์•„์„œ ์‘๋‹ตํ•œ๋‹ค.

 

- Allow : ํ—ˆ์šฉ ๊ฐ€๋Šฅํ•œ HTTP ๋ฉ”์„œ๋“œ

405์—์„œ ์‘๋‹ต์„ ํฌํ•จํ•ด์•ผํ•จ Allow: GET, HEAD, PUT 

์„œ๋ฒ„์—์„œ ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋งŒ์„ ํ—ˆ์šฉํ•œ๋‹ค๊ณ  ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์•Œ๋ ค์ฃผ๋Š” ์šฉ๋„์ด๋‹ค.

 

-Retry-After : ์œ ์ € ์—์ด์ „ํŠธ๊ฐ€ ๋‹ค์Œ ์š”์ฒญ์„ ํ•˜๊ธฐ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๋Š” ์‹œ๊ฐ„

503์—์„œ ์„œ๋น„์Šค๊ฐ€ ์–ธ์ œ๊นŒ์ง€ ๋ถˆ๋Šฅ์ธ์ง€ ์•Œ๋ ค์ค„ ์ˆ˜ ์žˆ๋‹ค. Retry-Ater : Fri, 31 Dec 1999 23:59:59 GMT (๋‚ ์งœ) ,120 (์ดˆ๋‹จ์œ„ ํ‘œ๊ธฐ) ๋“ฑ์„ ์‚ฌ์šฉ 

 

 

์ธ์ฆ Header

- Authorization : ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ ์ •๋ณด๋ฅผ ์„œ๋ฒ„์— ์ „๋‹ฌ ์˜ˆ) Authorization: Basic xxxxxxxxxxx

- WWW-Authenticate : ๋ฆฌ์†Œ์Šค ์ ‘๊ทผ์‹œ ํ•„์š”ํ•œ ์ธ์ฆ ๋ฐฉ๋ฒ• ์ •์˜

๋ฆฌ์†Œ์Šค ์ ‘๊ทผ์‹œ ํ•„์š”ํ•œ ์ธ์ฆ ๋ฐฉ๋ฒ• ์ •์˜ -> 401 ์‘๋‹ต์— ๋„ฃ์–ด์ค˜์•ผ ํ•œ๋‹ค.

์˜ˆ)

HTTP/1.1 401 Unauthorized

WWW-Authenticate: Basic realm="MyRealm"

Content-Length: 0

์ข…๋ฅ˜๊ฐ€ ๋งŽ๋‹ค!

realm์ด ๋ญ์ง€?

์š”์ฒญ๋ฐ›์€ ๋ฌธ์„œ์˜ ์ง‘ํ•ฉ์„ ํฐ๋”ฐ์Œํ‘œ๋กœ ๊ฐ์‹ผ๊ฒƒ์œผ๋กœ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ด๊ฒƒ์„ ๋ณด๊ณ  ์–ด๋–ค ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.

 

์ฟ ํ‚ค

- Set-Cookie : ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ๋กœ ์ฟ ํ‚ค ์ „๋‹ฌ (์‘๋‹ต)

- Cookie : ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์—์„œ ๋ฐ›์€ ์ฟ ํ‚ค๋ฅผ ์ €์žฅํ•˜๊ณ , HTTP ์š”์ฒญ์‹œ ์„œ๋ฒ„๋กœ ์ „๋‹ฌ

 

์˜ˆ )

์ฟ ํ‚ค ๋ฏธ์‚ฌ์šฉ์‹œ

์ฒ˜์Œ ํŽ˜์ด์ง€์— ์ ‘๊ทผํ•œ๋‹ค -> ๋กœ๊ทธ์ธํ•œ๋‹ค -> ๋กœ๊ทธ์ธ ์ดํ›„๋กœ ๋‹ค์‹œ ํŽ˜์ด์ง€์— ์ ‘๊ทผํ•œ๋‹ค -> ์„œ๋ฒ„๋Š” ์†๋‹˜์œผ๋กœ ์ธ์‹ํ•œ๋‹ค.

์–ด๋–ค ์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญํ–ˆ๋Š”์ง€ ์„œ๋ฒ„๊ฐ€ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์—†๋‹ค. ์™œ? HTTP๋Š” ๋ฌด์ƒํƒœ ํ”„๋กœํ† ์ฝœ์ด๊ธฐ ๋•Œ๋ฌธ์— ์‘๋‹ตํ•˜๊ณ  ์—ฐ๊ฒฐ์ด ๋Š์–ด์ง„๋‹ค.

์ด๋Ÿด ๊ฒฝ์šฐ ๋ชจ๋“  ์š”์ฒญ์— ์ •๋ณด๋ฅผ ๋„˜๊ธฐ๋Š” ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๊ณ , ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ข…๋ฃŒ ํ›„ ๋‹ค์‹œ ์—ด๋ฉด . . .? 

 

์ฟ ํ‚ค ์‚ฌ์šฉ

์›น๋ธŒ๋ผ์šฐ์ €์—์„œ ์š”์ฒญํ•œ๋‹ค ->  ์„œ๋ฒ„์—์„œ ํ•ด๋‹น ์œ ์ € ์ •๋ณด์™€ ๋งค์นญ๋˜๋Š” key๊ฐ’์„ Set-Cookie : ๋ฅผ ๋งŒ๋“ค์–ด ์‘๋‹ตํ•œ๋‹ค.->  ํด๋ผ์ด์–ธํŠธ๋Š” ํ•ด๋‹น ์‘๋‹ต์„ ๋ฐ›์•„์„œ ์ฟ ํ‚ค ์ €์žฅ์†Œ์— ์ €์žฅํ•œ๋‹ค. -> ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญํ•  ๋•Œ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ž๋™์œผ๋กœ ์ฟ ํ‚ค์ €์žฅ์†Œ์— ์žˆ๋Š” key๊ฐ’ ์„ ์ฐพ์•„์„œ header์— ํฌํ•จํ•œ๋‹ค -> ์„œ๋ฒ„๋Š” header์— ์žˆ๋Š” ์ฟ ํ‚ค๋ฅผ ํ†ตํ•ด ์œ ์ €๋ฅผ ์‹๋ณ„ํ•œ๋‹ค.

 

์‚ฌ์šฉ์ฒ˜

- ์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ ์„ธ์…˜ ๊ด€๋ฆฌ

- ๊ด‘๊ณ  ์ •๋ณด ํŠธ๋ž˜ํ‚น

์ฟ ํ‚ค ์ •๋ณด๋Š” ํ•ญ์ƒ ์„œ๋ฒ„์— ์ „์†ก๋จ

- ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ ์ถ”๊ฐ€ ์œ ๋ฐœ (๋‹จ์ )

- ์ตœ์†Œํ•œ์˜ ์ •๋ณด๋งŒ ์‚ฌ์šฉ(์„ธ์…˜ id, ์ธ์ฆ ํ† ํฐ)

- ์„œ๋ฒ„์— ์ „์†กํ•˜์ง€ ์•Š๊ณ , ์›น ๋ธŒ๋ผ์šฐ์ € ๋‚ด๋ถ€์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์‹ถ์œผ๋ฉด ์›น ์Šคํ† ๋ฆฌ์ง€ ์ฐธ๊ณ 

  -> ํด๋ผ์ด์–ธํŠธ์—์„œ ์›น ์Šคํ† ๋ฆฌ์ง€์— ๋ณด๊ด€ํ•˜๊ณ  ์žˆ๋‹ค๊ฐ€ ํ•„์š”ํ•  ๋•Œ๋งŒ ์„œ๋ฒ„์—๊ฒŒ ์ค€๋‹ค.

* ๋ณด์•ˆ์— ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋Š” ์ €์žฅํ•˜๋ฉด ์•ˆ๋จ!

 

์‹ค๋ฌด์—์„œ ์ฟ ํ‚ค๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ชฐ๋ผ ์‚ฌ์šฉ ํ–ˆ๋˜ ๋ฐฉ๋ฒ•

์„œ๋ฒ„์—์„œ token๊ฐ’์„ http body์— ๋„ฃ์–ด์„œ ์ „๋‹ฌํ•œ๋‹ค -> ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•ด๋‹น token์„ ๋ฐ›์•„์„œ ์›น ์Šคํ† ๋ฆฌ์ง€์— ์ €์žฅํ•œ๋‹ค.-> ์š”์ฒญํ•  ๋•Œ ๋งˆ๋‹ค ์›น ์Šคํ† ๋ฆฌ์ง€์— ์žˆ๋Š” token ๊ฐ’์„ ๊บผ๋‚ด์„œ ์š”์ฒญํ•œ๋‹ค.

 

ํ•˜์ง€๋งŒ ์ฟ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด? 

์„œ๋ฒ„์—์„œ token์„ set-Cookie ํ•œ๋‹ค. -> ํด๋ผ์ด์–ธํŠธ๋Š” ์ฟ ํ‚ค ์ €์žฅ์†Œ์— ํ•ด๋‹น token์„ ์ €์žฅํ•œ๋‹ค -> ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค ( ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ฟ ํ‚ค์ €์žฅ์†Œ์— ์ž‡๋Š” token์„ ์ฐพ์•„์„œ ์š”์ฒญ์„ ๋ณด๋‚ด๊ฒ ์ง€?) 

 

์ฟ ํ‚ค - ์ƒ๋ช…์ฃผ๊ธฐ

Expires, max-age

- Set-Cookie: expires = Sat, 26-Dec-2020 .... : ๋งŒ๋ฃŒ์ผ์ด ๋˜๋ฉด ์ฟ ํ‚ค ์‚ญ์ œ

- Set-Cookie : max-age = 3600(3600์ดˆ) : 0์ด๋‚˜ ์Œ์ˆ˜๋ฅผ ์ง€์ •ํ•˜๋ฉด ์ฟ ํ‚ค ์‚ญ์ œ

- ์„ธ์…˜ ์ฟ ํ‚ค : ๋งŒ๋ฃŒ ๋‚ ์งœ๋ฅผ ์ƒ๋žตํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ € ์ข…๋ฃŒ์‹œ ๊นŒ์ง€๋งŒ ์œ ์ง€ -> ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋ชจ๋‘ ๋„๋ฉด ์ž๋™์œผ๋กœ ๋กœ๊ทธ์•„์›ƒ๋˜๋Š” ๊ฒƒ!

- ์˜์† ์ฟ ํ‚ค : ๋งŒ๋ฃŒ ๋‚ ์งœ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ํ•ด๋‹น ๋‚ ์งœ ๊นŒ์ง€ ์œ ์ง€

 

์ฟ ํ‚ค - ๋„๋ฉ”์ธ

๋ช…์‹œ : ๋ช…์‹œํ•œ ๋ฌธ์„œ ๊ธฐ์ค€ ๋„๋ฉ”์ธ + ์„œ๋ธŒ ๋„๋ฉ”์ธ ํฌํ•จ

์˜ˆ) domain=example.org๋ฅผ ์ง€์ •ํ•ด์„œ ์ฟ ํ‚ค ์ƒ์„ฑ ํ•˜๊ฒŒ ๋˜๋ฉด example.org๋Š” ๋ฌผ๋ก ์ด๊ณ  dev.example.org์˜ ์ฟ ํ‚ค์—๋„  ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค.

๋งŒ์•ฝ ๋„๋ฉ”์ธ ์ง€์ •์„ ์ƒ๋žตํ•œ๋‹ค๋ฉด example.org ์—์„œ๋งŒ ์ฟ ํ‚ค ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. dev.example.org์—์„œ๋Š” ๋ถˆ๊ฐ€๋Šฅ

 

์ฟ ํ‚ค - ๊ฒฝ๋กœ

์ด ๊ฒฝ๋กœ๋ฅผ ํฌํ•จํ•œ ํ•˜์œ„ ๊ฒฝ๋กœ ํŽ˜์ด์ง€๋งŒ ์ฟ ํ‚ค ์ ‘๊ทผ

์ผ๋ฐ˜์ ์œผ๋กœ path=/ ๋ฃจํŠธ๋กœ ์ง€์ • -> ์ผ๋ฐ˜์ ์œผ๋กœ ์ „์ฒด์ ์œผ๋กœ ์ฟ ํ‚ค์ „์†ก์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—

 

์ฟ ํ‚ค - ๋ณด์•ˆ

- Secure

์ฟ ํ‚ค๋Š” http, https ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๊ณ  ์ „์†กํ•˜์ง€๋งŒ Secure๋ฅผ ์ ์šฉํ•˜๋ฉด https์ธ ๊ฒฝ์šฐ์—๋งŒ ์ „์†ก

- HttpOnly

XSS ๊ณต๊ฒฉ ๋ฐฉ์ง€, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์ ‘๊ทผ ๋ถˆ๊ฐ€ํ•˜๊ฒŒ ํ•œ๋‹ค. ( document.cookie )

HTTP ์ „์†ก์—๋งŒ ์‚ฌ์šฉ

- SameSite

XSRF ๊ณต๊ฒฉ ๋ฐฉ์ง€

์š”์ฒญ ๋„๋ฉ”์ธ๊ณผ ์ฟ ํ‚ค์— ์„ค์ •๋œ ๋„๋ฉ”์ธ์ด ๊ฐ™์€ ๊ฒฝ์šฐ๋งŒ ์ฟ ํ‚ค ์ „์†ก 

 

๋ฐ˜์‘ํ˜•