์›น ์„œ๋น„์Šค

HTTP ํ—ค๋”1 - ์ผ๋ฐ˜ ํ—ค๋”

alswlfl 2022. 12. 4. 13:42

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

HTTP ํ—ค๋”

  • header-field=field-name ":" OWS field-value OWS (OWS: ๋„์–ด์“ฐ๊ธฐ ํ—ˆ์šฉ)
  • field-name์€ ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ ์—†์Œ

 [์šฉ๋„]

  • HTTP ์ „์†ก์— ํ•„์š”ํ•œ ๋ชจ๋“  ๋ถ€๊ฐ€์ •๋ณด
  • ex) ๋ฉ”์‹œ์ง€ ๋ฐ”๋””์˜ ๋‚ด์šฉ, ๋ฉ”์‹œ์ง€ ๋ฐ”๋””์˜ ํฌ๊ธฐ, ์••์ถ•, ์ธ์ฆ, ์š”์ฒญ ํด๋ผ์ด์–ธํŠธ, ์„œ๋ฒ„ ์ •๋ณด, ์บ์‹œ ๊ด€๋ฆฌ ์ •๋ณด...
  • ํ‘œ์ค€ ํ—ค๋”๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์€
  • ํ•„์š”์‹œ ์ž„์˜์˜ ํ—ค๋” ์ถ”๊ฐ€ ๊ฐ€๋Šฅ → helloworld: hihi

ํ—ค๋” ๋ถ„๋ฅ˜

  • RFC2616(๊ณผ๊ฑฐ) 
    • General ํ—ค๋”: ๋ฉ”์‹œ์ง€ ์ „์ฒด์— ์ ์šฉ๋˜๋Š” ์ •๋ณด ex) Connection: close
    • Request ํ—ค๋”: ์š”์ฒญ ์ •๋ณด ex) User-Agent: Mozilla/5.0
    • Response ํ—ค๋”: ์‘๋‹ต ์ •๋ณด ex) Server: Apache
    • Entity ํ—ค๋”: ์—”ํ‹ฐํ‹ฐ ๋ฐ”๋”” ์ •๋ณด ex) Content-Type: text/html, Content-Length: 3423
    • ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ(message body)์€ ์—”ํ‹ฐํ‹ฐ ๋ณธ๋ฌธ์„ ์ „๋‹ฌํ•˜๋Š”๋ฐ ์‚ฌ์šฉ
    • ์—”ํ‹ฐํ‹ฐ ๋ณธ๋ฌธ์€ ์š”์ฒญ์ด๋‚˜ ์‘๋‹ต์—์„œ ์ „๋‹ฌํ•  ์‹ค์ œ ๋ฐ์ดํ„ฐ
    • ์—”ํ‹ฐํ‹ฐ ํ—ค๋”๋Š” ์—”ํ‹ฐํ‹ฐ ๋ณธ๋ฌธ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ•ด์„ํ•  ์ˆ˜ ์žˆ๋Š” ์ •๋ณด ์ œ๊ณต
    • ๋ฐ์ดํ„ฐ ์œ ํ˜•(html, json), ๋ฐ์ดํ„ฐ ๊ธธ์ด, ์••์ถ• ์ •๋ณด ๋“ฑ๋“ฑ 
     
  • RFC723x ๋ณ€ํ™” 
    • ์—”ํ‹ฐํ‹ฐ(Entity) -> ํ‘œํ˜„(Representation)
    • Representation = representation Metadata + Representation Data
    • ํ‘œํ˜„ = ํ‘œํ˜„ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ + ํ‘œํ˜„ ๋ฐ์ดํ„ฐ
    • ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์„ ํ†ตํ•ด ํ‘œํ˜„ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ
    • ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ = ํŽ˜์ด๋กœ๋“œ(payload)
    • ํ‘œํ˜„์€ ์š”์ฒญ์ด๋‚˜ ์‘๋‹ต์—์„œ ์ „๋‹ฌํ•  ์‹ค์ œ ๋ฐ์ดํ„ฐ
    • ํ‘œํ˜„ ํ—ค๋”๋Š” ํ‘œํ˜„ ๋ฐ์ดํ„ฐ๋ฅผ ํ•ด์„ํ•  ์ˆ˜ ์žˆ๋Š” ์ •๋ณด ์ œ๊ณต
      • ๋ฐ์ดํ„ฐ ์œ ํ˜•(html, json), ๋ฐ์ดํ„ฐ ๊ธธ์ด, ์••์ถ• ์ •๋ณด ๋“ฑ๋“ฑ
    • ์ฐธ๊ณ : ํ‘œํ˜„ ํ—ค๋”๋Š” ํ‘œํ˜„ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์™€, ํŽ˜์ด๋กœ๋“œ ๋ฉ”์‹œ์ง€๋ฅผ ๊ตฌ๋ถ„ํ•ด์•ผ ํ•˜์ง€๋งŒ, ์ƒ๋žต

