JiwonDev

HTTP #8 ํ—ค๋” (์š”์ฒญํ—ค๋”, ์‘๋‹ตํ—ค๋”, ์ฟ ํ‚ค, ์บ์‹œ, ํ”„๋ก์‹œ)

by JiwonDev

HTTP ํ—ค๋”์—๋Š” StartLine ์ •๋ณด (HTTP ๋ฒ„์ „, URI, ์ƒํƒœ์ฝ”๋“œ)๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ์ •๋ณด๋ฅผ ๋„ฃ๋Š”๋‹ค.

Key-Value ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๋ฉฐ ํ•˜๋‚˜์˜ Key์— ์—ฌ๋Ÿฌ๊ฐœ์˜ ๊ฐ’์„ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฌผ๋ก  ์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๊ฑฐ์˜ ์—†์ง€๋งŒ.

์ฐธ๊ณ ๋กœ ํ—ค๋”์ด๋ฆ„(key)๋Š” ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๋Š”๋‹ค. (๋‚ด์šฉ, ์ฆ‰ ์ž…๋ ฅ๊ฐ’๋งŒ ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„)

 

# 1999๋…„ - HTTP ํ‘œ์ค€ RFC2612

ํ—ค๋”์˜ ์ข…๋ฅ˜๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ณ  ์ˆœ์„œ๋Œ€๋กœ ์ž‘์„ฑํ–ˆ์—ˆ๋‹ค.

 

# 2014๋…„ - ํ‘œ์ค€ RFC7230~5

[Entityํ—ค๋”์™€ Body๋ฉ”์‹œ์ง€]๋ฅผ  [Representationํ—ค๋”์™€ Payload๋ฉ”์‹œ์ง€]๋กœ ๋ฐ”๊พธ๊ณ  HTTP ์ŠคํŽ™์„ ํฌ๊ฒŒ ๊ฐœ์ •ํ•˜์˜€๋‹ค.

ํ•œ๊ธ€๋กœํ•˜๋ฉด [์—”ํ‹ฐํ‹ฐ ํ—ค๋”์™€ ๋ฐ”๋””๋ฉ”์‹œ์ง€]๊ฐ€  [ํ‘œํ˜„ํ—ค๋”์™€ ํŽ˜์ด๋กœ๋“œ]๋กœ ๋ฐ”๋€ ์…ˆ.

 

์ด์ œ Request, Response์˜ ๊ตฌ๋ถ„์ด ์—†๋‹ค.

ํ‘œํ˜„ ํ—ค๋”๋Š” ์ „์†ก ๋ฐ์ดํ„ฐ๋ฅผ ํ•ด์„ํ•  ์ˆ˜ ์žˆ๋Š” ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ด์ฃผ๋ฉฐ [Request Response]์— ๋‘˜ ๋‹ค ์‚ฌ์šฉํ•œ๋‹ค.

โžก Contet-length์ฒ˜๋Ÿผ ํ•ด์„ ์ •๋ณด๊ฐ€ ์•„๋‹ˆ๋ผ ๊ฐ’ ์ž์ฒด๊ฐ€ ์ •๋ณด์ธ ๊ฒฝ์šฐ๋Š” Payload ํ—ค๋”๋ผ๊ณ  ๋งํ•œ๋‹ค.

 

 


# ํ‘œํ˜„ ํ—ค๋”(Content Representation)

๋ฉ”์‹œ์ง€ ๋‚ด์šฉ์— ๋Œ€ํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

