yeon's blog

[HTTP ์›น ๊ธฐ๋ณธ ์ง€์‹] HTTP ํ—ค๋” 2 - ์บ์‹œ์™€ ์กฐ๊ฑด๋ถ€ ์š”์ฒญ ๋ณธ๋ฌธ

HTTP

[HTTP ์›น ๊ธฐ๋ณธ ์ง€์‹] HTTP ํ—ค๋” 2 - ์บ์‹œ์™€ ์กฐ๊ฑด๋ถ€ ์š”์ฒญ

yeonii 2023. 12. 28. 14:52

๐ŸŒฑ ์บ์‹œ์˜ ๊ธฐ๋ณธ ๋™์ž‘

์บ์‹œ๊ฐ€ ์—†์„ ๋•Œ

  • ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•„๋„ ๊ณ„์† ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์•„์•ผ ํ•œ๋‹ค.
  • ์ธํ„ฐ๋„ท ๋„คํŠธ์›Œํฌ๋Š” ๋งค์šฐ ๋Š๋ฆฌ๊ณ  ๋น„์‹ธ๋‹ค.
  • ๋ธŒ๋ผ์šฐ์ €์˜ ๋กœ๋”ฉ ์†๋„๊ฐ€ ๋Š๋ฆฌ๋‹ค.
  • ์ด๋กœ ์ธํ•ด ๋Š๋ฆฐ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์ด ๋ฐœ์ƒํ•œ๋‹ค.

์บ์‹œ ์ ์šฉ

 

cache-control header๋ฅผ ์ž‘์„ฑํ•ด ์ผ์ • ์‹œ๊ฐ„๋™์•ˆ ์บ์‹œ์— ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋ ‡๊ฒŒ ์บ์‹œ๋ฅผ ์ ์šฉํ•˜๊ฒŒ ๋˜๋ฉด, ์ผ์ • ์‹œ๊ฐ„ ๋™์•ˆ ๊ฐ™์€ ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ,

๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด์„œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์•„์˜ค์ง€ ์•Š๊ณ  ๋ธŒ๋ผ์šฐ์ € ์บ์‹œ์— ์ ‘์†ํ•ด์„œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์•„์˜ค๊ธฐ ๋•Œ๋ฌธ์— ์ด ๊ณผ์ •์—์„œ ์‹œ๊ฐ„์ด ํฌ๊ฒŒ ๋‹จ์ถ•๋œ๋‹ค.

  • ์บ์‹œ ๋•๋ถ„์— ์บ์‹œ ๊ฐ€๋Šฅ ์‹œ๊ฐ„๋™์•ˆ ๋„คํŠธ์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.
  • ๋น„์‹ผ ๋„คํŠธ์›Œํฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.
  • ๋ธŒ๋ผ์šฐ์ € ๋กœ๋”ฉ ์†๋„๊ฐ€ ๋งค์šฐ ๋น ๋ฅด๋‹ค.
  • ๋น ๋ฅธ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๋งŒ๋“ค์–ด์ค€๋‹ค.

์›น ๋ธŒ๋ผ์šฐ์ € ์ด์šฉ์‹œ ํ•œ ๋ฒˆ ๋“ค์–ด๊ฐ”๋˜ ์‚ฌ์ดํŠธ๋ฅผ ์žฌ๋ฐฉ๋ฌธํ•  ๋•Œ ๋งค์šฐ ๋น ๋ฅธ ์ด์œ ๋Š” ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•œ ๋•๋ถ„์ด๋‹ค.

์บ์‹œ๊ฐ€ ์œ ํšจํ•œ ์‹œ๊ฐ„์ด ์ง€๋‚˜์„œ ๋‹ค์‹œ ์š”์ฒญํ•œ๋‹ค๋ฉด?