RFC2616(๊ณผ๊ฑฐ)
RFC723x


ํ‘œํ˜„

  • ํ‘œํ˜„์ด๋ผ๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ html์ด๋ผ๋Š” ํ‘œํ˜„์œผ๋กœ ์ „๋‹ฌํ• ์ง€ JSON์ด๋ผ๋Š” ํ‘œํ˜„์œผ๋กœ ์ „๋‹ฌํ• ์ง€ ์ •๋ณด ์•Œ๋ ค์คŒ
  • Content-Type: ํ‘œํ˜„ ๋ฐ์ดํ„ฐ์˜ ํ˜•์‹ → html๋กœ ์ „์†ก๋˜์—ˆ๋Š”์ง€, json์œผ๋กœ ์ „์†ก๋˜์—ˆ๋Š”์ง€
  • Content-Encoding: ํ‘œํ˜„ ๋ฐ์ดํ„ฐ์˜ ์••์ถ• ๋ฐฉ์‹
  • Content-Language: ํ‘œํ˜„ ๋ฐ์ดํ„ฐ์˜ ์ž์—ฐ ์–ธ์–ด → ํ•œ๊ตญ์–ด์ธ์ง€ ์˜์–ด์ธ์ง€
  • Content-Length: ํ‘œํ˜„ ๋ฐ์ดํ„ฐ์˜ ๊ธธ์ด → ๋ช…ํ™•ํ•˜๊ฒŒ ํ‘œํ˜„ ํ—ค๋”๋ผ๊ธฐ ๋ณด๋‹ค๋Š”, ํŽ˜์ด๋กœ๋“œ์— ํ•ด๋‹นํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ์ƒ๊ฐํ•˜๋ฉด ๋„ˆ๋ฌด ๋ณต์žก
  • ํ‘œํ˜„ ํ—ค๋”๋Š” ์ „์†ก, ์‘๋‹ต ๋‘˜๋‹ค ์‚ฌ์šฉ

Content-Type: ํ‘œํ˜„ ๋ฐ์ดํ„ฐ์˜ ํ˜•์‹ ์„ค๋ช…

  • ๋ฏธ๋””์–ด ํƒ€์ž…, ๋ฌธ์ž ์ธ์ฝ”๋”ฉ
  • ex) text/html; charset=utf-8, application/json, image/png

Content-Encoding: ํ‘œํ˜„ ๋ฐ์ดํ„ฐ ์ธ์ฝ”๋”ฉ

  • ํ‘œํ˜„ ๋ฐ์ดํ„ฐ๋ฅผ ์••์ถ•ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ
  • ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ณณ์—์„œ ์••์ถ• ํ›„ ์ธ์ฝ”๋”ฉ ํ—ค๋” ์ถ”๊ฐ€
  • ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š” ์ชฝ์—์„œ ์ธ์ฝ”๋”ฉ ํ—ค๋”์˜ ์ •๋ณด๋กœ ์••์ถ• ํ•ด์ œ
  • ex) gzip, deflate, identity(์••์ถ•์•ˆํ•œ๋‹ค๋Š” ์˜๋ฏธ)

