Skip to content

Latest commit

Β 

History

History
57 lines (43 loc) Β· 4 KB

Browser_Caching.md

File metadata and controls

57 lines (43 loc) Β· 4 KB

Browser Caching

ν•„μš”ν•œ HTTP Header

λΈŒλΌμš°μ € 캐싱을 λ„μž…ν•˜κΈ° μœ„ν•΄μ„œλŠ” μ•„λž˜μ˜ 헀더듀이 μ„€μ •λ˜μ–΄μ•Ό ν•œλ‹€.

Cache-Control

  • λΈŒλΌμš°μ €μ˜ 캐싱 방법을 μ •ν•˜κΈ° μœ„ν•΄ μ„œλ²„/ν΄λΌμ΄μ–ΈνŠΈκ°€ μ‚¬μš©ν•˜λŠ” HTTP Header
  • μΊμ‹œμ˜ μ €μž₯ μ—¬λΆ€, 유효 μ‹œκ°„ 등을 지정할 수 있음
  • 자주 μ‚¬μš©ν•˜λŠ” λ””λ ‰ν‹°λΈŒ(directive) λͺ©λ‘
    • public/private: public은 이 λ¦¬μ†ŒμŠ€λ₯Ό λ°›λŠ” λͺ¨λ“  주체가 캐싱을 ν•˜λ„λ‘ ν•˜κ³ , privateλŠ” 였직 end-user(λ§ˆμ§€λ§‰ μˆ˜μ‹ μž)만이 캐싱을 ν•˜λ„λ‘ 함
    • must-revalidate: λ°˜λ“œμ‹œ μž¬κ²€μ¦μ„ 거쳐 μΊμ‹œλœ λ¦¬μ†ŒμŠ€λ₯Ό μ‚¬μš©ν•˜λ„λ‘ 함
    • max-age=: μΊμ‹œκ°€ μœ νš¨ν•˜λ‹€κ³ (μ΅œμ‹  μƒνƒœλΌκ³ ) νŒλ‹¨ν•  μ΅œλŒ€ μ‹œκ°„

E-Tag

  • λ¦¬μ†ŒμŠ€λ₯Ό μ‹λ³„ν•˜λŠ” μ‹λ³„μž 역할을 ν•˜λŠ” HTTP Header
  • response header에 이 값이 ν¬ν•¨λ˜λ©΄, client(browser)λŠ” 이 값을 κΈ°μ€€μœΌλ‘œ λ¦¬μ†ŒμŠ€λ₯Ό μΊμ‹±ν•˜κ³  λ³€κ²½ μ—¬λΆ€λ₯Ό νŒλ‹¨
  • Cache-Control 헀더와 ν•¨κ»˜ μ‚¬μš©ν•˜μ—¬ λΈŒλΌμš°μ €μ— ν•΄λ‹Ή λ¦¬μ†ŒμŠ€λ₯Ό μΊμ‹±ν•˜λ„λ‘ μ‚¬μš©ν•  수 있음

λΈŒλΌμš°μ € 캐싱 λ™μž‘ 흐름

response header에 λ‹€μŒκ³Ό 같은 value듀이 μ„€μ •λ˜μ—ˆλ‹€κ³  ν•  λ•Œ, λΈŒλΌμš°μ € 캐싱이 μ–΄λ–»κ²Œ λ™μž‘ν•˜λŠ”μ§€ μ•Œμ•„λ³΄μž.