์ปจํ…์ธ (Body)์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ

  • Content-Type: ํ‘œํ˜„ ๋ฐ์ดํ„ฐ์˜ ํ˜•์‹, [ text/html, application/json, image/png, multipart/...๋“ฑ ๋ฐ์ดํ„ฐ ํ˜•์‹์ •๋ณด]
  • Content-Encoding: ํ‘œํ˜„ ๋ฐ์ดํ„ฐ์˜ ์••์ถ• ๋ฐฉ์‹, [gzip, defalte, identity(=์••์ถ•์•ˆํ–ˆ์Œ) ๋“ฑ ํ˜„์žฌ ๋ฐ์ดํ„ฐ์˜ ์••์ถ•๋ฐฉ์‹]
  • Content-Language: ํ‘œํ˜„ ๋ฐ์ดํ„ฐ์˜ ์ž์—ฐ ์–ธ์–ด [ ko, jp, en, en-US ]
  • Content-Length: ํ‘œํ˜„ ๋ฐ์ดํ„ฐ์˜ ๊ธธ์ด [ ๋ฐ”์ดํŠธ ๋‹จ์œ„ Body ๊ธธ์ด ]
    โžก ์ฐธ๊ณ ๋กœ Transfer-Encoding์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ธธ์ด๊ฐ€ ํฌํ•จ๋˜์–ด์žˆ์–ด Content-Length๋ฅผ ๋”ฐ๋กœ ์“ฐ๋ฉด ์•ˆ๋œ๋‹ค. 

 


# ํ˜‘์ƒ ํ—ค๋”(Content Negotiation)

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๋‚ด๋Š” ๋ฐ์ดํ„ฐ์˜ ํ˜•์‹, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„ ํ˜ธํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ํ˜•์‹์„ ์ž…๋ ฅํ•œ๋‹ค.