Content-Language: ํ‘œํ˜„ ๋ฐ์ดํ„ฐ์˜ ์ž์—ฐ ์–ธ์–ด

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

Content-Length: ํ‘œํ˜„ ๋ฐ์ดํ„ฐ์˜ ๊ธธ์ด

  • ๋ฐ”์ดํŠธ ๋‹จ์œ„
  • Transfer-Encoding(์ „์†ก ์ฝ”๋”ฉ)์„ ์‚ฌ์šฉํ•˜๋ฉด Cotent-Length๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋จ

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

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

  • Accept: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„ ํ˜ธํ•˜๋Š” ๋ฏธ๋””์–ด ํƒ€์ž… ์ „๋‹ฌ
  • Accept-Charset: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„ ํ˜ธํ•˜๋Š” ๋ฌธ์ž ์ธ์ฝ”๋”ฉ
  • Accept-Encoding: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„ ํ˜ธํ•˜๋Š” ์••์ถ• ์ธ์ฝ”๋”ฉ
  • Accept-Language: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„ ํ˜ธํ•˜๋Š” ์ž์—ฐ ์–ธ์–ด
  • ํ˜‘์ƒ ํ—ค๋”๋Š” ์š”์ฒญ์‹œ์—๋งŒ ์‚ฌ์šฉ

Accept-Language 

  • ์ ์šฉ ์ „

Accept-Language ์ ์šฉ ์ „

- ํ•œ๊ตญ์–ด ๋ธŒ๋ผ์šฐ์ €๋กœ ์™ธ๊ตญ์— ์žˆ๋Š” event์‚ฌ์ดํŠธ๋กœ ๋“ค์–ด๊ฐ€๋Š”๋ฐ, ํ•ด๋‹น ์„œ๋ฒ„๋Š” ๋‹ค์ค‘ ์–ธ์–ด๋ฅผ ์ง€์›ํ•˜๋Š” ์„œ๋ฒ„์ด์ง€๋งŒ, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•œ๊ตญ์–ด์ธ์ง€ ์˜์–ด์ธ์ง€ ์•Œ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์—, 1์ˆœ์œ„์ธ ์˜์–ด๋กœ ์ „๋‹ฌ

  • ์ ์šฉ ํ›„

Accept-Language ์ ์šฉ ํ›„

- ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„๋กœ ์š”์ฒญ์„ ์ „๋‹ฌ ์‹œ, ํ•œ๊ตญ์–ด๋กœ ๋ณด๋‚ด๋‹ฌ๋ผ๊ณ  Accept-Language๋ฅผ ๊ฐ™์ด ๋ณด๋ƒ„, ๊ทธ ์š”์ฒญ์„ ๋ฐ›์€ ์„œ๋ฒ„๋Š” ํ•œ๊ตญ์–ด๋„ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•œ๊ตญ์–ด๋กœ ์‘๋‹ต์„ ๋ณด๋ƒ„

  • ์›ํ•˜๋Š” ์–ธ์–ด๊ฐ€ ์—†์„ ์‹œ

- ํ•œ๊ตญ์–ด๋กœ ์ง€์›์„ ํ•˜์˜€์ง€๋งŒ, ํ•ด๋‹น ์„œ๋ฒ„๋Š” ๊ธฐ๋ณธ ๋…์ผ์–ด์™€ ์˜์–ด ์ง€์›๋งŒ ์กด์žฌํ•œ๋‹ค๋ฉด ํ•ด๋‹น ์„œ๋ฒ„๋Š” ํ•œ๊ตญ์–ด๊ฐ€ ์—†์œผ๋ฏ€๋กœ ๊ธฐ๋ณธ ์–ธ์–ด์ธ ๋…์ผ์–ด๋กœ ์‘๋‹ต์„ ๋ณด๋‚ด๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒ → ์šฐ์„ ์ˆœ์œ„ ํ•„์š”