Cache-Control: public, max-age=180
ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4"
  1. μ„œλ²„κ°€ λ¦¬μ†ŒμŠ€λ₯Ό μ œκ³΅ν•  λ•Œ 응닡 헀더에 μ μ ˆν•œ ETag 값을 포함
    • μ—¬κΈ°μ„œ μ μ ˆν•œ ETagλž€, λ¦¬μ†ŒμŠ€λ³„λ‘œ κ³ μœ ν•˜κ²Œ 뢀여될 수 μžˆλŠ” 값을 말함
    • MDNμ—μ„œ μ œμ•ˆν•˜λŠ” ETag 후보듀
      • 컨텐츠 자체의 hash
      • λ§ˆμ§€λ§‰ μˆ˜μ • 일자(νƒ€μž„μŠ€νƒ¬ν”„)의 hash
  2. λΈŒλΌμš°μ €λŠ” ETagλ₯Ό 기반으둜 Cache-Control에 μ •μ˜λœ λ§€μ»€λ‹ˆμ¦˜μ— κΈ°λ°˜ν•˜μ—¬ μΊμ‹œλ₯Ό μ €μž₯
    • μœ„μ˜ μ„€μ •λŒ€λ‘œλ©΄ 이 λ¦¬μ†ŒμŠ€λ₯Ό λ°›λŠ” λͺ¨λ“  주체가 180초 λ™μ•ˆ μΊμ‹œλ₯Ό μ €μž₯ν•˜λ„λ‘ 함
  3. λΈŒλΌμš°μ €λŠ” μΊμ‹œλœ 데이터λ₯Ό μ‚¬μš©ν•˜κΈ° μ „ μΊμ‹œκ°€ λ§Œλ£Œλ˜μ—ˆλŠ”μ§€λ₯Ό λ¨Όμ € 확인
    • μΊμ‹œμ˜ 유효 기간을 μ„€μ •ν•˜λŠ” 방법은 Cache-control 헀더에 max-age λ₯Ό μ„€μ •ν•˜λŠ” 방법과 Expires 헀더λ₯Ό μ„€μ •ν•˜λŠ” 방법이 쑴재
      • max-ageλŠ” μΊμ‹œκ°€ λ“±λ‘λœ μ‹œμ μ„ κΈ°μ€€μœΌλ‘œ 만료 μ‹œκ°„μ„ 지정
      • ExpireλŠ” μΊμ‹œκ°€ 만료될 μ‹œμ μ„ 지정
  4. λ§Œμ•½ μΊμ‹œκ°€ λ§Œλ£Œλ˜μ§€ μ•Šμ•˜λ‹€λ©΄, μ„œλ²„μ— μš”μ²­μ„ 보내지 μ•Šκ³  μΊμ‹œλ₯Ό μ‚¬μš©
  5. μΊμ‹œκ°€ λ§Œλ£Œλ˜μ—ˆλ‹€λ©΄, λΈŒλΌμš°μ €λŠ” If-None-Match 헀더에 ETag 값을 λ‹΄μ•„ μ„œλ²„μ— μš”μ²­μ„ 보냄
  6. μ„œλ²„λŠ” 5λ²ˆμ—μ„œ 보낸 ν—€λ”μ˜ κ°’κ³Ό ν˜„μž¬ λ¦¬μ†ŒμŠ€μ˜ ETag 값을 비ꡐ해 두 값이 μΌμΉ˜ν•˜λŠ” 경우 304 Not Modified와 ν•¨κ»˜ 빈 bodyλ₯Ό, μΌμΉ˜ν•˜μ§€ μ•ŠλŠ” 경우 200 ok와 ν•¨κ»˜ μƒˆ λ¦¬μ†ŒμŠ€λ₯Ό λ°˜ν™˜

μ—¬λ‹΄

  • λΈŒλΌμš°μ € μΊμ‹œλ₯Ό μ΄μš©ν•˜λ©΄ 자주 λ³€κ²½λ˜μ§€ μ•Šμ§€λ§Œ 자주 μ‘°νšŒλ˜λŠ” λ¦¬μ†ŒμŠ€μ— λŒ€ν•œ νŠΈλž˜ν”½μ„ μ ˆκ°ν•  수 μžˆλ‹€.
  • κ·ΈλŸ¬λ‚˜, μΊμ‹œ λ©”μ»€λ‹ˆμ¦˜μ„ μ–΄λ–»κ²Œ μ„€μ •ν•˜λŠλƒμ— 따라 이미 μ„œλ²„μ—μ„œλŠ” λ¦¬μ†ŒμŠ€κ°€ λ³€κ²½λ˜μ—ˆμŒμ—λ„ λΈŒλΌμš°μ €λŠ” λ³€κ²½ μ΄μ „μ˜ λ¦¬μ†ŒμŠ€λ₯Ό μΊμ‹±ν•˜κ³  이λ₯Ό 계속 μ œκ³΅ν•˜λŠ” 상황이 λ°œμƒν•  μˆ˜λ„ μžˆλ‹€.
  • 이λ₯Ό μ˜ˆλ°©ν•˜κΈ° μœ„ν•΄ λ‚˜λŠ” must-revalidate λ””λ ‰ν‹°λΈŒλ₯Ό 주둜 μ‚¬μš©ν•œλ‹€. μ΄λŠ” μΊμ‹œμ˜ 만료 여뢀와 상관 없이 항상 μ„œλ²„μ— μœ νš¨μ„± 검증을 μœ„ν•œ μš”μ²­μ„ μ „μ†‘ν•˜λ„λ‘ ν•œλ‹€.
    • 맀 μˆœκ°„ μ„œλ²„μ— μš”μ²­μ΄ κ°„λ‹€λŠ” μ μ—μ„œ μΊμ‹œμ˜ ν˜œνƒμ„ λͺ¨λ‘ λˆ„λ¦¬μ§€ λͺ»ν•˜κ²Œ λœλ‹€κ³  λ³Ό μˆ˜λ„ μžˆκ² μ§€λ§Œ, μΊμ‹œκ°€ μœ νš¨ν•œ(μ΅œμ‹ μ˜) 것일 λ•Œμ—λŠ” μ„œλ²„κ°€ λ¦¬μ†ŒμŠ€ 전체λ₯Ό μ œκ³΅ν•˜λŠ” λŒ€μ‹  304 응닡과 ν•¨κ»˜ β€œλ¦¬μ†ŒμŠ€κ°€ λ³€κ²½λ˜μ§€ μ•Šμ•˜μŒβ€λ§Œμ„ μ œκ³΅ν•˜κΈ° λ•Œλ¬Έμ—, μ˜€κ°€λŠ” λ°μ΄ν„°μ˜ 양을 쀄일 수 μžˆλ‹€λŠ” μ μ—μ„œ μ—¬μ „νžˆ μ˜λ―Έκ°€ μžˆλ‹€.

좜처