์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ ๋‹ค์‹œ ์„œ๋ฒ„์— ์š”์ฒญ์„ ํ†ตํ•ด ๋ฐ›์•„์™€ ๊ธฐ์กด์˜ ์œ ํšจ ์‹œ๊ฐ„์ด ์ง€๋‚œ ์บ์‹œ๋ฅผ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋กœ ๋ฎ์–ด์”Œ์›Œ์„œ ์ดˆ๊ธฐํ™”์‹œํ‚จ๋‹ค.

 

์บ์‹œ ์‹œ๊ฐ„ ์ดˆ๊ณผ

  • ์บ์‹œ ์œ ํšจ ์‹œ๊ฐ„์ด ์ดˆ๊ณผํ•˜๋ฉด, ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ์กฐํšŒํ•˜๊ณ , ์บ์‹œ๋ฅผ ๊ฐฑ์‹ ํ•œ๋‹ค.
  • ์ด๋•Œ ๋‹ค์‹œ ๋„คํŠธ์›Œํฌ ๋‹ค์šด๋กœ๋“œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
  • ๊ทธ๋Ÿฐ๋ฐ, ๊ฒฐ๊ตญ ๋ฐ›์•„์˜จ ๋ฐ์ดํ„ฐ๊ฐ€ ์›๋ž˜ ์บ์‹œ์— ์žˆ๋˜ ๊ฒƒ๊ณผ ์™„์ „ํžˆ ๊ฐ™์œผ๋ฉด ์•„๊น์ง€ ์•Š์„๊นŒ? (์ด๋ฏธ์ง€๊ฐ€ ๋ฐ”๋€Œ์ง€ ์•Š๊ธฐ ๋–„๋ฌธ์—!)

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

์บ์‹œ์˜ ์‹œ๊ฐ„์ด ์ดˆ๊ณผ๋˜์–ด ๋” ์ด์ƒ ์œ ํšจํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ƒˆ๋กญ๊ฒŒ ์„œ๋ฒ„์— ์ ‘์†ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์™€ ์บ์‹ฑํ•ด์•ผ ํ•˜๋Š”๋ฐ, ์ด๋ฅผ ์กฐ๊ฑด์— ๋”ฐ๋ผ์„œ ๊ฐฑ์‹ ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

์บ์‹œ ์‹œ๊ฐ„ ์ดˆ๊ณผ

์บ์‹œ ์œ ํšจ ์‹œ๊ฐ„์ด ์ดˆ๊ณผํ•ด์„œ ์„œ๋ฒ„์— ๋‹ค์‹œ ์š”์ฒญํ•˜๋ฉด, ๋‹ค์Œ ๋‘ ๊ฐ€์ง€ ์ƒํ™ฉ์ด ๋‚˜ํƒ€๋‚œ๋‹ค.

  1. ์„œ๋ฒ„์—์„œ ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค.           ๐Ÿ’› → ๐Ÿ’š
  2. ์„œ๋ฒ„์—์„œ ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š”๋‹ค. ๐Ÿ’›

์บ์‹œ ๋งŒ๋ฃŒํ›„์—๋„ ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ !!

  • ์ƒ๊ฐํ•ด๋ณด๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋Š” ๋Œ€์‹  ์ €์žฅํ•ด ๋‘์—ˆ๋˜ ์บ์‹œ๋ฅผ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋‹จ, ํด๋ผ์ด์–ธํŠธ์˜ ๋ฐ์ดํ„ฐ์™€ ์„œ๋ฒ„์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ™๋‹ค๋Š” ์‚ฌ์‹ค์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ„๋„์˜ ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•˜๋‹ค.

 

๊ฒ€์ฆ ํ—ค๋” ์ถ”๊ฐ€

Last-Modified๋ผ๋Š” header๋ฅผ ์ถ”๊ฐ€๋กœ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ ์ตœ์ข… ์ˆ˜์ •์ผ ์ •๋ณด๋ฅผ ๊ฐ™์ด ํด๋ผ์ด์–ธํŠธ๋กœ ์ „๋‹ฌํ•œ๋‹ค.