ํ˜‘์ƒ๊ณผ ์šฐ์„ ์ˆœ์œ„1 (Quality Values(q))

  • Quality Values(q) ๊ฐ’ ์‚ฌ์šฉ
  • 0~1, ํด์ˆ˜๋ก ๋†’์€ ์šฐ์„ ์ˆœ์œ„
  • ์ƒ๋žตํ•˜๋ฉด 1
  • Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7
    • 1. ko-KR;q=1 (q์ƒ๋žต)
    • 2. ko;q=0.9
    • 3. en-US;q=0.8
    • 4. en;q=0.7

ํ˜‘์ƒ๊ณผ ์šฐ์„ ์ˆœ์œ„2 (Quality Values(q))

  • ๊ตฌ์ฒด์ ์ธ ๊ฒƒ์„ ์šฐ์„ 
  • Accept: text/*, text/plain, text/plain;format=flowed, */*
    • 1. text/plain; format=flowed
    • 2. text/plain
    • 3. text/*
    • 4. */*

ํ˜‘์ƒ๊ณผ ์šฐ์„ ์ˆœ์œ„3 (Quality Values(q))

  • ๊ตฌ์ฒด์ ์ธ ๊ฒƒ์„ ๊ธฐ์ค€์œผ๋กœ ๋ฏธ๋””์–ด ํƒ€์ž…์„ ๋งž์ถค
  • 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-Encoding
  • ๋ฌด์—‡์œผ๋กœ ์••์ถ•๋˜์–ด ์žˆ๋Š”์ง€ ๊ฐ™์ด ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ณด๋‚ด์ค˜์•ผํ•จ

๋ถ„ํ•  ์ „์†ก

  • Transfer-Encoding
  • ์šฉ๋Ÿ‰์ด ํฐ ๋ฐ์ดํ„ฐ์ธ ๊ฒฝ์šฐ ๋ถ„ํ• ํ•˜์—ฌ ์‚ฌ์šฉ
  • ์ชผ๊ฐœ์„œ ๋ณด๋ƒ„
  • ๋ถ„ํ•  ์ „์†ก์—์„œ๋Š” Content-Length๋ฅผ ๋ณด๋‚ด๋ฉด ์•ˆ๋จ → ๊ธธ์ด๋ฅผ ์•Œ ์ˆ˜ ์—†๋‹ค

๋ฒ”์œ„ ์ „์†ก

  • Range, Content-Range
  • ์›ํ•˜๋Š” ๋ฒ”์œ„ ์š”์ฒญํ•˜๊ณ  ์‘๋‹ต

์ผ๋ฐ˜ ์ •๋ณด

(์ •๋ณด์„ฑ ํ—ค๋”)

From: ์œ ์ € ์—์ด์ „ํŠธ์˜ ์ด๋ฉ”์ผ ์ •๋ณด

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

Referer: ์ด์ „ ์›น ํŽ˜์ด์ง€ ์ฃผ์†Œ

  • ํ˜„์žฌ ์š”์ฒญ๋œ ํŽ˜์ด์ง€์˜ ์ด์ „ ์›น ํŽ˜์ด์ง€ ์ฃผ์†Œ(๋ฐ”๋กœ ์ง์ „ ์›น ํŽ˜์ด์ง€ ์ฃผ์†Œ)
  • A -> B๋กœ ์ด๋™ํ•˜๋Š” ๊ฒฝ์šฐ B๋ฅผ ์š”์ฒญํ•  ๋•Œ Referer:A ๋ฅผ ํฌํ•จํ•ด์„œ ์š”์ฒญ
  • Referer๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์œ ์ž… ๊ฒฝ๋กœ ๋ถ„์„ ๊ฐ€๋Šฅ
  • ์š”์ฒญ์—์„œ ์‚ฌ์šฉ
  • ์ฐธ๊ณ : referer๋Š” ๋‹จ์–ด referrer์˜ ์˜คํƒ€