Accept์— ์ ํ˜€์žˆ๋Š” ์ธ์ฝ”๋”ฉ์„ ์ง€์›ํ•˜์ง€์•Š๋Š”๋‹ค๋ฉด, ์„œ๋ฒ„์—์„œ๋Š” ๋‹ค๋ฅธ ๊ฑธ ๋ณด๋‚ด๊ฑฐ๋‚˜ 400์˜ค๋ฅ˜๋ฅผ ๋„์šธ ์ˆ˜ ์žˆ๋‹ค.

 

 

  • ์ด๋ฅผ ํ˜‘์ƒ์ด๋ผ๊ณ  ํ‘œํ˜„ํ•œ ์ด์œ ๋Š”, ์›ํ•˜๋Š” ์‘๋‹ต ํ˜•์‹์ด ์—†๋‹ค๋ฉด ๋‹ค์Œ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ด๋ ‡๊ฒŒ ๊ฐ๊ฐ์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋‹ค๋ฅด๊ฒŒ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. text/html;q=1, application/json;q=0.9

 

 

  • ๋งŒ์•ฝ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ™๊ฑฐ๋‚˜ ํฌํ•จ๊ด€๊ณ„(text/*, text/html/..)๋ผ๋ฉด ๊ตฌ์ฒด์ ์ธ ๊ฒƒ์„ ๋จผ์ € ์‚ฌ์šฉํ•œ๋‹ค.

*/*๋Š” ์•„๋ฌด๊ฑฐ๋‚˜ ๋ฐ›๊ฒ ๋‹ค๋Š” ์˜๋ฏธ

 


# ์ „์†ก๋ฐฉ์‹ ํ—ค๋” (Transfer-Encoding, Content-Range)

์ผ๋ฐ˜์ „์†ก, ์••์ถ•์ „์†ก, ๋ถ„ํ• ์ „์†ก๋“ฑ ๋ณด๋‚ด๋Š” ๋ฐฉ์‹์„ ์˜๋ฏธํ•˜๋Š” ํ—ค๋”์ด๋‹ค.

๋ถ„ํ•  ์ „์†ก(Transfer-Encoding)์˜ ๊ฒฝ์šฐ์—๋Š” Content-Length๋ฅผ ์ ์œผ๋ฉด ์•ˆ๋œ๋‹ค. (๋ถ„ํ• ํ•ด์„œ ์•Œ ์ˆ˜๊ฐ€ ์—†์œผ๋‹ˆ๊นŒ)

Transfer-Encoding๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ถ„ํ• ๋œ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ผ ๋•Œ ํฌ๊ธฐ๋ฅผ ํ•จ๊ป˜ ๋ณด๋‚ธ๋‹ค.

 

  • Range์™€ Content-Range๋Š” ์ผ๋ถ€๋งŒ ๋‹ค์‹œ ๋ฐ›๊ณ ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.(๋ถ„ํ• ์ „์†ก๋“ฑ์œผ๋กœ ์ด๋ฏธ ์ ˆ๋ฐ˜์€ ๋ฐ›์€ ๊ฒฝ์šฐ)

Range๋Š” ์š”์ฒญ, Content-Range๋Š” ์‘๋‹ต


# ์ผ๋ฐ˜ ์ •๋ณดํ—ค๋”

ํด๋ผ์ด์–ธํŠธ ์ •๋ณด, ์„œ๋ฒ„ ์ •๋ณด, ์š”์ฒญ๊ธฐ๊ธฐ, ๋‚ ์งœ ๋“ฑ ์ผ๋ฐ˜์ •๋ณด๋ฅผ ๋‹ด๋Š” ํ—ค๋”์ด๋‹ค.

  • From : ์œ ์ €์˜ ์ด๋ฉ”์ผ ์ •๋ณด, ๊ฑฐ์˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ—ค๋”์ด๋‹ค. (ex ํฌ๋กค๋ง์„ ํ•  ๋•Œ, ๋‚ด๊ฐ€ ๋ˆ„๊ตฌ์ธ์ง€ ์•Œ๋ ค์ฃผ๋Š” ์—ฐ๋ฝ์ฒ˜์—ญํ• )
  • Referer : <์š”์ฒญ์ „์šฉ> ์ด์ „ ์›น์‚ฌ์ดํŠธ์˜ URI ์ฃผ์†Œ์ด๋‹ค. ์œ ์ž…๊ฒฝ๋กœ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ํ˜„์—…์—์„œ ์ •๋ง ์ž์ฃผ ์‚ฌ์šฉํ•œ๋‹ค.
    โžก ์ฐธ๊ณ ๋กœ ์ด๋Š” Referrer๋Š” ์˜คํƒ€์ธ๋ฐ ์ด๋ฏธ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋‹ค ๋งŒ๋“ค์–ด๋ฒ„๋ ค์„œ ๋ฐ”๊ฟ€ ์ˆ˜๊ฐ€ ์—†๋‹ค๊ณ  ํ•œ๋‹ค..ใ…‹ใ…‹; 
  • User-Agent : <์‘๋‹ต์ „์šฉ> ์œ ์ €์˜ ์—์ด์ „ํŠธ ์ •๋ณด, ์ฆ‰ ์‚ฌ์šฉํ•œ ๋ธŒ๋ผ์šฐ์ €, ์‚ฌ์šฉํ•œ ๊ธฐ๊ธฐ๋“ฑ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ ์•ฑ(๋ธŒ๋ผ์šฐ์ €) ์ •๋ณด, ํ†ต๊ณ„ ์ •๋ณด๋“ฑ์œผ๋กœ ์š”์ฒญ์—๋งŒ ์‚ฌ์šฉํ•˜๋Š” ํ—ค๋”์ด๋‹ค.

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

  • Date : <์‘๋‹ต์ „์šฉ> ๋ฉ”์‹œ์ง€๊ฐ€ ๋ฐœ์ƒํ•œ ๋‚ ์งœ์™€ ์‹œ๊ฐ„์„ ์ ์–ด๋ณด๋‚ธ๋‹ค. ์ตœ์‹  ์ŠคํŽ™์—์„œ๋Š” ์‘๋‹ต๋งŒ ์‚ฌ์šฉํ•˜๋„๋ก ๋ฐ”๋€Œ์—ˆ๋‹ค.

 


 # ํŠน๋ณ„ํ•œ ์ •๋ณดํ—ค๋”

  • Host : ์š”์ฒญํ•œ ํ˜ธ์ŠคํŠธ(๋„๋ฉ”์ธ) ์ •๋ณด. ์ž…๋ ฅ์ด ํ•„์ˆ˜์ธ ํ—ค๋”์ด๋‹ค.
    Host ํ—ค๋”๊ฐ€ ํ•„์ˆ˜๊ฐ€ ๋œ ์ด์œ ๋Š”, ํ•˜๋‚˜์˜ IP์— ์—ฌ๋Ÿฌ ๋„๋ฉ”์ธ์ด ์ ์šฉ๋˜๋Š” ๊ฒฝ์šฐ(๊ฐ€์ƒ ํ˜ธ์ŠคํŠธ)๊ฐ€ ๋งŽ์•„์กŒ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

  • Allow : ๋ณดํ†ต [405 Method Not Allowed] ์‘๋‹ต์— ํฌํ•จํ•˜๋Š” ํ—ค๋”์ด๋ฉฐ ํ—ˆ์šฉ๊ฐ€๋Šฅํ•œ HTTP ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
    โžก ๋‹ค๋งŒ ์„œ๋ฒ„์—์„œ ์ด๋Ÿฐ ์—๋Ÿฌ๊นŒ์ง€ ๊ตฌ๋ถ„ํ•ด์„œ ๊ตฌํ˜„ํ•˜๋Š” ์ผ์€ ๊ฑฐ์˜ ์—†๋‹ค.
  • Retry-After : [503 Service Unavailable]์˜ ์‘๋‹ต์— ์‚ฌ์šฉํ•˜๋Š” ํ—ค๋”์ด๋ฉฐ, ์„œ๋ฒ„๊ฐ€ ๋ณต๊ตฌ๋˜๋Š” ์‹œ๊ฐ„์ด๋‚˜ ๋‚ ์งœ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

๋‹ค๋งŒ ์‹ค์ œ๋กœ Retry-After๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ผ์€ ๊ฑฐ์˜ ์—†๋‹ค. ์–ธ์ œ ๋ณต๊ตฌ๋ ์ง€ ๋ชจ๋ฅด๋‹ˆ๊นŒ ใ… ใ… ..

 


์ธ์ฆ ์š”์ฒญํ—ค๋”(Authorizaition)

์ธ์ฆํ—ค๋”๋Š” OAuth2๋“ฑ์„ ์ฐพ์•„๋ณด๋ฉด ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์‰ฝ๊ฒŒ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

  • Authorization : ์ธ์ฆ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  • WWW-Authenticate : [401 Unauthorized] ์‘๋‹ต์— ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉฐ, ํ•„์š”ํ•œ ์ธ์ฆ์ •๋ณด๋ฅผ ํ˜•์‹์„ ์ œ๊ณตํ•œ๋‹ค.

 


# ์ฟ ํ‚ค (Cookie)

HTTP๋Š” ๋ฌด์ƒํƒœ, ๋น„์—ฐ๊ฒฐ์„ ์ง€ํ–ฅํ•˜๋Š” ํ”„๋กœํ† ์ฝœ์ด๋‹ค. ์—ฌ๋Ÿฌ ์—ฐ๊ฒฐ์—์„œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋ ค๋ฉด ์ฟ ํ‚ค๋‚˜ ํ† ํฐ์„ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.

  • ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ ์ฟ ํ‚ค๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ์›น ํ—ค๋”์— ๋„ฃ์–ด ๊ฐ™์ด ๋ณด๋‚ธ๋‹ค. (HTTP ์ŠคํŽ™์ด ๊ทธ๋ ‡๊ฒŒ ๋งŒ๋“ค์–ด์ ธ์žˆ๋‹ค.)
    โžก ๊ทธ๋ž˜์„œ ์„œ๋ฒ„์— ๋ณด๋‚ด์ง€์•Š๊ณ , ๋ธŒ๋ผ์šฐ์ €์—์„œ๋งŒ ์‚ฌ์šฉํ•  ๋ฐ์ดํ„ฐ๋Š” ์›น์Šคํ† ๋ฆฌ์ง€(LocalStorage)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • Set-Cookie๋ฅผ ์ด์šฉํ•˜์—ฌ ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ๋กœ ์ฟ ํ‚ค๋ฅผ ์ „๋‹ฌํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

2021.08.29 - [Backend/Spring MVC] - Spring Login#1 ์ฟ ํ‚ค์™€ ์„ธ์…˜

๋‹ค๋ฅธ ์‚ฌ์ดํŠธ์˜ ์ฟ ํ‚ค(Third-party Cookie)๋ฅผ ์ฝ์–ด ๋งž์ถคํ˜• ๊ด‘๊ณ ์— ๊ฐœ์ธ์ •๋ณด ๋ฌธ์ œ๊ฐ€ ์žˆ์–ด Chrome์—์„œ๋Š” Floc์ด๋ž€๊ฑธ ๋ฐ€๊ณ  ์žˆ๋‹ค.

 

 

@์ฟ ํ‚ค์˜ ์œ ํšจ๊ธฐ๊ฐ„

์ฟ ํ‚ค๋Š” ์œ ํšจ๊ธฐ๊ฐ„์ด ์—†๋‹ค๋ฉด [์„ธ์…˜์ฟ ํ‚ค, ๋ธŒ๋ผ์šฐ์ € ์ข…๋ฃŒ๊นŒ์ง€๋งŒ ์œ ์ง€]๋˜๊ณ 

๋งŒ๋ฃŒ ๊ธฐ๊ฐ„์ด ์žˆ๋‹ค๋ฉด [์˜์† ์ฟ ํ‚ค]๋กœ ๋กœ์ปฌPC์— ์ €์žฅ๋œ๋‹ค. ์ฆ‰, ์ฟ ํ‚ค๋Š” ๋ณ€์กฐํ•˜๊ฑฐ๋‚˜ ํƒˆ์ทจํ•˜๊ธฐ ์‰ฌ์›Œ ๊ฐœ์ธ์ •๋ณด๋ฅผ ๋„ฃ์œผ๋ฉด ์•ˆ๋œ๋‹ค.

 

 

@์ฟ ํ‚ค Path, Domain ์ง€์ •

  • ์ฟ ํ‚ค๊ฐ’์— domain์„ ์ง€์ •ํ•ด์ฃผ๋ฉด, ๋ช…์‹œํ•œ ๋„๋ฉ”์ธ(naver.com)๊ณผ ์„œ๋ธŒ๋„๋ฉ”์ธ(blog.naver.com)๋งŒ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค.

๋ฌผ๋ก  ์„ธ์…˜์ฟ ํ‚ค๋กœ ์‚ฌ์šฉํ•ด์•ผ ๋ณด์•ˆ์— ์˜๋ฏธ๊ฐ€ ์žˆ๋‹ค. ๋กœ์ปฌPC๊ฐ€ ์•„๋‹Œ ๋ธŒ๋ผ์šฐ์ € ๋ฉ”๋ชจ๋ฆฌ์—๋งŒ ์กด์žฌํ•˜๋‹ˆ๊นŒ

  • ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ฟ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค. Domain ์ œํ•œ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด์•ผ ์˜๋ฏธ๊ฐ€ ์žˆ๊ธดํ•˜๋‹ค.

 

 

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

์ด๋Š” ๋ณด์•ˆ๊ด€๋ จ ๊ณต๋ถ€๋ฅผ ํ•  ๋•Œ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์•Œ๊ฒŒ๋œ๋‹ค. ์ฐธ๊ณ ๋กœ SameSite๋Š” ์ตœ๊ทผ์— ๋‚˜์˜จ ์ฟ ํ‚ค ๋ณด์•ˆ๊ธฐ๋Šฅ์ด๋‹ค.

 


# ์กฐ๊ฑด๋ถ€ ์š”์ฒญ[304 Not Modified]

๋ฐ”๋€ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋Š”๋ฐ, ๊ณ„์†ํ•ด์„œ ๋ฐ˜๋ณต์š”์ฒญํ•˜๋Š”๊ฑด ๋„คํŠธ์›Œํฌ ๋น„์šฉ์„ ์ƒ๋‹นํžˆ ๋งŽ์ด์žก์•„๋จน๋Š”๋‹ค.

  • ๊ทธ๋ž˜์„œ ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” ๊ฐ™์€ ์š”์ฒญ์˜ ๊ฒฝ์šฐ ์บ์‹œ ์ €์žฅ์†Œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ์žฌ์‚ฌ์šฉํ•œ๋‹ค.
  • ์„œ๋ฒ„์—์„œ๋Š” HTTP ํ—ค๋”์— cahce-control๋“ฑ์œผ๋กœ ์บ์‹œ์˜ ๋ณด๊ด€์„ ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

  • ํ•ด๋‹น ์บ์‹œ๋Š” max-age=60, ์ฆ‰ 60์ดˆ๋™์•ˆ๋งŒ ์บ์‹œ๋กœ ํ™œ์šฉํ•˜๊ณ  ๊ทธ ์ดํ›„์—๋Š” ์„œ๋ฒ„์— ๋‹ค์‹œ ์š”์ฒญ์„ ํ•œ๋‹ค.
    โžก ์ด ๊ฒฝ์šฐ ์„œ๋ฒ„์—์„œ [304 Not Modified]๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ € ์บ์‹œ๋ฅผ ๋‹ค์‹œ ์‚ฌ์šฉํ•˜๋„๋ก ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.
  • ์„œ๋ฒ„์—์„œ๋Š” Last-Modified ๋“ฑ์˜ ํ—ค๋”์ •๋ณด๋กœ 304๋ฅผ ๋ณด๋‚ผ์ง€, ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด์ค„์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
    โžก ๊ทธ๋ž˜์„œ ์‘๋‹ต์„ ๋ณด๋‚ผ ๋•Œ Last-Modified๋ฅผ ์ ์–ด์„œ ๋ณด๋‚ด๋Š” ์ด์œ ๋„ ์žˆ๋‹ค.
    ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ž๋™์œผ๋กœ ํฌํ•จ์‹œํ‚จ if-modified-since ๊ฐ’

์š”์ฒญํ•  ๋–„์—๋Š” if-modified-since๋ฅผ ์ด์šฉํ•ด์„œ ๋งˆ์ง€๋ง‰ ์ˆ˜์ •์ผ์ž ์ •๋ณด๋ฅผ ์„œ๋ฒ„์— ๋„˜๊ธฐ๋ฉด ๋œ๋‹ค.

 

๊ทธ๋Ÿฌ๋ฉด ์„œ๋ฒ„์—์„œ ๊ฐฑ์‹ ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๊ณ  ํŒ๋‹จ๋˜๋ฉด, [200 OK] ๋Œ€์‹  [304 Not Modified]๋ฅผ ์ „์†กํ•œ๋‹ค.

 

 


# ๊ฒ€์ฆ ํ—ค๋”์™€ ์กฐ๊ฑด๋ถ€์š”์ฒญ

ํ•˜์ง€๋งŒ Last-Modified์™€ If-Modified-Since๋งŒ ์‚ฌ์šฉํ•˜๊ฒŒ๋˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ์ ์ด ์žˆ๋‹ค.

  • A->B->A ๊ฐ™์ด ์ˆ˜์ •์€ ๋˜์—ˆ์ง€๋งŒ, ๋‚ด์šฉ์ด ๊ทธ๋Œ€๋กœ์ธ ๊ฒฝ์šฐ์—๋„ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋‹ค์‹œ ๋‹ค์šด๋กœ๋“œ ํ•œ๋‹ค.
  • ์‹œ๊ฐ„(๋‚ ์งœ)๊ธฐ๋ฐ˜์˜ ํ—ค๋”๋ผ์„œ 1์ดˆ ๋ฏธ๋งŒ๋‹จ์œ„์ด๋‚˜ ์•„์˜ˆ ๋ฐ์ดํ„ฐ ๋ฒ„์ „ ๊ธฐ๋ฐ˜์œผ๋กœ ์‹ ๊ทœ์š”์ฒญ/์บ์‹œ์‚ฌ์šฉ ์กฐ์ •์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
    โžก ETag( Entity Tag )๋ฅผ ์ด์šฉํ•ด์„œ ์บ์‹œ๋ฐ์ดํ„ฐ์— ๊ณ ์œ ํ•œ ์ด๋ฆ„ or ๋ฒ„์ „์„ ๋ช…์‹œํ•  ์ˆ˜ ์žˆ๋‹ค.

 

@ ETag์™€ If-None-Match

  • If-None-Match ๋ฅผ ์ด์šฉํ•˜์—ฌ ETag๋ฅผ ์„œ๋ฒ„์•ˆ์—์„œ ์กฐ๊ฑด ์ปจ๋””์…˜์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
    โžก ๋™์ž‘์€ ๋‹จ์ˆœํ•˜๋‹ค. If-None-Match์— ํฌํ•จํ•œ ETag์˜ ๊ฐ’์ด, ์„œ๋ฒ„์™€ ๋‹ค๋ฅธ๊ฒฝ์šฐ๋งŒ ์š”์ฒญ[200]์„ ๋ณด๋‚ด๋Š” ๋ฐฉ์‹

๊ฒ€์ฆ ํ—ค๋”์™€ ์กฐ๊ฑด๋ถ€ ์š”์ฒญ ํ—ค๋”์˜ ์ •์˜

 


# ์กฐ๊ฑด๋ถ€ ์š”์ฒญํ—ค๋”๋ฅผ ์ด์šฉํ•œ ์บ์‹œ์„ค์ •

๋Œ€๋ถ€๋ถ„ Cache-Control ํ—ค๋”๋ฅผ ์ด์šฉํ•ด์„œ ์„ค์ •ํ•˜๊ณ , ์˜›๋‚  HTTP์—์„œ๋Š” Pragma์™€ Expires๋ฅผ ์‚ฌ์šฉํ–ˆ์—ˆ๋‹ค.

 

  • Cache-Control์˜ ๊ฐ’์€ 3๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. no-cache ์˜ต์…˜์€ ์บ์‹œ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์˜ต์…˜์ž„์„ ๊ธฐ์–ตํ•˜์ž.

no-cache๋Š” ํ•ญ์ƒ ์„œ๋ฒ„์— ๊ฒ€์ฆํ•˜์—ฌ 304๋ฅผ ๋ฐ›๊ณ  ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๋ผ๋Š” ์˜๋ฏธ์ด๋‹ค.

 

HTTP 1.0 ์ดํ•˜ ๋ฒ„์ „์—์„œ๋Š” ์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ–ˆ์—ˆ๋‹ค.
โžก ์ฐธ๊ณ ๋กœ Cache-Control์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด์„œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋ฉด ์•„๋ž˜ ํ—ค๋”๋“ค์€ ๋ฌด์‹œ๋œ๋‹ค.

  • pragma: no-cache
  • expires: Mon, 01 Jan 1990 00:00:00 GMT

 


# ํ”„๋ก์‹œ ์บ์‹œ ์„œ๋ฒ„ (CDN ์„œ๋ฒ„, AWS_ํด๋ผ์šฐ๋“œ ํ”„๋ก ํŠธ)

์š”์ฒญ ์†๋„๋ฅผ ์˜ฌ๋ฆฌ๊ธฐ์œ„ํ•ด์„œ, ์ค‘๊ฐ„์— ๋Œ€์ฒด์ž(Proxy)์„œ๋ฒ„๋ฅผ ๋‘์–ด ์บ์‹œํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

ํ”„๋ก์‹œ ์บ์‹œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ Cache-Control ๊ฐ’์„ ์ด์šฉํ•ด ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ž˜์„œ ์ตœ์ดˆ ์ ‘๊ทผํ•œ ์œ ์ €๋Š” ์†๋„๊ฐ€ ๋Š๋ฆฐ๋ฐ, ๊ทธ ๋‹ค์Œ ์œ ์ €๋ถ€ํ„ฐ๋Š” ์†๋„๊ฐ€ ๋นจ๋ผ์ง€๊ธฐ๋„ ํ•œ๋‹ค.

 


# ์บ์‹œ ๋ฌดํšจํ™”

์ตœ๊ทผ์˜ ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” ๋”ฐ๋กœ ํ—ค๋”๋ฅผ ์กฐ์ž‘ํ•˜์ง€ ์•Š๋”๋ผ๋„ ์บ์‹œ๋ฅผ ์ ๊ทน์ ์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

๊ทธ๋ž˜์„œ ์บ์‹œ๊ฐ€ ๋˜๋ฉด ์•ˆ๋˜๋Š” ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ์˜ ๊ฒฝ์šฐ Cache-Control์„ ํ†ตํ•ด ์บ์‹œ๋ฅผ ๋ฌดํšจํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

โžก ์€ํ–‰์˜ ํ†ต์ž”์ž”๊ณ ๊ฐ€ ์บ์‹œ๋˜์–ด์„œ ๊ณ„์† ์žฌ์‚ฌ์šฉ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž. ํ™•์‹คํ•˜๊ฒŒ ๋ฌดํšจํ•˜์ง€์•Š์œผ๋ฉด ํฐ์ผ๋‚  ์ˆ˜ ์žˆ๋‹ค. 

ํ˜น์‹œ๋‚˜ HTTP1.0 ์ด์ „๋ฒ„์ „์„ ์‚ฌ์šฉํ• ๊นŒ๋ด Pragma๋„ ํ•จ๊ป˜ ๋„ฃ์–ด์ฃผ๋Š”๊ฒŒ ์ผ๋ฐ˜์ ์ด๋‹ค.

 

์ด 4๊ฐ€์ง€๋ฅผ ์กฐํ•ฉํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๋™์ž‘ํ•œ๋‹ค. ์ฆ‰ ๋ชจ๋“ ์ƒํ™ฉ์—์„œ ํ™•์‹คํ•˜๊ฒŒ ์บ์‹œ๋ฅผ ๋ฌดํšจํ™” ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

์ด์ •๋„๋งŒ ํ•ด์ค˜๋„ ์ถฉ๋ถ„ํ•˜๋‹ค. ๊ตฌ๊ธ€ ๊ฐ™์ด ๋ณ€ํƒœ๊ฐ™์€ ๊ณณ๋งŒ ์ถ”๊ฐ€์ ์ธ max-age=0๊นŒ์ง€ ํ•ด์ฃผ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค ํ•œ๋‹ค.

no-cache๋กœ ํ•ญ์ƒ ์š”์ฒญํ•˜๊ณ , no-store๋กœ ์บ์‹œ์ €์žฅ์„ ๋ฐฉ์ง€ํ•˜๋ฉด ์ถฉ๋ถ„ํ•  ๊ฒƒ๊ฐ™์€๋ฐ must-revalidate๊นŒ์ง€ ์“ด๋‹ค.

๊ทธ ์ด์œ ๋Š” ํ”„๋ก์‹œ ์„œ๋ฒ„ ๋•Œ๋ฌธ์ด๋‹ค.

 

  • no-cache๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, ์› ์„œ๋ฒ„(Origin)๊ฐ€ ์‘๋‹ต์ด ์—†์–ด๋„ ์š”์ฒญ์„ ์ „์†กํ•˜๊ฒŒ ๋™์ž‘ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค.

๊ฐœ๋ฐœ์ž ์ž…์žฅ์—์„œ๋Š”, ์„œ๋ฒ„๊ฐ€ ๋Š๊ฒผ์„ ๋•Œ 500์—๋Ÿฌ๋ณด๋‹ค๋Š” ํ”„๋ก์‹œ ์‘๋‹ต์„ ํ•ด์ฃผ๋Š”๊ฒŒ ๋” ๋‚ซ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š”๊ฒŒ ๋‹น์—ฐํ•˜๋‹ค.

 

  • must-revalidate๋Š” ํ”„๋ก์‹œ๋ฅผ ๋ฌด์‹œํ•˜๊ณ  ๋ฌด์กฐ๊ฑด ์›์„œ๋ฒ„์—์„œ ์š”์ฒญ์„ ๋ฐ›์•„์˜จ๋‹ค.

 

๋ธ”๋กœ๊ทธ์˜ ์ •๋ณด

JiwonDev

JiwonDev

ํ™œ๋™ํ•˜๊ธฐ