์ด๋ ‡๊ฒŒ ์บ์‹œ์— ์œ ํšจํ•œ ์‹œ๊ฐ„ + ๋ฐ์ดํ„ฐ ์ตœ์ข… ์ˆ˜์ •์ผ ์ •๋ณด๋ฅผ ํ•จ๊ป˜ ๋ณด๊ด€ํ•ด

์„œ๋ฒ„์—์„œ ์ตœ์ข… ์ˆ˜์ •์ผ์„ ๋ฐ”ํƒ•์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์ตœ์‹  ์ƒํƒœ์ธ์ง€ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

์„œ๋ฒ„์—์„œ if-modified-since header์— ์ž‘์„ฑ๋œ ์ตœ์ข… ์ˆ˜์ •์ผ ์ •๋ณด๋ฅผ ์ด์šฉํ•ด ๋ฐ์ดํ„ฐ๊ฐ€ ์ˆ˜์ •๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•˜๊ณ 

์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ๋กœ 304 Not Modified status code๋ฅผ ๋‹ด์€ response๋ฅผ ์ „๋‹ฌํ•˜์—ฌ, ์‘๋‹ต ๊ฒฐ๊ณผ๋ฅผ ์žฌ์‚ฌ์šฉํ•ด๋„ ๋œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ๋ฆฐ๋‹ค.

304 Not Modified๋ฅผ ์ด์šฉํ•˜๋ฉด, HTTP Body๋ฅผ ์ƒ๋žตํ•˜๊ณ  response message๋ฅผ ์ „์†กํ•˜๋Š” ๊ตฌ์กฐ๋กœ ๋™์ž‘ํ•ด์„œ,

๊ธฐ์กด์˜ 1.1M์˜ ๋„คํŠธ์›Œํฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ฐจ์ง€ํ•˜๋˜ ๋ฐฉ์‹์„ 0.1M๋งŒ ์ ์œ ํ•˜๋„๋ก ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

 

304 Not Modified response๋ฅผ ๋ฐ›์€ client๋Š” cache์— ์žˆ๋˜ ๋ฐ์ดํ„ฐ์˜ ์œ ํšจ ์‹œ๊ฐ„์„ ๊ฐฑ์‹ (60์ดˆ๋กœ)ํ•ด์„œ ๋‹ค์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

 

์กฐ๊ฑด๋ถ€ ์š”์ฒญ1 - ์ •๋ฆฌ

์ด ์ƒํ™ฉ์—์„œ๋Š” ๊ฒ€์ฆ ํ—ค๋”(Last-Modified)์™€ ์กฐ๊ฑด๋ถ€ ์š”์ฒญ(if-modified-since)๋ฅผ ๊ฐ™์ด ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ ์ƒํ™ฉ์ด๋‹ค.

  • ์บ์‹œ ์œ ํšจ ์‹œ๊ฐ„์ด ์ดˆ๊ณผํ•ด๋„, ์„œ๋ฒ„์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐฑ์‹ ๋˜์ง€ ์•Š์œผ๋ฉด
  • 304 Not Modified + ํ—ค๋” ๋ฉ”ํƒ€ ์ •๋ณด๋งŒ ์‘๋‹ต (body X)
  • ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„๊ฐ€ ๋ณด๋‚ธ ์‘๋‹ต ํ—ค๋”์˜ ์ •๋ณด๋กœ ์บ์‹œ์˜ ๋ฉ”ํƒ€ ์ •๋ณด ๊ฐฑ์‹ 
  • ํด๋ผ์ด์–ธํŠธ๋Š” ์บ์‹œ์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๋ฐ์ด
  •  
  • ํ„ฐ๋ฅผ ์žฌํ™œ์šฉ
  • ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋„คํŠธ์›Œํฌ ๋‹ค์šด๋กœ๋“œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€๋งŒ, ์šฉ๋Ÿ‰์ด ์ ์€ ํ—ค๋” ์ •๋ณด๋งŒ ๋‹ค์šด๋กœ๋“œ
  • ๋งค์šฐ ์‹ค์šฉ์ ์ธ ํ•ด๊ฒฐ์ฑ…!

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

  • ๊ฒ€์ฆ ํ—ค๋”
    • ์บ์‹œ ๋ฐ์ดํ„ฐ์™€ ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ™์€์ง€ ๊ฒ€์ฆํ•˜๋Š” ๋ฐ์ดํ„ฐ
    • Last-Modified, ETag ํฌ๊ฒŒ ๋‘๊ฐ€์ง€๊ฐ€ ์žˆ์Œ
  • ์กฐ๊ฑด๋ถ€ ์š”์ฒญ ํ—ค๋”
    • ๊ฒ€์ฆ ํ—ค๋”๋กœ ์กฐ๊ฑด์— ๋”ฐ๋ฅธ ๋ถ„๊ธฐ์‹œ ์‚ฌ์šฉ
    • If-Modified-Since: Last-Modified๋ฅผ ์‚ฌ์šฉ
    • If-None-Match: ETag ์‚ฌ์šฉ
    • ์กฐ๊ฑด์ด ๋งŒ์กฑํ•˜๋ฉด 200 OK
    • ์กฐ๊ฑด์ด ๋งŒ์กฑํ•˜์ง€ ์•Š์œผ๋ฉด, 304 Not Modified

 