User-Agent: ์œ ์ € ์—์ด์ „ํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ •๋ณด

  • user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36
  • ํด๋ผ์ด์–ธํŠธ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ •๋ณด(์›น ๋ธŒ๋ผ์šฐ์ € ์ •๋ณด ๋“ฑ๋“ฑ)
  • ํ†ต๊ณ„ ์ •๋ณด
  • ์–ด๋–ค ์ข…๋ฅ˜์˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”์ง€ ํŒŒ์•… ๊ฐ€๋Šฅ
  • ์š”์ฒญ์—์„œ ์‚ฌ์šฉ

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

  • ORIGIN Server: ์‹ค์ œ ๋‚˜์˜ ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์„ ๋ณด๋‚ด๋Š” ์ตœ์ข… ์„œ๋ฒ„
  • Server: Apache/2.2.22 (Debian)
  • server: nginx
  • ์‘๋‹ต์—์„œ ์‚ฌ์šฉ

Date: ๋ฉ”์‹œ์ง€๊ฐ€ ๋ฐœ์ƒํ•œ ๋‚ ์งœ์™€ ์‹œ๊ฐ„

  • Date: Tue, 15 Nov 1994 08:12:31 GMT
  • ์‘๋‹ต์—์„œ ์‚ฌ์šฉ

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

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

  • ์š”์ฒญ์—์„œ ์‚ฌ์šฉ
  • ํ•„์ˆ˜
  • ํ•˜๋‚˜์˜ ์„œ๋ฒ„๊ฐ€ ์—ฌ๋Ÿฌ ๋„๋ฉ”์ธ์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ๋•Œ
  • ํ•˜๋‚˜์˜ IP ์ฃผ์†Œ์— ์—ฌ๋Ÿฌ ๋„๋ฉ”์ธ์ด ์ ์šฉ๋˜์–ด ์žˆ์„ ๋•Œ

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

  • ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” 3xx ์‘๋‹ต์˜ ๊ฒฐ๊ณผ์— Location ํ—ค๋”๊ฐ€ ์žˆ์œผ๋ฉด, Location ์œ„์น˜๋กœ ์ž๋™ ์ด๋™(๋ฆฌ๋‹ค์ด๋ ‰ํŠธ)
  • ์‘๋‹ต์ฝ”๋“œ 3xx์—์„œ ์„ค๋ช…
  • 201 (Created): Location๊ฐ’์€ ์š”์ฒญ์— ์˜ํ•ด ์ƒ์„ฑ๋œ ๋ฆฌ์†Œ์Šค URI
  • 3xx (Redirection): Location ๊ฐ’์€ ์š”์ฒญ์„ ์ž๋™์œผ๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•˜๊ธฐ ์œ„ํ•œ ๋Œ€์ƒ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ด

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

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

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

  • 503 (Service Unavailabe): ์„œ๋น„์Šค๊ฐ€ ์–ธ์ œ๊นŒ์ง€ ๋ถˆ๋Šฅ์ธ์ง€ ์•Œ๋ ค์ค„ ์ˆ˜ ์žˆ์Œ
  • Retry-After: Fri, 31 Dec 1999 23:59:59 GMT(๋‚ ์งœ ํ‘œ๊ธฐ)
  • Retry-After: 120 (์ดˆ๋‹จ์œ„ ํ‘œ๊ธฐ)

์ธ์ฆ

Authorization: ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ ์ •๋ณด๋ฅผ ์„œ๋ฒ„์— ์ „๋‹ฌ

  • Authorization: Basic xxxxxxxxxxxxxxxxx

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

  • ๋ฆฌ์†Œ์Šค ์ ‘๊ทผ์‹œ ํ•„์š”ํ•œ ์ธ์ฆ ๋ฐฉ๋ฒ• ์ •์˜
  • 401 Unauthorized ์‘๋‹ต๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ
  • WWW-Authenticate: Newauth realm="apps", type=1, title="Login to /"apps/"", Basic realm="simple"

์ฟ ํ‚ค

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

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

 

