[HTTP] 7.HTTP ํค๋2 - ์บ์์ ์กฐ๊ฑด๋ถ ์์ฒญ
1. ์บ์ ๊ธฐ๋ณธ ๋์
[์บ์๊ฐ ์์ ๋]
์ฒซ ๋ฒ์งธ ์์ฒญ
๋๋ฒ์งธ ์์ฒญ -> ์๋ฒ์์ ๋๊ฐ์ด ์์ฒญ ๋ฐ์์ ์๋ต ๋ด๋ ค์ค
๋จ์ )
- ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋์ง ์์๋ ๊ณ์ ๋คํธ์ํฌ๋ฅผ ํตํด์ ๋ฐ์ดํฐ๋ฅผ ๋ค์ด๋ฐ์์ผํจ
- ์ธํฐ๋ท ๋คํธ์ํฌ๋ ๋งค์ฐ ๋๋ฆฌ๊ณ ๋น์
- ๋ธ๋ผ์ฐ์ ๋ก๋ฉ ์๋๊ฐ ๋๋ฆผ
- ๋๋ฆฐ ์ฌ์ฉ์ ๊ฒฝํ
[์บ์ ์ ์ฉ]
- ์บ์ ์ ํจํ ์๊ฐ (cache-control: max-age)๋์ star.jpg๊ฐ ์น๋ธ๋ผ์ฐ์ + ๋ธ๋ผ์ฐ์ ์บ์์ ์๋ต๊ฒฐ๊ณผ๋ฅผ ์ ์ฅ
- ๋ ๋ฒ์งธ ์์ฒญ๋ ์บ์์์ ๋จผ์ ํ์ธํ๊ณ ๊ฐ์ ธ์ด
์ฅ์ )
- ์บ์ ๋๋ถ์ ์บ์ ๊ฐ๋ฅ ์๊ฐ๋์ ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ์ง ์์๋ ๋จ
- ๋น์ผ ๋คํธ์ํฌ ์ฌ์ฉ๋ ์ค์ผ ์ ์์
- ๋ธ๋ผ์ฐ์ ๋ก๋ฉ ์๋๊ฐ ๋งค์ฐ ๋น ๋ฆ
- ๋น ๋ฅธ ์ฌ์ฉ์ ๊ฒฝํ
์ธ๋ฒ์งธ ์์ฒญ - ์บ์ ์๊ฐ ์ด๊ณผ
- ๋๊ฐ์ด ์บ์ ๋ฐ์ดํฐ ๋ด๋ ค์ฃผ๊ณ ์บ์ ๋ฎ์ด ์์ฐ๋ฉด์ ์บ์ ์ด๊ธฐํ
- ์ด ๊ณผ์ ์์ ๋คํธ์ํฌ๋ ๊ทธ๋๋ก ์
์บ์ ์๊ฐ ์ด๊ณผ
- ์บ์ ์ ํจ ์๊ฐ์ด ์ด๊ณผ๋๋ฉด ์๋ฒ๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๋ค์ ์กฐํํ๊ณ ์บ์๋ฅผ ๊ฐฑ์
- ์ด๋ ๋ค์ ๋คํธ์ํฌ ๋ค์ด๋ก๋๊ฐ ๋ฐ์
* ์บ์๋ฐ์ดํฐ์ ์๋ฒ๋ฐ์ดํฐ๊ฐ ์๊ฐ ์ด๊ณผ๋์์ด๋ ๋๊ฐ์ ๋ ๋ฐ์ดํฐ ๋ค์ ๋ฐ์ ํ์๊ฐ ์์๊น?
2. ๊ฒ์ฆ ํค๋์ ์กฐ๊ฑด๋ถ ์์ฒญ1
์บ์ ์ ํจ ์๊ฐ์ด ์ด๊ณผํด์ ์๋ฒ์ ๋ค์ ์์ฒญํ๋ฉด ๋ค์ ๋ ๊ฐ์ง ์ํฉ์ด ๋ํ๋จ
1) ์๋ฒ์์ ๊ธฐ์กด ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝ
2) ์๋ฒ์์ ๊ธฐ์กด ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ์ง ์์
์ํฉ) ์บ์ ๋ง๋ฃํ์๋ ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ์ง ์์
- ์๊ฐํด๋ณด๋ฉด ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ ๋์ ์ ์ ์ฅํด ๋์๋ ์บ์๋ฅผ ์ฌ์ฌ์ฉ ๊ฐ๋ฅ
- ๋จ, ํด๋ผ์ด์ธํธ์ ๋ฐ์ดํฐ์ ์๋ฒ์ ๋ฐ์ดํฐ๊ฐ ๊ฐ๋ค๋ ์ฌ์ค์ ํ์ธํ ์ ์๋ ๋ฐฉ๋ฒ ํ์
[๊ฒ์ฆํค๋ ์ถ๊ฐ]
์ฒซ๋ฒ์งธ ์์ฒญ
- ์๋ต ํค๋์ Last-Modified : 2020-11-10 10:00:00
- ์๋ต ๊ฒฐ๊ณผ๋ฅผ ์บ์์ ์ ์ฅ / ์บ์ ๋ฐ์ดํฐ ์ต์ข ์์ ์ผ 2020-11-10 10:00:00
๋๋ฒ์งธ ์์ฒญ - ์บ์ ์๊ฐ ์ด๊ณผ
- ์บ์ ์ต์ข ์์ ์ผ (Last Modified)
- ์์ฒญ์ ๋ณด๋ผ๋ if-modified-since ํค๋ ์ถ๊ฐํด์ ๋ณด๋
- ์๋ฒ์์ ๋ฐ์ดํฐ ์ต์ข ์์ ์ผ์ ๋น๊ต (๊ฒ์ฆ ๊ฐ๋ฅ)
(1) ์์ ์ด ์๋ ๊ฒฝ์ฐ -> 304 Not Modified / HTTP body๊ฐ ์์
(2) ์์ ์ด ๋ ๊ฒฝ์ฐ -> ๋ค์ ์๋ต ๋ณด๋ด๊ณ ์บ์ ์ ์ฅ
์ ๋ฆฌ)
- ์บ์ ์ ํจ ์๊ฐ์ด ์ด๊ณผํด๋, ์๋ฒ์ ๋ฐ์ดํฐ๊ฐ ๊ฐฑ์ ๋์ง ์์ผ๋ฉด
- 304 Not Modified + ํค๋ ๋ฉํ ์ ๋ณด๋ง ์๋ต (Body X)
- ํด๋ผ์ด์ธํธ๋ ์๋ฒ๊ฐ ๋ณด๋ธ ์๋ต ํค๋ ์ ๋ณด๋ก ์บ์์ ๋ฉํ ์ ๋ณด๋ฅผ ๊ฐฑ์
- ํด๋ผ์ด์ธํธ๋ ์บ์์ ์ ์ฅ๋์ด์๋ ๋ฐ์ดํฐ ์ฌํ์ฉ
- ๊ฒฐ๊ณผ์ ์ผ๋ก ๋คํธ์ํฌ ๋ค์ด๋ก๋๊ฐ ๋ฐ์ํ์ง๋ง ์ฉ๋์ด ์ ์ ํค๋ ์ ๋ณด๋ง ๋ค์ด๋ก๋
- ๋งค์ฐ ์ค์ฉ์ ์ธ ํด๊ฒฐ์ฑ
3. ๊ฒ์ฆ ํค๋์ ์กฐ๊ฑด๋ถ ์์ฒญ2
๋จ์ )
- 1์ด ๋ฏธ๋ง(0.x์ด) ๋จ์๋ก ์บ์ ์กฐ์ ์ด ๋ถ๊ฐ๋ฅ
- ๋ ์ง ๊ธฐ๋ฐ์ ๋ก์ง ์ฌ์ฉ
- ๋ฐ์ดํฐ๋ฅผ ์์ ํด์ ๋ ์ง๊ฐ ๋ค๋ฅด์ง๋ง, ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์์ ํด์ ๋ฐ์ดํฐ ๊ฒฐ๊ณผ๊ฐ ๋๊ฐ์ ๊ฒฝ์ฐ
- ์๋ฒ์์ ๋ณ๋์ ์บ์ ๋ก์ง์ ๊ด๋ฆฌํ๊ณ ์ถ์ ๊ฒฝ์ฐ
ex) ์คํ์ด์ค๋ ์ฃผ์์ฒ๋ผ ํฌ๊ฒ ์ํฅ์ด ์๋ ๋ณ๊ฒฝ์์ ์บ์๋ฅผ ์ ์งํ๊ณ ์ถ์ ๊ฒฝ์ฐ
ETag, if-None-Match
- ETag(Entity Tag)
- ์บ์์ฉ ๋ฐ์ดํฐ์ ์์์ ๊ณ ์ ํ ๋ฒ์ ์ด๋ฆ์ ๋ฌ์๋
ex) ETag: "v1.0", ETag: "a1b2c3"
- ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์ด ์ด๋ฆ์ ๋ฐ๊ฟ ๋ณ๊ฒฝ (Hash๋ฅผ ๋ค์ ์์ฑ)
ex) ETag: "aaa" -> ETag: "bbb"
- ์ง์ง ๋จ์ํ๊ฒ ETag๋ง ๋ณด๋ด์ ๊ฐ์ผ๋ฉด ์ ์ง, ๋ค๋ฅด๋ฉด ๋ค์ ๋ฐ๊ธฐ
[๊ฒ์ฆํค๋์ถ๊ฐ]
ETag๋ก ๋น๊ต
์ ๋ฆฌ)
- ETag๋ง ์๋ฒ์ ๋ณด๋ด์ ๊ฐ์ผ๋ฉด ์ ์ง / ๋ค๋ฅด๋ฉด ๋ค์ ๋ฐ๊ธฐ
- ์บ์ ์ ์ด ๋ก์ง์ ์๋ฒ์์ ์์ ํ ๊ด๋ฆฌ (ํด๋ผ์ด์ธํธ๋ ๋จ์ํ ์ด ๊ฐ์ ์๋ฒ์ ์ ๊ณต, ํด๋ผ์ด์ธํธ๋ ์บ์ ๋งค์ปค๋์ฆ์ ๋ชจ๋ฆ)
ex) ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฐํฌ ์ฃผ๊ธฐ์ ๋ง์ถฐ ETag ๊ฐฑ์
์๋ฒ๋ ๋ฐฐํ ์คํ ๊ธฐ๊ฐ์ธ 3์ผ ๋์ ํ์ผ์ด ๋ณ๊ฒฝ๋์ด๋ ETag ๋์ผํ๊ฒ ์ ์ง
4. ์บ์์ ์กฐ๊ฑด๋ถ ์์ฒญ ํค๋
(1) Cache-Control : ์บ์ ์ง์์ด (directives)
- Cache-Control : max-age : ์บ์ ์ ํจ ์๊ฐ, ์ด ๋จ์
- Cache-Control : no-cache : ๋ฐ์ดํฐ๋ ์บ์ํด๋ ๋์ง๋ง ํญ์ ์(origin)์๋ฒ(์บ์ ํ๋ก์ ์๋ฒ๊ฐ ์๋ ์ฐ์๋ฒ)์ ๊ฒ์ฆํ๊ณ ์ฌ์ฉ
- Cache-Control : no-store : ๋ฐ์ดํฐ์ ๋ฏผ๊ฐํ ์ ๋ณด ์์ผ๋ฏ๋ก ์ ์ฅ ์๋จ (๋ฉ๋ชจ๋ฆฌ์์ ์ฌ์ฉํ๊ณ ์ต๋ํ ๋นจ๋ฆฌ ์ญ์ )
(2) Pragma
- Pragma : no-cache
- HTTP 1.0 ํ์ํธํ
(์ ์์)
(3) Expires
- ์บ์ ๋ง๋ฃ์ผ์ ์ ํํ ๋ ์ง ์ง์ ๊ฐ๋ฅ -> ๋ณ๋ก์, ์ด๋จ์๊ฐ ๋ ์ ์ฐํจ
- ์ง๊ธ์ ๋ ์ ์ฐํ Cache-Control:max-age ๊ถ์ฅ (๋์ด ๊ฐ์ด ์ฐ๋ฉด Expires ๋ฌด์)
๊ฒ์ฆ ํค๋
- ETag: "v 1.0", ETag: "abc"
- Last-Modified: Thu, 04 Jun 2020 07:19:24 GMT
์กฐ๊ฑด๋ถ ์์ฒญ ํค๋
- If-Match, If-None-Match : ETag๊ฐ ์ฌ์ฉ
- If-Modified-Since, If-Unmodified_Since : Last-Modified๊ฐ ์ฌ์ฉ
5. ํ๋ก์ ์บ์
์ ์๋ฒ ์ง์ ์ ๊ทผ (origin server)
ํ๋ก์ ์บ์ ๋์
* ์ฌ๋์ด ๋ง์ด ๋ณด๋ ์์์ด ๋ค์ด์ด ๋น ๋ฅธ ์ด์
* ์น๋ธ๋ผ์ฐ์ (private์บ์) , ํ๋ก์ ์บ์ ์๋ฒ(public ์บ์)
Cache-Control: public : ์๋ต์ด public ์บ์์ ์ ์ฅ๋์ด๋ ๋จ
Cache-Control: private : ์๋ต์ด ํด๋น ์ฌ์ฉ์๋ง์ ์ํ๊ฒ, pirvate ์บ์์ ์ ์ฅํด์ผํจ (default)
Cache-Control: s-maxage : ํ๋ก์ ์บ์์๋ง ์ ์ฉ๋๋ max-age
Age: 60 (HTTP ํค๋) : origin ์๋ฒ์์ ์๋ต ํ ํ๋ก์ ์บ์ ๋ด์ ๋จธ๋ฌธ ์๊ฐ(์ด)
6. ์บ์ ๋ฌดํจํ
ํ์คํ ์บ์ ๋ฌดํจํ ์๋ต
Cache-Control : no-cache, no-store, must-revalidate
Pragma: no-cache (HTTP 1.0 ํ์ํธํ)
์บ์ ์ง์์ด(directives) ํ์คํ ์บ์ ๋ฌดํจํ
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 VS must-revalidate]
1) no-cache
* no-cache๋ก ๋ณด๋๋๋ฐ ์๊ฐ์ ์ผ๋ก ์์๋ฒ์์ ๋คํธ์ํฌ ๋จ์ ๋๋ค๋ฉด?
-> ์๋ ๋ฐ์ดํฐ๋ผ๋ ๋ณด์ฌ์ฃผ์๋ ์ค์ ์ด ์์ (์๋ต ๊ฐ๋ฅ) 200 OK (or Error)
2) revalidate
- ์ ์๋ฒ์ ์ ๊ทผํ ์ ์๋ ๊ฒฝ์ฐ ํญ์ ์ค๋ฅ๊ฐ ๋ฐ์ํด์ผํจ!
- ์๋ต) 504 Gateway Timeout
'๐จโ๐ป Web Development > HTTP' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[HTTP] 7.HTTP ํค๋1 - ์ผ๋ฐํค๋ (0) | 2023.03.03 |
---|---|
[HTTP] 6.HTTP ์ํ์ฝ๋ (0) | 2023.03.03 |
[HTTP] 5.HTTP ๋ฉ์๋ ํ์ฉ (0) | 2023.03.03 |
[HTTP] 4.HTTP ๋ฉ์๋ (0) | 2023.03.02 |
[HTTP] 3.HTTP ๊ธฐ๋ณธ (0) | 2023.03.02 |
์ต๊ทผ๋๊ธ