If-Modified-Since: ์ดํ›„์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ˆ˜์ •๋˜์—ˆ์œผ๋ฉด?

  • ๋ฐ์ดํ„ฐ ๋ฏธ๋ณ€๊ฒฝ ์˜ˆ์‹œ
    • ์บ์‹œ: 2020๋…„ 11์›” 10์ผ 10:00:00 vs ์„œ๋ฒ„: 2020๋…„ 11์›” 10์ผ 10:00:00
    • 304 Not Modified, ํ—ค๋” ๋ฐ์ดํ„ฐ๋งŒ ์ „์†กํ•œ๋‹ค. (body X)
    • ๋”ฐ๋ผ์„œ ์ „์†ก ์šฉ๋Ÿ‰ 0.1MB (ํ—ค๋” 0.1MB)
  • ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ์˜ˆ์‹œ
    • ์บ์‹œ: 2020๋…„ 11์›” 10์ผ 10:00:00 vs ์„œ๋ฒ„: 2020๋…„ 11์›” 10์ผ 11:00:00
    • 200 OK, ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์ „์†ก (body o)
    • ๋”ฐ๋ผ์„œ ์ „์†ก ์šฉ๋Ÿ‰ 1.1MB (ํ—ค๋” 0.1MB, ๋ฐ”๋”” 1MB)

 

Last-Modified, If-Modified-Since์˜ ๋‹จ์ 

  • 1์ดˆ ๋ฏธ๋งŒ(0.x์ดˆ) ๋‹จ์œ„๋กœ ์บ์‹œ ์กฐ์ •์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋‚ ์งœ ๊ธฐ๋ฐ˜์˜ ์ •ํ•ด์ง„ ๋กœ์ง์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค
  • ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•ด์„œ ๋‚ ์งœ๊ฐ€ ๋‹ฌ๋ผ์กŒ์ง€๋งŒ, ์‹ค์งˆ์ ์œผ๋กœ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•ด ๊ฒฐ๊ณผ๊ฐ€ ๋˜‘๊ฐ™์€ ๊ฒฝ์šฐ
  • ์„œ๋ฒ„์—์„œ ๋ณ„๋„์˜ ์บ์‹œ ๋กœ์ง์„ ๊ด€๋ฆฌํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ
    • ์˜ˆ) ์ŠคํŽ˜์ด์Šค๋‚˜ ์ฃผ์„์ฒ˜๋Ÿผ ํฌ๊ฒŒ ์˜ํ–ฅ์ด ์—†๋Š” ๋ณ€๊ฒฝ์—์„œ ์บ์‹œ๋ฅผ ์œ ์ง€ํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ
  • ์œ„์˜ ๋‘ ๊ฒฝ์šฐ๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.