์ฟ ํ‚ค ๋ฏธ์‚ฌ์šฉ: HTTP๋Š” ๋ฌด์ƒํƒœ ํ”„๋กœํ† ์ฝœ์ด๋ฏ€๋กœ, ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ์ฃผ๊ณ  ๋ฐ›์œผ๋ฉด ์—ฐ๊ฒฐ์ด ๋Š์–ด์ง€๋Š”๋ฐ, ์ด๋•Œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋‹ค์‹œ ์š”์ฒญํ•˜๋ฉด ์„œ๋ฒ„๋Š” ์ด์ „ ์š”์ฒญ์„ ๊ธฐ์–ตํ•˜์ง€ ๋ชปํ•œ๋‹ค. ์ฆ‰, ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๋Š” ์„œ๋กœ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜์ง€ ์•Š์Œ

ex) ๋กœ๊ทธ์ธ ํ›„ welcome ํŽ˜์ด์ง€์— ์ ‘๊ทผํ•  ๋•Œ, ํ•ด๋‹น ์„œ๋ฒ„๋Š” ๋กœ๊ทธ์ธํ•œ ์›น๋ธŒ๋ผ์šฐ์ €๋ฅผ ๊ธฐ์–ต ๋ชปํ•จ

๋Œ€์•ˆ: ๋ชจ๋“  ์š”์ฒญ๊ณผ ๋งํฌ์— ์‚ฌ์šฉ์ž ์ •๋ณด ํฌํ•จ → ๋ชจ๋“  ์š”์ฒญ์— ์‚ฌ์šฉ์ž ์ •๋ณด๊ฐ€ ํฌํ•จ๋˜๋„๋ก ๊ฐœ๋ฐœํ•ด์•ผํ•จ → ๋ฒˆ๊ฑฐ๋Ÿฌ์›€(์ฟ ํ‚ค ์‚ฌ์šฉ ์ด์œ )

์ฟ ํ‚ค์‚ฌ์šฉ

๋กœ๊ทธ์ธ
๋กœ๊ทธ์ธ ํ›„ welcomeํŽ˜์ด์ง€ ์ ‘๊ทผ

1. ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ post๋กœ ๋กœ๊ทธ์ธ์„ ํ•จ

2. ์„œ๋ฒ„๋Š” Set-Cookie์— user=ํ™๊ธธ๋™์ด๋ผ๋Š” ๋‚ด์šฉ์„ ๋„ฃ์–ด์„œ ๋ณด๋ƒ„

3. ์›น ๋ธŒ๋ผ์šฐ์ €์— ์žˆ๋Š” ์ฟ ํ‚ค ์ €์žฅ์†Œ์— Set-Cookie ๋‚ด์šฉ ์ €์žฅ

4. ๋กœ๊ทธ์ธ ์ดํ›„ ์›น๋ธŒ๋ผ์šฐ์ €๊ฐ€ welcome ํŽ˜์ด์ง€ ์ ‘๊ทผ ํ• ๋•Œ, ์ž๋™์œผ๋กœ ์ฟ ํ‚ค๊ฐ’์„ ๊บผ๋‚ด ์„œ๋ฒ„์— ์ „๋‹ฌ

๋ชจ๋“  ์š”์ฒญ์— ์ฟ ํ‚ค ์ •๋ณด ์ž๋™ ํฌํ•จ

์ฟ ํ‚ค