ETag, If-None-Match

  • ETag (Entity Tag)
  • ์บ์‹œ์šฉ ๋ฐ์ดํ„ฐ์— ์ž„์˜์˜ ๊ณ ์œ ํ•œ ๋ฒ„์ „ ์ด๋ฆ„์„ ๋‹ฌ์•„๋‘๋Š” ๊ตฌ์กฐ
    • ์˜ˆ) ETag: "v1.0", ETag: "a2jiodwjekjl3" => ๋ฒ„์ „์œผ๋กœ ๋‹ฌ ์ˆ˜๋„ ์žˆ๊ณ , Hash ๊ฐ’์œผ๋กœ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด, ์ด ์ด๋ฆ„์„ ๋ฐ”๊พธ์–ด ๋ณ€๊ฒฝํ•œ๋‹ค. (Hash๋ฅผ ๋‹ค์‹œ ์ƒ์„ฑ)
    • ์˜ˆ) ETag: "aaaaa" -> ETag: "bbbbb"
  • ์ง„์งœ ๋‹จ์ˆœํ•˜๊ฒŒ ETag๋งŒ ๋ณด๋‚ด์„œ ๊ฐ™์œผ๋ฉด ์œ ์ง€ํ•˜๊ณ , ๋‹ค๋ฅด๋ฉด ๋‹ค์‹œ ๋ฐ›๋Š”๋‹ค!!

 

ETag header๋ฅผ ์ง€์ •ํ•ด์„œ response๋กœ ์ „๋‹ฌํ•œ๋‹ค.
๋‹ค์Œ request์‹œ๋ถ€ํ„ฐ If-None-Match๋ฅผ header์— ํฌํ•จํ•ด์„œ ์„œ๋ฒ„๋กœ ์š”์ฒญํ•œ๋‹ค.

ETag header์˜ ๊ฐ’์„ ํฌํ•จํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ cache์— ์ €์žฅํ•œ๋‹ค.

ETag header์˜ ๊ฐ’์„ ๋น„๊ตํ•ด ๋ฐ์ดํ„ฐ๊ฐ€ ์ˆ˜์ •๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•˜๊ณ , ์บ์‹œ ๋‚ด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐฑ์‹ ํ•œ๋‹ค.

 

 

ETag, If-None-Match ์ •๋ฆฌ

  • ์ง„์งœ ๋‹จ์ˆœํ•˜๊ฒŒ ETag๋งŒ ์„œ๋ฒ„์— ๋ณด๋‚ด์„œ ๊ฐ™์œผ๋ฉด ์œ ์ง€ํ•˜๊ณ , ๋‹ค๋ฅด๋ฉด ๋‹ค์‹œ ๋ฐ›๊ธฐ!
  • ์บ์‹œ ์ œ์–ด ๋กœ์ง์„ ์„œ๋ฒ„์—์„œ ์™„์ „ํ•˜๊ฒŒ ๊ด€๋ฆฌํ•œ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ๋Š” ๋‹จ์ˆœํžˆ ์ด ๊ฐ’์„ ์„œ๋ฒ„์— ์ œ๊ณต(ํด๋ผ์ด์–ธํŠธ๋Š” ์บ์‹œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๋ชจ๋ฆ„)
  • ์˜ˆ์‹œ)
    • ์„œ๋ฒ„๋Š” ๋ฐฐํƒ€ ์˜คํ”ˆ ๊ธฐ๊ฐ„์ธ 3์ผ ๋™์•ˆ ํŒŒ์ผ์ด ๋ณ€๊ฒฝ๋˜์–ด๋„ ETag๋ฅผ ๋™์ผํ•˜๊ฒŒ ์œ ์ง€ํ•œ๋‹ค.
    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ ์ฃผ๊ธฐ์— ๋งž์ถฐ ETag๋ฅผ ๋ชจ๋‘ ๊ฐฑ์‹ 

๐ŸŒฑ ์บ์‹œ์™€ ์กฐ๊ฑด๋ถ€ ์š”์ฒญ ํ—ค๋”

  • Cache-Control: ์บ์‹œ ์ œ์–ด
  • Pragma: ์บ์‹œ ์ œ์–ด(ํ•˜์œ„ ํ˜ธํ™˜)
  • Expires: ์บ์‹œ ์œ ํšจ ๊ธฐ๊ฐ„(ํ•˜์œ„ ํ˜ธํ™˜)

 

Cache-Control - ์บ์‹œ ์ง€์‹œ์–ด(directives)

  • Cache-Control: max-age
    • ์บ์‹œ ์œ ํšจ ์‹œ๊ฐ„, ์ดˆ ๋‹จ์œ„๋กœ ์ž‘์„ฑ
  • Cache-Control: no-cache
    • ๋ฐ์ดํ„ฐ๋Š” ์บ์‹œํ•ด๋„ ๋˜์ง€๋งŒ, ํ•ญ์ƒ ์บ์‹œ๋ฅผ ์“ฐ๊ธฐ ์ „์— ์›(origin) ์„œ๋ฒ„์— ๊ฒ€์ฆํ•˜๊ณ  ์‚ฌ์šฉ
      (๋กœ์ปฌ ์บ์‹œ์— ์žˆ๋Š” ์ •๋ณด๊ฐ€ ๋ฐ”๋€Œ์—ˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํ•ญ์ƒ ์„œ๋ฒ„์— ๊ฒ€์ฆ์„ ๋ฐ›๊ณ  ์‚ฌ์šฉํ•ด๋ผ)
  • Cache-Control: no-store
    • ๋ฐ์ดํ„ฐ์— ๋ฏผ๊ฐํ•œ ์ •๋ณด๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ์ €์žฅํ•˜๋ฉด ์•ˆ๋จ
      (๋ฉ”๋ชจ๋ฆฌ์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ์ตœ๋Œ€ํ•œ ๋นจ๋ฆฌ ์‚ญ์ œํ•ด๋ผ)

 

Pragma - ์บ์‹œ ์ œ์–ด(ํ•˜์œ„ ํ˜ธํ™˜)

  • Pragma: no-cache
  • HTTP 1.0 ํ•˜์œ„ ํ˜ธํ™˜์ด๋ผ๊ณ  ํ•œ๋‹ค.
  • ์ง€๊ธˆ์€ ๊ฑฐ์˜ ์‚ฌ์šฉ X

 

Expires - ์บ์‹œ ๋งŒ๋ฃŒ์ผ ์ง€์ •(ํ•˜์œ„ ํ˜ธํ™˜)

  • expires: Mon, 01 Jan 1990 00:00:00 GMT
  • ์บ์‹œ ๋งŒ๋ฃŒ์ผ์„ ์ •ํ™•ํ•œ ๋‚ ์งœ๋กœ ์ง€์ • → ์œ ํ˜„ํ•˜์ง€ X
  • HTTP 1.0๋ถ€ํ„ฐ ์‚ฌ์šฉ
  • ์ง€๊ธˆ์€ ๋” ์œ ์—ฐํ•œ Cache-Control: max-age๋ฅผ ๊ถŒ์žฅ
  • ์ง€๊ธˆ ๋ฒ„์ „์—์„œ Cache-Control: max-age์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด Expires๋Š” ๋ฌด์‹œ๋œ๋‹ค.

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

  • ๊ฒ€์ฆ ํ—ค๋” (Validator)
    • ETag: "v1.0", ETag: "asdfkas;l09"
    • Last-Modified: Thu, 04 Jum 2020 07:19:24 GMT
  • ์กฐ๊ฑด๋ถ€ ์š”์ฒญ ํ—ค๋” (ํŠน์ • ํ—ค๋”์˜ ๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์กฐ๊ฑด์— ๋”ฐ๋ฅธ ๋ถ„๊ธฐ๋ฅผ ์›ํ•  ๋•Œ ์‚ฌ์šฉ)
    • If-Match, If-None-Match: ETag ๊ฐ’์„ ์‚ฌ์šฉํ•œ๋‹ค.
    • If-Modified-Since, If-Unmodified-Since: Last-Modfied ๊ฐ’์„ ์‚ฌ์šฉํ•œ๋‹ค.