ex) set-cookie: sessionId=abcde1234; expires=Sat, 26-Dec-2020 00:00:00 GMT; path=/; domain=google.com; Secure

  • ์‚ฌ์šฉ์ฒ˜
    • ์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ ์„ธ์…˜ ๊ด€๋ฆฌ
    • ๊ด‘๊ณ  ์ •๋ณด ํŠธ๋ž˜ํ‚น
  • ์ฟ ํ‚ค ์ •๋ณด๋Š” ํ•ญ์ƒ ์„œ๋ฒ„์— ์ „์†ก๋จ
    • ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ ์ถ”๊ฐ€ ์œ ๋ฐœ
    • ์ตœ์†Œํ•œ์˜ ์ •๋ณด๋งŒ ์‚ฌ์šฉ(์„ธ์…˜ id, ์ธ์ฆ ํ† ํฐ)
    • ์„œ๋ฒ„์— ์ „์†กํ•˜์ง€ ์•Š๊ณ , ์›น ๋ธŒ๋ผ์šฐ์ € ๋‚ด๋ถ€์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์‹ถ์œผ๋ฉด ์›น ์Šคํ† ๋ฆฌ์ง€(localStorage, sessionStorage)์ฐธ๊ณ 
  • ์ฃผ์˜!
    • ๋ณด์•ˆ์— ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋Š” ์ €์žฅํ•˜๋ฉด ์•ˆ๋จ(์ฃผ๋ฏผ๋ฒˆํ˜ธ, ์‹ ์šฉ์นด๋“œ ๋ฒˆํ˜ธ ๋“ฑ๋“ฑ)

์ฟ ํ‚ค - ์ƒ๋ช…์ฃผ๊ธฐ (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
  • ๋ช…์‹œ: ๋ช…์‹œํ•œ ๋ฌธ์„œ ๊ธฐ์ค€ ๋„๋ฉ”์ธ + ์„œ๋ธŒ ๋„๋ฉ”์ธ ํฌํ•จ
    • domain=example.org๋ฅผ ์ง€์ •ํ•ด์„œ ์ฟ ํ‚ค ์ƒ์„ฑ
      • example.org๋Š” ๋ฌผ๋ก ์ด๊ณ 
      • dev.example.org๋„ ์ฟ ํ‚ค ์ ‘๊ทผ
  • ์ƒ๋žต: ํ˜„์žฌ ๋ฌธ์„œ ๊ธฐ์ค€ ๋„๋ฉ”์ธ๋งŒ ์ ์šฉ
    • example.org์—์„œ ์ฟ ํ‚ค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  domain์ง€์ •์„ ์ƒ๋žต
      • example.org์—์„œ๋งŒ ์ฟ ํ‚ค ์ ‘๊ทผ
      • dev.example.org๋Š” ์ฟ ํ‚ค ๋ฏธ์ ‘๊ทผ

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

  • ex) path=/home
  • ์ด ๊ฒฝ๋กœ๋ฅผ ํฌํ•จํ•œ ํ•˜์œ„ ๊ฒฝ๋กœ ํŽ˜์ด์ง€๋งŒ ์ฟ ํ‚ค ์ ‘๊ทผ
  • ์ผ๋ฐ˜์ ์œผ๋กœ path=/ ๋ฃจํŠธ๋กœ ์ง€์ •
  • ex)
    • path=/home ์ง€์ •
    • /home -> ๊ฐ€๋Šฅ
    • /home/level1 -> ๊ฐ€๋Šฅ
    • /home/level1/level2 -> ๊ฐ€๋Šฅ
    • /hello -> ๋ถˆ๊ฐ€๋Šฅ

์ฟ ํ‚ค - ๋ณด์•ˆ(Secure, HttpOnly, SameSite)

  • Secure
    • ์ฟ ํ‚ค๋Š” http, https๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๊ณ  ์ „์†ก
    • Secure๋ฅผ ์ ์šฉํ•˜๋ฉด https์ธ ๊ฒฝ์šฐ์—๋งŒ ์ „์†ก
  • HttpOnly
    • XSS ๊ณต๊ฒฉ ๋ฐฉ์ง€
    • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์ ‘๊ทผ ๋ถˆ๊ฐ€(document.cookie)
    • HTTP ์ „์†ก์—๋งŒ ์‚ฌ์šฉ
  • SameSite
    • XSRF ๊ณต๊ฒฉ ๋ฐฉ์ง€
    • ์š”์ฒญ ๋„๋ฉ”์ธ๊ณผ ์ฟ ํ‚ค์— ์„ค์ •๋œ ๋„๋ฉ”์ธ์ด ๊ฐ™์€ ๊ฒฝ์šฐ๋งŒ ์ฟ ํ‚ค ์ „์†ก