๐ŸŒฑ ํ”„๋ก์‹œ ์บ์‹œ


 proxy cache๋ผ๋Š” ์„œ๋ฒ„๋ฅผ ๋„์ž…ํ•ด์„œ ๋ธŒ๋ผ์šฐ์ €(ํด๋ผ์ด์–ธํŠธ์˜)๊ฐ€ ์›(origin) ์„œ๋ฒ„๊ฐ€ ์•„๋‹Œ proxy cache ์„œ๋ฒ„๋ฅผ ๊ฑฐ์ณ์˜ค๋„๋ก ๋งŒ๋“ ๋‹ค.

 

์ด ํ”„๋ก์‹œ ์บ์‹œ ์„œ๋ฒ„๋Š” ํ•œ๊ตญ ์–ด๋”˜๊ฐ€์—,, → ์‘๋‹ต ์†๋„๊ฐ€ ํ›จ์”ฌ ๋น ๋ฅผ ๊ฒƒ์ด๋‹ค.

 

์œ ํŠœ๋ธŒ ๊ฐ™์€ ๊ฒƒ๋“ค๋„ ์‚ฌ๋žŒ๋“ค์ด ์•ˆ ๋ณด๋Š” ์ฝ˜ํ…์ธ ๋ฅผ ํ‹€๋ฉด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ณ , ์‚ฌ๋žŒ๋“ค์ด ๋งŽ์ด ๋ณด๋Š” ์ปจํ…์ธ ๊ฐ€ ๋นจ๋ฆฌ ๋œฌ๋‹ค.

์ด๊ฒƒ ๋˜ํ•œ ํ”„๋ก์‹œ ์บ์‹œ ์„œ๋ฒ„์˜ ์˜ํ–ฅ์ด๋‹ค.

 

ํ˜„์žฌ๋Š” ๋Œ€๋ถ€๋ถ„ ์ด๋Ÿฌํ•œ cdn ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

 

private cache: ๋‚ด ๋กœ์ปฌ ํ™˜๊ฒฝ์ด๋‚˜ ๋ธŒ๋ผ์šฐ์ €์— ์ €์žฅ๋˜๋Š” ์บ์‹œ

public cache: ์—ฌ๋Ÿฌ ์œ ์ €๊ฐ€ ๊ณต์šฉํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ์บ์‹œ

 

 Cache-Control - ์บ์‹œ ์ง€์‹œ์–ด (๊ธฐํƒ€)

  • Cache-Control: public
    • ์‘๋‹ต์ด public ์บ์‹œ์— ์ €์žฅ๋˜์–ด๋„ ๋จ
  • Cache-Control: private
    • ์‘๋‹ต์ด ํ•ด๋‹น ์‚ฌ์šฉ์ž๋งŒ์„ ์œ„ํ•œ ๊ฒƒ์ž„, private cache์— ์ €์žฅํ•ด์•ผ ํ•จ (๊ธฐ๋ณธ๊ฐ’)
  • Cache-Control: s-maxage
    • ํ”„๋ก์‹œ ์บ์‹œ์—๋งŒ ์ ์šฉ๋˜๋Š” max-age
  • Age: 60 (HTTP ํ—ค๋”)
    • ์˜ค๋ฆฌ์ง„ ์„œ๋ฒ„์—์„œ ์‘๋‹ต ํ›„ ํ”„๋ก์‹œ ์บ์‹œ ๋‚ด์— ๋จธ๋ฌธ ์‹œ๊ฐ„ (์ดˆ)

๐ŸŒฑ ์บ์‹œ ๋ฌดํšจํ™”

Cache-Control - ํ™•์‹คํ•œ ์บ์‹œ ๋ฌดํšจํ™” ์‘๋‹ต

์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์•Œ์•„์„œ ์‚ฌ์šฉ์ž์— ๋งž๊ฒŒ ์บ์‹ฑํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์–ด ์บ์‹œ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•„๋ž˜์˜ ์„ค์ •๋“ค์„ ๋ชจ๋‘ ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

 

์ด ํŽ˜์ด์ง€๋Š” ์ง„์งœ ์บ์‹œ ํ•˜๋ฉด ์•ˆ๋ผ!!

                โฌ‡๏ธ โฌ‡๏ธ โฌ‡๏ธ

  • Cache-Control: no-cache, no-store, must-revalidate
  • Progma: no-cache

 

์บ์‹œ ์ง€์‹œ์–ด - ํ™•์‹คํ•œ ์บ์‹œ ๋ฌดํšจํ™”

  • Cache-Control: no-cache
    • ๋ฐ์ดํ„ฐ๋Š” ์บ์‹œํ•ด๋„ ๋˜์ง€๋งŒ, ํ•ญ์ƒ ์› ์„œ๋ฒ„์— ๊ฒ€์ฆํ•˜๊ณ  ์‚ฌ์šฉ(์ด๋ฆ„์— ์ฃผ์˜!)
  • Cache-Control: no-store
    • ๋ฐ์ดํ„ฐ์— ๋ฏผ๊ฐํ•œ ์ •๋ณด๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ์ €์žฅํ•˜๋ฉด ์•ˆ๋จ (๋ฉ”๋ชจ๋ฆฌ์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ์ตœ๋Œ€ํ•œ ๋นจ๋ฆฌ ์‚ญ์ œ)
  • Cache-Control: must-revalidate
    • ์บ์‹œ ๋งŒ๋ฃŒ ํ›„ ์ตœ์ดˆ ์กฐํšŒ ์‹œ ์› ์„œ๋ฒ„์— ๊ฒ€์ฆํ•ด์•ผ ํ•จ
    • ์› ์„œ๋ฒ„ ์ ‘๊ทผ ์‹คํŒจ ์‹œ ๋ฐ˜๋“œ์‹œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ด์•ผ ํ•จ - 504(Gateway Timeout)
    • must-revalidate๋Š” ์บ์‹œ ์œ ํšจ ์‹œ๊ฐ„์ด๋ผ๋ฉด ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•จ
  • Pragma: no-cache
    • HTTP 1.0 ํ•˜์œ„ ํ˜ธํ™˜

 

no-cache๋Š” cache ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๊ฐ€์ ธ๋‹ค ์“ฐ๊ฑฐ๋‚˜, ํ˜น์€ ์› ์„œ๋ฒ„ ๊ฒ€์ฆ ๊ณผ์ •์—์„œ ๋„คํŠธ์›Œํฌ ๋‹จ์ ˆ๊ฐ™์€ ์˜ค๋ฅ˜๋กœ ์› ์„œ๋ฒ„์— ์ ‘๊ทผ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ์— ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ธฐ ๋ณด๋‹ค๋Š” ์˜ค๋ž˜๋œ ๋ฐ์ดํ„ฐ๋ผ๋„ ์ „์†กํ•˜๋Š” ์‹์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.

 

๊ทธ์— ๋ฐ˜ํ•ด์„œ, must-revalidate๋Š” ์› ์„œ๋ฒ„์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ๋ฌด์กฐ๊ฑด 504 Gateway Timeout ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.

 


 

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

https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard