| Internet Engineering Task Force (IETF) | R. Fielding, Editor |
| Request for Comments: 9111 | Adobe |
| Obsoletes: 7234 | M. Nottingham, Editor |
| STD: 98 | Fastly |
| Category: Standards Track | J. Reschke, Editor |
| ISSN: 2070-1721 | greenbytes |
| June 2022 |
HTTP ์บ์ฑ
์ด๋ก
ํ์ดํผํ ์คํธ ์ ์ก ํ๋กํ ์ฝ(HTTP)์ ๋ถ์ฐํ, ํ์ ํ ํ์ดํผํ ์คํธ ์ ๋ณด ์์คํ ์ ์ํ ์ํ ์๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ณ์ธต ํ๋กํ ์ฝ์ ๋๋ค. ์ด ๋ฌธ์๋ HTTP ์บ์์ ์บ์ ๋์์ ์ ์ดํ๊ฑฐ๋ ์บ์ ๊ฐ๋ฅํ ์๋ต ๋ฉ์์ง๋ฅผ ๋ํ๋ด๋ ๊ด๋ จ ํค๋ ํ๋๋ฅผ ์ ์ํฉ๋๋ค.
์ด ๋ฌธ์๋ RFC 7234๋ฅผ ๋์ฒดํฉ๋๋ค.
์ด ๋ฉ๋ชจ์ ์ํ
์ด ๋ฌธ์๋ ์ธํฐ๋ท ํ์ค ํธ๋ ๋ฌธ์์ ๋๋ค.
์ด ๋ฌธ์๋ ์ธํฐ๋ท ์์ง๋์ด๋ง ํ์คํฌ ํฌ์ค(IETF)์ ์ฐ์ถ๋ฌผ์ ๋๋ค. ์ด๋ IETF ์ปค๋ฎค๋ํฐ์ ํฉ์๋ฅผ ๋ํ๋ ๋๋ค. ๊ณต๊ฐ ๊ฒํ ๋ฅผ ๊ฑฐ์ณค์ผ๋ฉฐ ์ธํฐ๋ท ์์ง๋์ด๋ง ์ด์ ๊ทธ๋ฃน(IESG)์ ์ํด ์ถํ ์น์ธ์ ๋ฐ์์ต๋๋ค. ์ธํฐ๋ท ํ์ค์ ๋ํ ์ถ๊ฐ ์ ๋ณด๋ RFC 7841์ ์น์ 2์์ ํ์ธํ ์ ์์ต๋๋ค.
์ด ๋ฌธ์์ ํ์ฌ ์ํ, ๋ชจ๋ ์ ์คํ(errata), ๋ฐ ์ด ๋ฌธ์์ ๋ํ ์๊ฒฌ ์ ์ถ ๋ฐฉ๋ฒ์ ๋ํ ์ ๋ณด๋ https://www.rfc-editor.org/info/rfc9111์์ ํ์ธํ ์ ์์ต๋๋ค.
Copyright Notice
Copyright (c) 2022 IETF Trust and the persons identified as the document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Revised BSD License.
This document may contain material from IETF Documents or IETF Contributions published or made publicly available before November 10, 2008. The person(s) controlling the copyright in some of this material may not have granted the IETF Trust the right to allow modifications of such material outside the IETF Standards Process. Without obtaining an adequate license from the person(s) controlling the copyright in such materials, this document may not be modified outside the IETF Standards Process, and derivative works of it may not be created outside the IETF Standards Process, except to format it for publication as an RFC or to translate it into languages other than English.
- 1. ์๊ฐ
- 2. ์บ์ ๋์ ๊ฐ์
- 3. ์บ์์ ์๋ต ์ ์ฅ
- 4. ์บ์์์ ์๋ต ๊ตฌ์ฑ
- 5. ํ๋ ์ ์
- 6. ์ ํ๋ฆฌ์ผ์ด์ ๋ฐ ๋ค๋ฅธ ์บ์์์ ๊ด๊ณ
- 7. ๋ณด์ ๊ณ ๋ ค์ฌํญ
- 8. IANA ๊ณ ๋ ค์ฌํญ
- 9. ์ฐธ๊ณ ๋ฌธํ
- Appendix A. Collected ABNF
- Appendix B. Changes from RFC 7234
- Acknowledgements
- Index
- Authors' Addresses
1. ์๊ฐ
ํ์ดํผํ ์คํธ ์ ์ก ํ๋กํ ์ฝ(HTTP)์ ๋คํธ์ํฌ ๊ธฐ๋ฐ ํ์ดํผํ ์คํธ ์ ๋ณด ์์คํ ๊ณผ์ ์ ์ฐํ ์ํธ์์ฉ์ ์ํด ํ์ฅ ๊ฐ๋ฅํ ์๋ฏธ์ ์๊ธฐ ์ค๋ช ์ ์ธ ๋ฉ์์ง๋ฅผ ์ฌ์ฉํ๋ ์ํ ๋น์ ์ฅ ์ ํ๋ฆฌ์ผ์ด์ ๊ณ์ธต์ ์์ฒญ/์๋ต ํ๋กํ ์ฝ์ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ถ์ฐ ์ ๋ณด ์์คํ ์์ ์ฌ์ฉ๋๋ฉฐ, ์๋ต ์บ์๋ฅผ ์ฌ์ฉํ๋ฉด ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค. ์ด ๋ฌธ์๋ ์๋ต ๋ฉ์์ง์ ์บ์ฑ ๋ฐ ์ฌ์ฌ์ฉ๊ณผ ๊ด๋ จ๋ HTTP์ ์ธก๋ฉด์ ์ ์ํฉ๋๋ค.
HTTP์ cache๋ ์๋ต ๋ฉ์์ง์ ๋ก์ปฌ ์ ์ฅ์์ ๊ทธ ์์ ๋ฉ์์ง ์ ์ฅ, ๊ฒ์ ๋ฐ ์ญ์ ๋ฅผ ์ ์ดํ๋ ํ์ ์์คํ ์ ๋งํฉ๋๋ค. ์บ์๋ ํฅํ ๋๋ฑํ ์์ฒญ์ ๋ํด ์๋ต ์๊ฐ์ ์ค์ด๊ณ ๋คํธ์ํฌ ๋์ญํญ ์๋น๋ฅผ ์ค์ด๊ธฐ ์ํด ์บ์ ๊ฐ๋ฅํ ์๋ต์ ์ ์ฅํฉ๋๋ค. ์ด๋ ํ ํด๋ผ์ด์ธํธ๋ ์๋ฒ๋ MAY ์บ์๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋, ํฐ๋๋ก ๋์ํ ๋๋ ์ฌ์ฉํ ์ ์์ต๋๋ค (์น์ 3.7 of [HTTP]).
HTTP ์บ์ฑ์ ๋ชฉ์ ์ ์ด์ ์ ์๋ต ๋ฉ์์ง๋ฅผ ์ฌ์ฌ์ฉํ์ฌ ํ์ฌ์ ์์ฒญ์ ๋ง์กฑ์ํด์ผ๋ก์จ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํค๋ ๊ฒ์ ๋๋ค. ์บ์๋ ์ ์ฅ๋ ์๋ต์ด ์ด ์์ฒญ์ ๋ํด "๊ฒ์ฆ(validation)"(์ ์ฅ๋ ์๋ต์ด ์ฌ์ ํ ์ ํจํ์ง ์๋ณธ ์๋ฒ์ ํ์ธํ๋ ๊ฒ) ์์ด ์ฌ์ฌ์ฉ๋ ์ ์๋ ๊ฒฝ์ฐ๋ฅผ ์น์ 4.2์ ์ ์๋ ๋๋ก "์ ์ (fresh)"ํ๋ค๊ณ ๊ฐ์ฃผํฉ๋๋ค. ๋ฐ๋ผ์ ์ ์ ํ ์๋ต์ ์บ์๊ฐ ์ด๋ฅผ ์ฌ์ฌ์ฉํ ๋๋ง๋ค ์ง์ฐ๊ณผ ๋คํธ์ํฌ ์ค๋ฒํค๋๋ฅผ ์ค์ผ ์ ์์ต๋๋ค. ์ ์ฅ๋ ์๋ต์ด ์ ์ ํ์ง ์์ ๋์๋, ๊ฒ์ฆ์ ํตํด ๊ฐฑ์ ๋ ์ ์๋ค๋ฉด(์น์ 4.3) ๋๋ ์๋ณธ์ด ์ฌ์ฉ ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ(์น์ 4.2.4) ์ฌ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
1.1. ์๊ตฌ ์ฌํญ ํ๊ธฐ๋ฒ
์ด ๋ฌธ์์์ ํค์๋ "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", ๋ฐ "OPTIONAL"์ BCP 14์ ์ ์์ ๋ฐ๋ผ, ์ค์ง ๋ชจ๋ ๋๋ฌธ์๋ก ๋ํ๋ ๋์๋ง ์ฌ๊ธฐ์ ์ค๋ช ๋ ๋๋ก ํด์๋์ด์ผ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ [RFC2119] ๋ฐ [RFC8174]๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
1.2. ๊ตฌ๋ฌธ ํ๊ธฐ๋ฒ
์ด ๋ช ์ธ์๋ [RFC5234]์ ํ์ฅ๋ ๋ฐฑ์ปค์ค-๋์ฐ์ด ํ์(ABNF) ํ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ฉฐ, [RFC7405]์์ ์ ์๋ ๋ฌธ์์ด์ ๋์๋ฌธ์ ๊ตฌ๋ถ ํ๊ธฐ๋ฒ ํ์ฅ์ ํฌํจํฉ๋๋ค.
๋ํ ์ด ๋ช ์ธ์๋ ์น์ 5.6.1 of [HTTP]์ ์ ์๋ ๋ฆฌ์คํธ ํ์ฅ์ ์ฌ์ฉํ์ฌ "#" ์ฐ์ฐ์๋ฅผ ์ด์ฉํ ์ผํ๋ก ๊ตฌ๋ถ๋ ๋ชฉ๋ก์ ๊ฐ๊ฒฐํ ์ ์๋ฅผ ํ์ฉํฉ๋๋ค(์ด๋ "*" ์ฐ์ฐ์๊ฐ ๋ฐ๋ณต์ ๋ํ๋ด๋ ๋ฐฉ์๊ณผ ์ ์ฌํฉ๋๋ค). ๋ถ๋ก A์๋ ๋ชจ๋ ๋ฆฌ์คํธ ์ฐ์ฐ์๊ฐ ํ์ค ABNF ํ๊ธฐ๋ฒ์ผ๋ก ํ์ฅ๋ ์์ง๋ ๋ฌธ๋ฒ์ด ํ์๋ฉ๋๋ค.
1.2.1. ๊ฐ์ ธ์จ ๊ท์น
๋ค์์ ํต์ฌ ๊ท์น์ ์ฐธ์กฐ๋ก ํฌํจ๋๋ฉฐ, ์ด๋ [RFC5234]์ ๋ถ๋ก B.1์ ์ ์๋์ด ์์ต๋๋ค: DIGIT (10์ง์ 0-9).
[HTTP]๋ ๋ค์ ๊ท์น๋ค์ ์ ์ํฉ๋๋ค:
HTTP-date = <HTTP-date, see [HTTP], Section 5.6.7> OWS = <OWS, see [HTTP], Section 5.6.3> field-name = <field-name, see [HTTP], Section 5.1> quoted-string = <quoted-string, see [HTTP], Section 5.6.4> token = <token, see [HTTP], Section 5.6.2>
1.2.2. ๋ธํ ์ด
delta-seconds ๊ท์น์ ์ด ๋จ์์ ์๊ฐ์ ๋ํ๋ด๋ ์์ด ์๋ ์ ์๋ฅผ ์ง์ ํฉ๋๋ค.
delta-seconds = 1*DIGIT
delta-seconds ๊ฐ์ ๊ตฌ๋ฌธ ๋ถ์ํ์ฌ ์ด์ง ํ์์ผ๋ก ๋ณํํ๋ ์์ ์๋ ์ ์ด๋ 31๋นํธ ์ด์์ ๋น์์ ์ ์ ๋ฒ์๋ฅผ ๊ฐ๋ ์ฐ์ ํ์์ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ์บ์๊ฐ ํํํ ์ ์๋ ๊ฐ์ฅ ํฐ ์ ์๋ณด๋ค ํฐ delta-seconds ๊ฐ์ ์์ ํ๊ฑฐ๋ ์ดํ ๊ณ์ฐ ์ค ์ค๋ฒํ๋ก๊ฐ ๋ฐ์ํ๋ฉด, ์บ์๋ ํด๋น ๊ฐ์ 2147483648(231) ๋๋ ํธ๋ฆฌํ๊ฒ ํํํ ์ ์๋ ๊ฐ์ฅ ํฐ ์์ ์ ์๋ก ๊ฐ์ฃผํด์ผ ํฉ๋๋ค(MUST).
2. ์บ์ ๋์ ๊ฐ์
์ ์ ํ ์บ์ ๋์์ HTTP ์ ์ก์ ์๋ฏธ๋ก ์ ๋ณด์กดํ๋ฉด์ ์บ์์ ์ด๋ฏธ ๋ณด์ ํ ์ ๋ณด์ ์ ์ก์ ์ค์ ๋๋ค. ์ผ๋ฐ ์ฉ์ด ๋ฐ HTTP์ ํต์ฌ ๊ฐ๋ ์ ๋ํด์๋ ์น์ 3 of [HTTP]๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
์บ์ฑ์ HTTP์ ์์ ํ OPTIONALํ ๊ธฐ๋ฅ์ด์ง๋ง, ์บ์๋ ์๋ต์ ์ฌ์ฌ์ฉํ๋ ๊ฒ์ด ๋ฐ๋์งํ๋ฉฐ ๊ทธ๋ฌํ ์ฌ์ฌ์ฉ์ด ํน๋ณํ ์๊ตฌ์ฌํญ์ด๋ ๋ก์ปฌ ๊ตฌ์ฑ์ ์ํด ๊ธ์ง๋์ง ์๋ ํ ๊ธฐ๋ณธ ๋์์ด๋ผ๊ณ ๊ฐ์ ํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ HTTP ์บ์์ ์๊ตฌ์ฌํญ์ ์บ์๊ฐ ์ฌ์ฌ์ฉ ๋ถ๊ฐ๋ฅํ ์๋ต์ ์ ์ฅํ๊ฑฐ๋ ์ ์ฅ๋ ์๋ต์ ๋ถ์ ์ ํ๊ฒ ์ฌ์ฌ์ฉํ์ง ๋ชปํ๋๋ก ๋ฐฉ์งํ๋ ๋ฐ ์ค์ ์ ๋๋ฉฐ, ์บ์๊ฐ ํญ์ ํน์ ์๋ต๋ค์ ์ ์ฅํ๊ณ ์ฌ์ฌ์ฉํ๋๋ก ๊ฐ์ ํ์ง๋ ์์ต๋๋ค.
์บ์ ํค๋ ์บ์๊ฐ ์๋ต์ ์ ํํ๋ ๋ฐ ์ฌ์ฉํ๋ ์ ๋ณด๋ก, ์ต์ํ ์ ์ฅ๋ ์๋ต์ ๊ฒ์ํ๋ ๋ฐ ์ฌ์ฉ๋ ์์ฒญ ๋ฉ์๋์ ๋์ URI๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ๋ฉ์๋๋ ์ดํ์ ์์ฒญ์ ์ถฉ์กฑ์ํค๋ ๋ฐ ํด๋น ์๋ต์ ์ด๋ค ์ํฉ์์ ์ฌ์ฉํ ์ ์๋์ง๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ค๋๋ ํํ ์ฌ์ฉ๋๋ ๋ง์ HTTP ์บ์๋ GET ์๋ต๋ง ์บ์ํ๋ฏ๋ก ์บ์ ํค๋ก URI๋ง ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
์ฝํ ์ธ ํ์(content negotiation)์ ๋์์ธ ์์ฒญ ๋์์ ๋ํด ์บ์๊ฐ ์ฌ๋ฌ ์๋ต์ ์ ์ฅํ ์ ์์ต๋๋ค. ์บ์๋ Vary ์๋ต ํค๋ ํ๋์ ์ ๋ณด๋ฅผ ์ฌ์ฉํ์ฌ ์๋ ์์ฒญ์ ์ผ๋ถ ํค๋ ํ๋๋ฅผ ์บ์ ํค์ ํฌํจํจ์ผ๋ก์จ ์ด๋ฌํ ์๋ต์ ๊ตฌ๋ถํฉ๋๋ค(์์ธํ ๋ด์ฉ์ ์น์ 4.1 ์ฐธ์กฐ).
์บ์๋ ์ถ๊ฐ ์๋ฃ๋ฅผ ์บ์ ํค์ ํฌํจํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์ ์์ด์ ํธ ์บ์๋ ์ฐธ์กฐ ์ฌ์ดํธ์ ์ ์ฒด์ฑ์ ํฌํจํ์ฌ ์บ์๋ฅผ "์ด์ค ํคํ(double keying)"ํ์ฌ ์ผ๋ถ ํ๋ผ์ด๋ฒ์ ์ํ์ ํผํ ์ ์์ต๋๋ค(์์ธํ ๋ด์ฉ์ ์น์ 7.2 ์ฐธ์กฐ).
๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์บ์๋ ๊ฒ์ ์์ฒญ์ ์ฑ๊ณต ๊ฒฐ๊ณผ, ์ฆ GET ์์ฒญ์ ๋ํ 200 (OK) ์๋ต(๋์ ๋ฆฌ์์ค์ ํํ์ ํฌํจ)์ ์ ์ฅํฉ๋๋ค(์น์ 9.3.1 of [HTTP]). ๊ทธ๋ฌ๋ ๋ฆฌ๋๋ ์ , ๋ถ์ ์ ๊ฒฐ๊ณผ(์: 404 (Not Found)), ๋ถ์์ ํ ๊ฒฐ๊ณผ(์: 206 (Partial Content)) ๋ฐ ๋ฉ์๋ ์ ์๊ฐ ๊ทธ๋ฌํ ์บ์ฑ์ ํ์ฉํ๊ณ ์บ์ ํค๋ก ์ฌ์ฉํ๊ธฐ ์ ํฉํ ๊ฒ์ ์ ์ํ๋ ๊ฒฝ์ฐ GET ์ด์ธ์ ๋ฉ์๋์ ๋ํ ์๋ต์ ์ ์ฅํ๋ ๊ฒ๋ ๊ฐ๋ฅํฉ๋๋ค.
์ฐ๊ฒฐ์ด ๋๊ธด(disconnected) ์บ์๋ ์๋ณธ ์๋ฒ์ ์ฐ๋ฝํ ์ ์๊ฑฐ๋ ์์ฒญ์ ์ ๋ฌ ๊ฒฝ๋ก๋ฅผ ์ฐพ์ ์ ์์ ๋๋ฅผ ๋งํฉ๋๋ค. ์ฐ๊ฒฐ์ด ๋๊ธด ์บ์๋ ์ผ๋ถ ์ํฉ์์ ๋ง๋ฃ๋ ์๋ต์ ์ ๊ณตํ ์ ์์ต๋๋ค(์น์ 4.2.4).
3. ์บ์์ ์๋ต ์ ์ฅ
์บ์๋ ๋ค์ ์กฐ๊ฑด์ ๋ง์กฑํ์ง ์๋ ํ ์์ฒญ์ ๋ํ ์๋ต์ ์ ์ฅํด์๋ ์ ๋ฉ๋๋ค: (MUST NOT store a response to a request unless:)
-
์์ฒญ ๋ฉ์๋๋ฅผ ์บ์๊ฐ ์ดํดํด์ผ ํฉ๋๋ค;
-
์๋ต ์ํ ์ฝ๋๊ฐ 206 ๋๋ 304์ด๊ฑฐ๋ must-understand ์บ์ ์ง์์ด(์น์ 5.2.2.3)๊ฐ ์๋ ๊ฒฝ์ฐ: ์บ์๊ฐ ํด๋น ์๋ต ์ํ ์ฝ๋๋ฅผ ์ดํดํด์ผ ํฉ๋๋ค;
-
์๋ต์ no-store ์บ์ ์ง์์ด๊ฐ ์์ด์ผ ํฉ๋๋ค(์์ธํ ๋ด์ฉ์ ์น์ 5.2.2.5 ์ฐธ์กฐ);
-
์บ์๊ฐ ๊ณต์ ์บ์์ธ ๊ฒฝ์ฐ: private ์๋ต ์ง์์ด๊ฐ ์๊ฑฐ๋ ๊ณต์ ์บ์๊ฐ ์์ ๋ ์๋ต์ ์ ์ฅํ ์ ์๋๋ก ํ์ฉํด์ผ ํฉ๋๋ค(์์ธํ ๋ด์ฉ์ ์น์ 5.2.2.7 ์ฐธ์กฐ);
-
์บ์๊ฐ ๊ณต์ ์บ์์ธ ๊ฒฝ์ฐ: ์์ฒญ์ Authorization ํค๋ ํ๋๊ฐ ์์ด์ผ ํ๋ฉฐ(์์ธํ ๋ด์ฉ์ ์น์ 11.6.2 of [HTTP] ์ฐธ์กฐ) ๋๋ ์๋ต์ ๊ณต์ ์บ์ฑ์ ๋ช ์์ ์ผ๋ก ํ์ฉํ๋ ์๋ต ์ง์์ด๊ฐ ์์ด์ผ ํฉ๋๋ค(์์ธํ ๋ด์ฉ์ ์น์ 3.5 ์ฐธ์กฐ);
-
์๋ต์๋ ๋ค์ ์ค ์ ์ด๋ ํ๋๊ฐ ํฌํจ๋์ด์ผ ํฉ๋๋ค:
- ๊ณต๊ฐ ์๋ต ์ง์์ด(์์ธํ ๋ด์ฉ์ ์น์ 5.2.2.9 ์ฐธ์กฐ);
- ์บ์๊ฐ ๊ณต์ ์บ์๊ฐ ์๋ ๊ฒฝ์ฐ ๊ฐ์ธ ์๋ต ์ง์์ด(์์ธํ ๋ด์ฉ์ ์น์ 5.2.2.7 ์ฐธ์กฐ);
- Expires ํค๋ ํ๋(์์ธํ ๋ด์ฉ์ ์น์ 5.3 ์ฐธ์กฐ);
- max-age ์๋ต ์ง์์ด(์์ธํ ๋ด์ฉ์ ์น์ 5.2.2.1 ์ฐธ์กฐ);
- ์บ์๊ฐ ๊ณต์ ์บ์์ธ ๊ฒฝ์ฐ: s-maxage ์๋ต ์ง์์ด(์์ธํ ๋ด์ฉ์ ์น์ 5.2.2.10 ์ฐธ์กฐ);
- ์บ์ ๊ฐ๋ฅํจ์ ํ์ฉํ๋ ์บ์ ํ์ฅ(์์ธํ ๋ด์ฉ์ ์น์ 5.2.3 ์ฐธ์กฐ); ๋๋
- ํด๋ฆฌ์คํฑ์ผ๋ก ์บ์ ๊ฐ๋ฅํ๋ค๊ณ ์ ์๋ ์ํ ์ฝ๋(์์ธํ ๋ด์ฉ์ ์น์ 4.2.2 ์ฐธ์กฐ).
์บ์ ํ์ฅ์ ์์ ๋์ด๋ ์๊ตฌ์ฌํญ์ ์ฌ์ ์ํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ์น์ 5.2.3๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
์ด ๋ฌธ๋งฅ์์ ์บ์๊ฐ ์์ฒญ ๋ฉ์๋ ๋๋ ์๋ต ์ํ ์ฝ๋๋ฅผ "์ดํดํ๋ค"๊ณ ํ๋ ๊ฒ์ ๊ทธ๊ฒ์ ์ธ์ํ๊ณ ์ง์ ๋ ๋ชจ๋ ์บ์ฑ ๊ด๋ จ ๋์์ ๊ตฌํํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์ผ๋ฐ์ ์ธ ๋์์์๋ ์ผ๋ถ ์บ์๊ฐ ์บ์ ๊ฒ์ฆ์(validator)๋ ๋ช ์์ ๋ง๋ฃ ์๊ฐ๋ ์๋ ์๋ต์ ์ ์ฅํ์ง ์์ ์ ์์ต๋๋ค. ์ด๋ฌํ ์๋ต์ ๋ณดํต ์ ์ฅํด๋ ์ ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ทธ๋ฌ๋ ์บ์๊ฐ ์ด๋ฌํ ์๋ต์ ์ ์ฅํ๋ ๊ฒ์ด ๊ธ์ง๋์ง๋ ์์ต๋๋ค.
3.1. ํค๋ ๋ฐ ํธ๋ ์ผ๋ฌ ํ๋ ์ ์ฅ
์บ์๋ ์๋ต์ ์ ์ฅํ ๋ ์ธ์ํ์ง ๋ชปํ๋ ํ๋๋ฅผ ํฌํจํ์ฌ ์์ ํ ๋ชจ๋ ์๋ต ํค๋ ํ๋๋ฅผ ํฌํจํด์ผ ํฉ๋๋ค(MUST); ์ด๋ ์๋ก์ด HTTP ํค๋ ํ๋๊ฐ ์ฑ๊ณต์ ์ผ๋ก ๋ฐฐํฌ๋ ์ ์๊ฒ ๋ณด์ฅํฉ๋๋ค. ๋ค๋ง ๋ค์๊ณผ ๊ฐ์ ์์ธ๊ฐ ์์ต๋๋ค:
- Connection ํค๋ ํ๋์ ๊ทธ ์์ ๋์ด๋ ํ๋ ์ด๋ฆ์ ์น์ 7.6.1 of [HTTP]์ ์ํด ๋ฉ์์ง๋ฅผ ์ ๋ฌํ๊ธฐ ์ ์ ์ ๊ฑฐ๋์ด์ผ ํฉ๋๋ค. ์ด๋ ์ ์ฅ ์ ์ ์ ๊ฑฐํจ์ผ๋ก์จ ๊ตฌํ๋ MAY ์์ต๋๋ค.
- ๋ง์ฐฌ๊ฐ์ง๋ก ์ผ๋ถ ํ๋์ ์๋ฏธ๋ก ์ ๋ฉ์์ง๋ฅผ ์ ๋ฌํ๊ธฐ ์ ์ ํด๋น ํ๋๋ค์ ์ ๊ฑฐํ๋๋ก ์๊ตฌํ๋ฉฐ, ์ด๋ ์ ์ฅ ์ ์ ์ ๊ฑฐํจ์ผ๋ก์จ ๊ตฌํ๋ ์ ์์ต๋๋ค(์ด ์ญ์ MAY). ๋ช ๊ฐ์ง ์๋ ์น์ 7.6.1 of [HTTP]๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
- no-cache(์น์ 5.2.2.4) ๋ฐ private(์น์ 5.2.2.7) ์บ์ ์ง์์ด๋ ๊ฐ๊ฐ ๋ชจ๋ ์บ์ ๋๋ ๊ณต์ ์บ์๊ฐ ํค๋ ํ๋๋ฅผ ์ ์ฅํ๋ ๊ฒ์ ๋ฐฉ์งํ๋ ์ธ์๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค.
- ์บ์๊ฐ ์์ฒญ์ ์ ๋ฌํ ๋ ์ฌ์ฉํ๋ ํ๋ก์์ ํนํ๋ ํค๋ ํ๋๋, ์บ์๊ฐ ํ๋ก์์ ์ ์ฒด์ฑ์ ์บ์ ํค์ ํฌํจํ์ง ์๋ ํ ์ ์ฅํด์๋ ์ ๋ฉ๋๋ค(MUST NOT). ์ฌ์ค์ ์ด๋ Proxy-Authenticate(์น์ 11.7.1 of [HTTP]), Proxy-Authentication-Info(์น์ 11.7.3 of [HTTP]), ๋ฐ Proxy-Authorization(์น์ 11.7.2 of [HTTP])์ ๊ตญํ๋ฉ๋๋ค.
์บ์๋ ํธ๋ ์ผ๋ฌ ํ๋๋ฅผ ํค๋ ํ๋์ ๋ณ๋๋ก ์ ์ฅํ๊ฑฐ๋ ๋ฒ๋ฆด ์ ์์ต๋๋ค(MAY). ๊ทธ๋ฌ๋ ์บ์๋ ํธ๋ ์ผ๋ฌ ํ๋๋ฅผ ํค๋ ํ๋์ ๊ฒฐํฉํด์๋ ์ ๋ฉ๋๋ค(MUST NOT).
3.2. ์ ์ฅ๋ ํค๋ ํ๋ ์ ๋ฐ์ดํธ
์บ์๋ ์ฌ๋ฌ ์ํฉ์์(์: ์น์ 3.4, ์น์ 4.3.4, ๋ฐ ์น์ 4.3.5 ์ฐธ์กฐ) ๋ค๋ฅธ(์ผ๋ฐ์ ์ผ๋ก ๋ ์ต์ ์) ์๋ต์ผ๋ก๋ถํฐ ์ ์ฅ๋ ์๋ต์ ํค๋ ํ๋๋ฅผ ์ ๋ฐ์ดํธํด์ผ ํฉ๋๋ค.
๊ทธ๋ ๊ฒ ํ ๋ ์บ์๋ ์ ๊ณต๋ ์๋ต์ ๊ฐ ํค๋ ํ๋๋ฅผ ์ ์ฅ๋ ์๋ต์ ์ถ๊ฐํ๊ณ , ์ด๋ฏธ ์กด์ฌํ๋ ํ๋ ๊ฐ์ ๋์ฒดํด์ผ ํฉ๋๋ค(MUST). ๋ค๋ง ๋ค์์ ์์ธ์ ๋๋ค:
- ์น์ 3.1(ํค๋ ๋ฐ ํธ๋ ์ผ๋ฌ ํ๋ ์ ์ฅ)์์ ์ ์ฅ์์ ์ ์ธ๋ ํค๋ ํ๋,
- ์บ์์ ์ ์ฅ๋ ์๋ต์ด ์์กดํ๋ ํค๋ ํ๋(์๋ ์ค๋ช ์ฐธ์กฐ),
- ์์ ์๊ฐ ์๋์ผ๋ก ์ฒ๋ฆฌํ๊ณ ์ ๊ฑฐํ๋ ํค๋ ํ๋(์๋ ์ค๋ช ์ฐธ์กฐ), ๋ฐ
- Content-Length ํค๋ ํ๋.
์ผ๋ถ ๊ฒฝ์ฐ(ํนํ ์ฌ์ฉ์ ์์ด์ ํธ์ ์บ์)์๋ ์์ ๋ ์๋ต์ ์ฒ๋ฆฌํ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๊ณ ์๋ต ์์ฒด๋ฅผ ์ ์ฅํ์ง ์์ผ๋ฉฐ, ์ด๋ฌํ ์ ์ฅ๋ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ์ ์ํฅ์ ๋ฏธ์น๋ ํค๋ ํ๋๋ฅผ ์ ๋ฐ์ดํธํ๋ฉด ์ผ๊ด์ฑ ๋ฌธ์ ์ ๋ณด์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ์ด๋ฌํ ์ํฉ์ ์บ์๋ ์์ธ์ ์ผ๋ก ์ด๋ฌํ ํค๋ ํ๋๋ฅผ ์ ์ฅ๋ ์๋ต์ ์ ๋ฐ์ดํธ์์ ์๋ตํ ์(MAY) ์์ง๋ง, ๊ทธ๋ฌํ ์๋ต์ ์ ์ฅ๋ ์๋ต์ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํ๋ ๋ฐ ํ์ํ ํ๋๋ก ์ ํํด์ผ ํฉ๋๋ค(SHOULD).
์๋ฅผ ๋ค์ด, ๋ธ๋ผ์ฐ์ ๋ ์๋ต์ ์์ ํ๋ ๋์ ์ฝํ ์ธ ์ธ์ฝ๋ฉ์ ๋์ฝ๋ํ์ฌ ์ ์ฅ๋ ๋ฐ์ดํฐ์ ์๋ต์ ์๋ ๋ฉํ๋ฐ์ดํฐ ์ฌ์ด์ ๋ถ์ผ์น๊ฐ ์๊ธธ ์ ์์ต๋๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ ์ ์ฅ๋ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์๋ก ๋ค๋ฅธ Content-Encoding ํค๋ ํ๋๋ก ์ ๋ฐ์ดํธํ๋ ๊ฒ์ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์์ต๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ต์์ ๋ฐ์ ์ฝํ ์ธ ๋์ ํ์ฑ๋ HTML ํธ๋ฆฌ๋ฅผ ์ ์ฅํ๋ ๊ฒฝ์ฐ, Content-Type ํค๋ ํ๋๋ฅผ ์ ๋ฐ์ดํธํ๋ ๊ฒ์ ํ์ฑ ์ ํ์์ ๋ํ ๊ฐ์ ์ด ๋ ์ด์ ์ ํจํ์ง ์๊ฒ ๋์ด ์๋ํ์ง ์์ ๊ฒ์ ๋๋ค.
๋์ฑ์ด ์ผ๋ถ ํ๋๋ Content-Range ํค๋ ํ๋์ ๊ฐ์ด HTTP ๊ตฌํ์ ์ํด ์๋์ผ๋ก ์ฒ๋ฆฌ๋๊ณ ์ ๊ฑฐ๋ฉ๋๋ค. ๊ตฌํ์ฒด๋ ๊ทธ๋ฌํ ํค๋ ํ๋๋ฅผ ์ค์ ๋ก ์ฒ๋ฆฌํ์ง ์๋๋ผ๋ ์ ๋ฐ์ดํธ์์ ์๋์ผ๋ก ์๋ตํ ์(MAY) ์์ต๋๋ค.
Content-* ์ ๋์ด๊ฐ ํค๋ ํ๋๊ฐ ์ ๋ฐ์ดํธ์์ ์๋ต๋๋ค๋ ์ ํธ๋ ์๋์ ์ ์ํ์ญ์์ค; ์ด๋ MIME ํค๋ ํ๋์ ๋ํ ๊ด๋ก์ผ ๋ฟ์ด๋ฉฐ HTTP ๊ณ ์ ์ ๊ฒ์ ์๋๋๋ค.
3.3. ๋ถ์์ ํ ์๋ต ์ ์ฅ
์์ฒญ ๋ฉ์๋๊ฐ GET์ด๊ณ ์๋ต ์ํ ์ฝ๋๊ฐ 200 (OK)์ด๋ฉฐ ์ ์ฒด ์๋ต ํค๋ ์น์ ์ ์์ ํ ๊ฒฝ์ฐ, ์บ์๋ ์๋ต์ด ์์ ํ์ง ์์ ์ํ๋ผ๋ ์ ์ฅํ ์ ์์ต๋๋ค(MAY)(์์ธํ ๋ด์ฉ์ ์น์ 6.1 of [HTTP]). ์ ์ฅ๋ ์๋ต์ ๋ถ์์ ํ ๊ฒ์ผ๋ก ๊ธฐ๋ก๋์ด์ผ ํฉ๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก 206 (Partial Content) ์๋ต์ ๋ถ์์ ํ 200 (OK) ์๋ต์ธ ๊ฒ์ฒ๋ผ ์ ์ฅ๋ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์บ์๋ Range ๋ฐ Content-Range ํค๋ ํ๋๋ฅผ ์ง์ํ์ง ์๊ฑฐ๋ ํด๋น ํ๋์์ ์ฌ์ฉ๋ ๋ฒ์ ๋จ์๋ฅผ ์ดํดํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ ๋ถ์์ ํ๊ฑฐ๋ ๋ถ๋ถ ์ฝํ ์ธ ์๋ต์ ์ ์ฅํด์๋ ์ ๋ฉ๋๋ค(MUST NOT).
์บ์๋ ์ดํ ๋ฒ์ ์์ฒญ(์น์ 14.2 of [HTTP])์ ๋ง๋ค์ด ์ ์ฅ๋ ๋ถ์์ ์๋ต์ ์์ฑํ๊ณ ์ฑ๊ณตํ ์๋ต์ ์ ์ฅ๋ ์๋ต๊ณผ ๊ฒฐํฉํ์ฌ ์์ฑํ ์ ์์ต๋๋ค(MAY), ์ด๋ ์น์ 3.4์ ์ ์๋์ด ์์ต๋๋ค. ์บ์๋ ์๋ต์ ์์ฑํ์ง ์์๊ฑฐ๋ ์์ฒญ์ด ๋ถ์์ ํ๊ณ ์ง์ ๋ ๋ฒ์๊ฐ ์ ์ฅ๋ ๋ถ์์ ์๋ต ๋ด์ ์์ ํ ํฌํจ๋์ง ์๋ ํ ๋ถ์์ ํ ์๋ต์ ์ฌ์ฉํ์ฌ ์์ฒญ์ ์๋ตํด์๋ ์ ๋ฉ๋๋ค(MUST NOT). ๋ํ ์บ์๋ ํด๋ผ์ด์ธํธ์ ๋ถ๋ถ ์๋ต์ ๋ณด๋ผ ๋ ๋ฐ๋์ 206 (Partial Content) ์ํ ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ช ์์ ์ผ๋ก ํ์ํด์ผ ํฉ๋๋ค(MUST NOT send a partial response to a client without explicitly marking it using the 206 status code).
3.4. ๋ถ๋ถ ์ฝํ ์ธ ๊ฒฐํฉ
์ฐ๊ฒฐ์ด ์กฐ๊ธฐ์ ์ข ๋ฃ๋์๊ฑฐ๋ ์์ฒญ์ด ํ๋ ์ด์์ Range ์ง์ ์๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ(์น์ 14.2 of [HTTP]), ์๋ต์ด ๋ถ๋ถ ํํ๋ง ์ ์กํ ์ ์์ต๋๋ค. ์ฌ๋ฌ ๋ฒ์ ์ด๋ฌํ ์ ์ก ํ์ ์บ์๋ ๋์ผํ ํํ์ ์ฌ๋ฌ ๋ฒ์๋ฅผ ์์ ํ์ ์ ์์ต๋๋ค. ์บ์๋ ์ด๋ฌํ ๋ฒ์๋ฅผ ๋จ์ผ ์ ์ฅ๋ ์๋ต์ผ๋ก ๊ฒฐํฉํ๊ณ ์ดํ ์์ฒญ์ ๋ง์กฑ์ํค๊ธฐ ์ํด ํด๋น ์๋ต์ ์ฌ์ฌ์ฉํ ์ ์์ต๋๋ค(MAY), ๋จ ๊ทธ ๋ชจ๋๊ฐ ๋์ผํ ๊ฐํ ๊ฒ์ฆ์(strong validator)๋ฅผ ๊ณต์ ํ๊ณ ์บ์๊ฐ ์น์ 15.3.7.3 of [HTTP]์ ๋ช ์๋ ํด๋ผ์ด์ธํธ ์๊ตฌ์ฌํญ์ ์ค์ํ๋ ๊ฒฝ์ฐ์ ํํฉ๋๋ค.
์ ์๋ต์ ํ๋ ์ด์์ ์ ์ฅ๋ ์๋ต๊ณผ ๊ฒฐํฉํ ๋, ์บ์๋ ์น์ 3.2์ ๋ฐ๋ผ ์ ์๋ต์ ์ ๊ณต๋ ํค๋ ํ๋๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฅ๋ ์๋ต์ ํค๋ ํ๋๋ฅผ ๋ฐ๋์ ์ ๋ฐ์ดํธํด์ผ ํฉ๋๋ค(MUST).
3.5. ์ธ์ฆ๋ ์์ฒญ์ ๋ํ ์๋ต ์ ์ฅ
๊ณต์ ์บ์๋ ์์ฒญ์ Authorization ํค๋ ํ๋๊ฐ ํฌํจ๋ ์์ฒญ์ ๋ํ ์บ์๋ ์๋ต์ ์ดํ์ ์ด๋ค ์์ฒญ์ ๋ง์กฑ์ํค๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค(MUST NOT), ๋จ ์๋ต์ ๊ณต์ ์บ์์ ์ํด ์ ์ฅ๋๋ ๊ฒ์ ๋ช ์์ ์ผ๋ก ํ์ฉํ๋ ์๋ต ์ง์์ด๋ฅผ ๊ฐ์ง Cache-Control ํ๋๊ฐ ํฌํจ๋์ด ์๊ณ , ์บ์๊ฐ ํด๋น ์๋ต์ ๋ํด ๊ทธ ์ง์์ด์ ์๊ตฌ์ฌํญ์ ์ค์ํ๋ ๊ฒฝ์ฐ๋ ์์ธ์ ๋๋ค.
์ด ๋ช ์ธ์์์ ๋ค์ ์๋ต ์ง์์ด๋ค์ ์ด๋ฌํ ํจ๊ณผ๋ฅผ ๊ฐ์ง๋๋ค: must-revalidate(์น์ 5.2.2.2), public(์น์ 5.2.2.9), ๋ฐ s-maxage(์น์ 5.2.2.10).
4. ์บ์์์ ์๋ต ๊ตฌ์ฑ
์์ฒญ์ด ์ ์๋์์ ๋, ์บ์๋ ๋ค์ ์กฐ๊ฑด์ ๋ง์กฑํ์ง ์๋ ํ ์ ์ฅ๋ ์๋ต์ ์ฌ์ฌ์ฉํด์๋ ์ ๋ฉ๋๋ค MUST NOT:
-
์ ์๋ ๋์ URI(์น์ 7.1 of [HTTP])์ ์ ์ฅ๋ ์๋ต์ ๋์์ด ์ผ์นํ๊ณ ,
-
์ ์ฅ๋ ์๋ต์ ์ฐ๊ฒฐ๋ ์์ฒญ ๋ฉ์๋๊ฐ ์ ์๋ ์์ฒญ์ ๋ํด ์ฌ์ฉ๋ ์ ์๋๋ก ํ์ฉํ๋ฉฐ,
-
์ ์ฅ๋ ์๋ต์ด ์ง๋ช ํ ์์ฒญ ํค๋ ํ๋(์๋ ๊ฒฝ์ฐ)๊ฐ ์ ์๋ ์์ฒญ์ ํ๋์ ์ผ์นํ๋ฉฐ(์์ธํ ๋ด์ฉ์ ์น์ 4.1 ์ฐธ์กฐ),
-
์ ์ฅ๋ ์๋ต์ no-cache ์ง์์ด(์น์ 5.2.2.4)๊ฐ ํฌํจ๋์ด ์์ง ์๊ฑฐ๋, ํฌํจ๋์ด ์๋ค๋ฉด ์ฑ๊ณต์ ์ผ๋ก ๊ฒ์ฆ๋ ๊ฒฝ์ฐ(์น์ 4.3),
-
์ ์ฅ๋ ์๋ต์ด ๋ค์ ์ค ํ๋์ฌ์ผ ํฉ๋๋ค:
- ์ ์ ํ ์๋ต(์์ธํ ๋ด์ฉ์ ์น์ 4.2 ์ฐธ์กฐ), ๋๋
- ๋ง๋ฃ๋ ์ํ๋ก ์ ๊ณต๋์ด๋ ํ์ฉ๋๋ ์๋ต(์์ธํ ๋ด์ฉ์ ์น์ 4.2.4 ์ฐธ์กฐ), ๋๋
- ์ฑ๊ณต์ ์ผ๋ก ๊ฒ์ฆ๋ ์๋ต(์์ธํ ๋ด์ฉ์ ์น์ 4.3 ์ฐธ์กฐ).
์บ์ ํ์ฅ์ด ๋์ด๋ ์๊ตฌ์ฌํญ์ ์ฌ์ ์ํ ์ ์๋ค๋ ์ ์ ์ ์ํ์ญ์์ค; ์์ธํ ๋ด์ฉ์ ์น์ 5.2.3๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
์ ์ฅ๋ ์๋ต์ด ๊ฒ์ฆ ์์ด ์์ฒญ์ ๋ง์กฑ์ํค๋ ๋ฐ ์ฌ์ฉ๋ ๋, ์บ์๋ ์๋ต์ ์ด๋ฏธ ์กด์ฌํ๋ ๊ฐ์ ๋์ฒดํ์ฌ ์ ์ฅ๋ ์๋ต์ current_age์ ๋์ผํ ๊ฐ์ผ๋ก Age ํค๋ ํ๋(์น์ 5.1)๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค(MUST); ์ฐ๋ น ๊ณ์ฐ์ ์น์ 4.2.3๋ฅผ ์ฐธ๊ณ ํ์ญ์์ค.
์บ์๋ ์์ ํ์ง ์์ ๋ฉ์๋(์น์ 9.2.1 of [HTTP])๋ฅผ ๊ฐ์ง ์์ฒญ์ ์์ ์๋ฒ์ ๊ทธ๋๋ก ์ ๋ฌํด์ผ ํฉ๋๋ค; ์ฆ, ์บ์๋ ํด๋น ์์ฒญ์ ์ ๋ฌํ๊ณ ๋์ ์๋ต์ ๋ฐ๊ธฐ ์ ์ ๊ทธ๋ฌํ ์์ฒญ์ ๋ํด ์๋ต์ ์์ฑํ ์ ์์ต๋๋ค(MUST).
๋ํ, ์์ ํ์ง ์์ ์์ฒญ์ ์ด๋ฏธ ์ ์ฅ๋ ์๋ต์ ๋ฌดํจํํ ์ ์๋ค๋ ์ ์ ์ ์ํ์ญ์์ค; ์์ธํ ๋ด์ฉ์ ์น์ 4.4๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
์บ์๋ ์ ์ฅ๋์๊ฑฐ๋ ์ ์ฅ ๊ฐ๋ฅํ ์๋ต์ ์ฌ๋ฌ ์์ฒญ์ ๋ง์กฑ์ํค๋ ๋ฐ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ํด๋น ์์ฒญ๋ค์ ๋ํด ์๋ต์ ์ฌ์ฌ์ฉํ๋ ๊ฒ์ด ํ์ฉ๋๋ ๊ฒฝ์ฐ์ ํํฉ๋๋ค. ์ด๋ ์บ์๊ฐ ์์ฒญ ๋ณํฉ(collapse requests)โ์บ์ ๋ฏธ์ค ์ ์ฌ๋ฌ ๋ค์ด์ค๋ ์์ฒญ์ ๋จ์ผ ์ ๋ฌ ์์ฒญ์ผ๋ก ๊ฒฐํฉโ๋ฅผ ์ํํ์ฌ ์์ ์๋ฒ์ ๋คํธ์ํฌ์ ๋ถํ๋ฅผ ์ค์ผ ์ ์๊ฒ ํฉ๋๋ค. ๋ค๋ง ์บ์๊ฐ ๋ฐํ๋ ์๋ต์ ์ผ๋ถ ๋๋ ๋ชจ๋ ๋ณํฉ๋ ์์ฒญ์ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ์ฐ์๋ ๊ทธ ์์ฒญ๋ค์ ๋ง์กฑ์ํค๊ธฐ ์ํด ์์ฒญ์ ์ ๋ฌํด์ผ ํ๋ฏ๋ก ์ถ๊ฐ ์ง์ฐ์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
ํ๋ ์ด์์ ์ ํฉํ ์๋ต์ด ์ ์ฅ๋์ด ์๋ ๊ฒฝ์ฐ, ์บ์๋ ๊ฐ์ฅ ์ต๊ทผ์ ์๋ต(Date ํค๋ ํ๋๋ก ๊ฒฐ์ )์ ์ฌ์ฉํด์ผ ํฉ๋๋ค(MUST). ๋ํ ์ด๋ค ์๋ต์ ์ฌ์ฉํ ์ง ๋ช ํํ ํ๊ธฐ ์ํด "Cache-Control: max-age=0" ๋๋ "Cache-Control: no-cache"์ ํจ๊ป ์์ฒญ์ ์ ๋ฌํ ์ ์์ต๋๋ค.
์๊ณ๋ฅผ ๊ฐ์ง ์์ ์บ์(์น์ 5.6.7 of [HTTP])๋ ์ ์ฅ๋ ์๋ต์ ์ฌ์ฉํ ๋๋ง๋ค ์ฌ๊ฒ์ฆํด์ผ ํฉ๋๋ค(MUST).
4.1. Vary ํค๋ ํ๋๋ก ์บ์ ํค ๊ณ์ฐ
์บ์๊ฐ ์ ์ฅ๋ ์๋ต์ผ๋ก ๋ง์กฑ์ํฌ ์ ์๋ ์์ฒญ์ ์์ ํ๊ณ ๊ทธ ์ ์ฅ๋ ์๋ต์ Vary ํค๋ ํ๋(์น์ 12.5.5 of [HTTP])๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ, ์บ์๋ ๊ทธ Vary ํ๋๊ฐ ์ง๋ช ํ ๋ชจ๋ ์ ์๋ ์์ฒญ ํค๋ ํ๋๊ฐ ์๋ ์์ฒญ(์ฆ, ์บ์๋ ์๋ต์ ์ ์ฅํ๊ฒ ํ ์์ฒญ)์ ํ๋์ ์ผ์นํ์ง ์์ผ๋ฉด ์ฌ๊ฒ์ฆ ์์ด ์ ์ฅ๋ ์๋ต์ ์ฌ์ฉํด์๋ ์ ๋ฉ๋๋ค(MUST NOT).
๋ ์์ฒญ์ ํค๋ ํ๋๊ฐ ์ผ์นํ๋ค๊ณ ์ ์๋๋ ์กฐ๊ฑด์ ๋ค์ ์ค ํ๋๋ฅผ ์ ์ฉํ์ฌ ์ฒซ ๋ฒ์งธ ์์ฒญ์ ํ๋๋ฅผ ๋ ๋ฒ์งธ ์์ฒญ์ ํ๋๋ก ๋ณํํ ์ ์์ ๋๋ฟ์ ๋๋ค:
- ํค๋ ํ๋ ๋ฌธ๋ฒ์ ํ์ฉ๋๋ ๊ฒฝ์ฐ ๊ณต๋ฐฑ์ ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ฑฐํ๋ ๊ฒ
- ๊ฐ์ ํ๋ ์ด๋ฆ์ ๊ฐ์ง ์ฌ๋ฌ ํค๋ ํ๋ ๋ผ์ธ์ ๊ฒฐํฉํ๋ ๊ฒ(์์ธํ ๋ด์ฉ์ ์น์ 5.2 of [HTTP] ์ฐธ์กฐ)
- ํค๋ ํ๋์ ๊ท๊ฒฉ์ ๋ฐ๋ผ ์๋ฏธ๊ฐ ๋์ผํ ๋ฐฉ์์ผ๋ก ๋ ํค๋ ํ๋ ๊ฐ์ ์ ๊ทํํ๋ ๊ฒ(์: ์์๊ฐ ์ค์ํ์ง ์์ ๊ฒฝ์ฐ ๊ฐ์ ์ฌ์ ๋ ฌ; ๊ฐ์ด ๋์๋ฌธ์ ๊ตฌ๋ถ์ด ์๋ ๊ฒฝ์ฐ์ ๋์๋ฌธ์ ์ ๊ทํ)
(์ ๊ทํ ํ) ์์ฒญ์์ ํค๋ ํ๋๊ฐ ์์ผ๋ฉด, ๊ทธ ํ๋๋ ๋ค๋ฅธ ์์ฒญ์์๋ ๋์ผํ๊ฒ ์์ ๋์๋ง ์ผ์นํ ์ ์์ต๋๋ค.
Vary ํค๋ ํ๋ ๊ฐ์ "*"๊ฐ ํฌํจ๋ ์ ์ฅ๋ ์๋ต์ ํญ์ ์ผ์นํ์ง ๋ชปํฉ๋๋ค.
์ฌ๋ฌ ์ ์ฅ๋ ์๋ต์ด ์ผ์นํ๋ ๊ฒฝ์ฐ, ์บ์๋ ํ๋๋ฅผ ์ ํํด์ผ ํฉ๋๋ค. ์ง๋ช ๋ ์์ฒญ ํค๋ ํ๋์ ์ฐ์ ์์๋ฅผ ๊ฒฐ์ ํ๋ ์๋ ค์ง ๋ฉ์ปค๋์ฆ(์: Accept ๋ฑ์ q๊ฐ)์ด ์๋ ๊ฒฝ์ฐ, ๊ทธ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ์ฌ ์ ํธ๋๋ ์๋ต์ ์ ํํ ์ ์์ต๋๋ค(MAY). ๊ทธ๋ฌํ ๋ฉ์ปค๋์ฆ์ด ์๊ฑฐ๋ ๋๋ฑํ ์ฐ์ ์์๋ฅผ ์ฃผ๋ ์๋ต๋ค์ด ์๋ ๊ฒฝ์ฐ์๋ ๊ฐ์ฅ ์ต๊ทผ์ ์๋ต(Date ํค๋ ํ๋๋ก ๊ฒฐ์ )์ด ์ ํ๋ฉ๋๋ค(์์ธํ ๋ด์ฉ์ ์น์ 4 ์ฐธ์กฐ).
์ผ๋ถ ์์์ ๊ธฐ๋ณธ ์๋ต(์ฆ ์์ฒญ์ด ์ ํธ๋๋ฅผ ํํํ์ง ์์ ๋ ์ ์ก๋๋ ๊ฒ)์์ Vary ํค๋ ํ๋๋ฅผ ๋๋ฝํ์ฌ, ์ดํ ๊ทธ ์์์ ๋ํ ์์ฒญ์ ๋ํด ๋ ์ ํธ๋๋ ์๋ต์ด ์์ด๋ ๊ธฐ๋ณธ ์๋ต์ ์ ํํ๊ฒ ๋ง๋๋ ์ค์๋ฅผ ๋ฒํฉ๋๋ค. ์บ์์ ๋์ URI์ ๋ํด ์ฌ๋ฌ ์ ์ฅ๋ ์๋ต์ด ์๊ณ ๊ทธ ์ค ํ๋ ์ด์์ด Vary ํค๋ ํ๋๋ฅผ ๋๋ฝํ ๊ฒฝ์ฐ, ์บ์๋ ์ ํจํ Vary ํ๋ ๊ฐ์ ๊ฐ์ง ์ ์ฅ๋ ์๋ต ์ค ๊ฐ์ฅ ์ต๊ทผ์ ๊ฒ์ ์ ํํ๋ ๊ฒ์ด ๋ฐ๋์งํฉ๋๋ค(SHOULD; ์น์ 4.2.3 ์ฐธ์กฐ).
์ ์ฅ๋ ์๋ต๊ณผ ์ผ์นํ๋ ๊ฒ์ด ์์ผ๋ฉด, ์บ์๋ ์ ์๋ ์์ฒญ์ ๋ง์กฑ์ํฌ ์ ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์์ฒญ์ ์์ ์๋ฒ๋ก ์ ๋ฌ๋๋ฉฐ, ์บ์๊ฐ ์ด๋ฏธ ์ ์ฅํ ์๋ต์ ์ค๋ช ํ๊ธฐ ์ํด ์ ์ ์กฐ๊ฑด์ด ์ถ๊ฐ๋ ์ ์์ต๋๋ค(์น์ 4.3).
4.2. ์ ์ ๋
์ ์ ํ(fresh) ์๋ต์ ๊ทธ ์ฐ๋ น์ด ์์ง ์ ์ ๋ ์๋ช ์ ์ด๊ณผํ์ง ์์ ์๋ต์ ๋๋ค. ๋ฐ๋๋ก ๋ง๋ฃ๋(stale) ์๋ต์ ๊ทธ ์ฐ๋ น์ด ์ ์ ๋ ์๋ช ์ ์ด๊ณผํ ๊ฒฝ์ฐ์ ๋๋ค.
์๋ต์ ์ ์ ๋ ์๋ช (freshness lifetime)์ ์์ ์๋ฒ์์ ์์ฑ๋ ์์ ๊ณผ ๋ง๋ฃ ์์ ์ฌ์ด์ ๊ธฐ๊ฐ์ ๋๋ค. ๋ช ์์ ๋ง๋ฃ ์๊ฐ(explicit expiration time)์ ์์ ์๋ฒ๊ฐ ์ ์ฅ๋ ์๋ต์ ๋ ์ด์์ ๊ฒ์ฆ ์์ด ์บ์๊ฐ ์ฌ์ฉํ์ง ๋ชปํ๋๋ก ์๋ํ ์๊ฐ์ธ ๋ฐ๋ฉด, ํด๋ฆฌ์คํฑ ๋ง๋ฃ ์๊ฐ(heuristic expiration time)์ ๋ช ์์ ๋ง๋ฃ ์๊ฐ์ด ์ ๊ณต๋์ง ์์ ๋ ์บ์๊ฐ ํ ๋นํ๋ ์๊ฐ์ ๋๋ค.
์๋ต์ ์ฐ๋ น(age)์ ์๋ต์ด ์์ ์๋ฒ์์ ์์ฑ๋์๊ฑฐ๋ ์ฑ๊ณต์ ์ผ๋ก ๊ฒ์ฆ๋ ์ดํ ๊ฒฝ๊ณผํ ์๊ฐ์ ๋๋ค.
์๋ต์ด ์ ์ ํ๋ฉด ์์ ์๋ฒ์ ์ ์ดํ์ง ์๊ณ ํ์ ์์ฒญ์ ๋ง์กฑ์ํค๋ ๋ฐ ์ฌ์ฉํ ์ ์์ด ํจ์จ์ฑ์ด ํฅ์๋ฉ๋๋ค.
์ ์ ๋๋ฅผ ๊ฒฐ์ ํ๋ ์ฃผ์ ๋ฉ์ปค๋์ฆ์ ์์ ์๋ฒ๊ฐ Expires ํค๋ ํ๋(์น์ 5.3) ๋๋ max-age ์๋ต ์ง์์ด(์น์ 5.2.2.1)๋ฅผ ์ฌ์ฉํ์ฌ ๋ฏธ๋์ ๋ช ์์ ๋ง๋ฃ ์๊ฐ์ ์ ๊ณตํ๋ ๊ฒ์ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์์ ์๋ฒ๋ ๋ง๋ฃ ์๊ฐ์ ๋๋ฌํ๊ธฐ ์ ์ ํํ์ด ์๋ฏธ์ ์ผ๋ก ํฌ๊ฒ ๋ณ๊ฒฝ๋ ๊ฐ๋ฅ์ฑ์ด ๋ฎ๋ค๊ณ ํ๋จํ์ฌ ์๋ต์ ๋ฏธ๋์ ๋ช ์์ ๋ง๋ฃ ์๊ฐ์ ํ ๋นํฉ๋๋ค.
์์ ์๋ฒ๊ฐ ์บ์๋ก ํ์ฌ๊ธ ๋ชจ๋ ์์ฒญ์ ๊ฒ์ฆํ๋๋ก ๊ฐ์ ํ๋ ค๋ ๊ฒฝ์ฐ, ๋ช ์์ ๋ง๋ฃ ์๊ฐ์ ๊ณผ๊ฑฐ๋ก ์ค์ ํ์ฌ ์๋ต์ด ์ด๋ฏธ ๋ง๋ฃ๋์์์ ๋ํ๋ผ ์ ์์ต๋๋ค. ๊ท๊ฒฉ์ ์ค์ํ๋ ์บ์๋ ์ผ๋ฐ์ ์ผ๋ก ๋ง๋ฃ๋ ์บ์ ์๋ต์ ์ฌ์ฌ์ฉํ๊ธฐ ์ ์ ๊ฒ์ฆํฉ๋๋ค(์์ธํ ๋ด์ฉ์ ์น์ 4.2.4 ์ฐธ์กฐ).
์์ ์๋ฒ๊ฐ ํญ์ ๋ช ์์ ๋ง๋ฃ ์๊ฐ์ ์ ๊ณตํ์ง ์๊ธฐ ๋๋ฌธ์, ์บ์๋ ํน์ ์ํฉ์์ ๋ง๋ฃ ์๊ฐ์ ๊ฒฐ์ ํ๊ธฐ ์ํด ํด๋ฆฌ์คํฑ์ ์ฌ์ฉํ ์ ์์ต๋๋ค(์์ธํ ๋ด์ฉ์ ์น์ 4.2.2 ์ฐธ์กฐ).
์๋ต์ด ์ ์ ํ์ง ์ฌ๋ถ๋ฅผ ํ๋จํ๋ ๊ณ์ฐ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
response_is_fresh = (freshness_lifetime > current_age)
freshness_lifetime์ ์น์ 4.2.1์ ์ ์๋์ด ์๊ณ ; current_age๋ ์น์ 4.2.3์ ์ ์๋์ด ์์ต๋๋ค.
ํด๋ผ์ด์ธํธ๋ ํด๋น ์๋ต์ ์ ์ ๋ ๊ณ์ฐ์ ๋ํ ์ ํ์ ์ ์ํ๊ธฐ ์ํด max-age ๋๋ min-fresh ์์ฒญ ์ง์์ด(์น์ 5.2.1)๋ฅผ ๋ณด๋ผ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์บ์๋ ์ด๋ฅผ ๋ฐ๋์ ์ค์ํ ํ์๋ ์์ต๋๋ค.
์ ์ ๋๋ฅผ ๊ณ์ฐํ ๋ ๋ ์ง ๊ตฌ๋ฌธ ๋ถ์์ ์ผ๋ฐ์ ์ธ ๋ฌธ์ ๋ฅผ ํผํ๊ธฐ ์ํด:
- ๋ชจ๋ ๋ ์ง ํ์์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ๋๋ก ์ง์ ๋์ด ์์ง๋ง, ์บ์ ์์ ์๋ ํ๋ ๊ฐ์ ๋์๋ฌธ์ ๊ตฌ๋ถ ์์ด ์ผ์น์์ผ์ผ ํฉ๋๋ค(SHOULD).
- ์บ์ ์์ ์์ ๋ด๋ถ ์๊ฐ ๊ตฌํ์ด HTTP-date ๊ฐ๋ณด๋ค ํด์๋๊ฐ ๋ฎ์ผ๋ฉด, ์์ ์๋ ํ์ฑ๋ Expires ๋ ์ง๋ฅผ ์์ ๋ ๊ฐ๋ณด๋ค ๊ฐ๊ฑฐ๋ ์ด์ ์ธ ๊ฐ์ฅ ๊ฐ๊น์ด ์๊ฐ์ผ๋ก ๋ด๋ถ์ ์ผ๋ก ํํํด์ผ ํฉ๋๋ค(MUST).
- ์บ์ ์์ ์๋ ์ง์ญ ์๊ฐ๋๋ฅผ ์ฐ๋ น์ด๋ ๋ง๋ฃ ์๊ฐ์ ๊ณ์ฐ ๋๋ ๋น๊ต์ ์ํฅ์ ๋ฏธ์น๊ฒ ํด์๋ ์ ๋ฉ๋๋ค(MUST NOT).
- ์บ์ ์์ ์๋ "GMT"๊ฐ ์๋ ๊ตฌ์ญ ์ฝ์ด(zone abbreviation)๋ฅผ ๊ฐ์ง ๋ ์ง๋ฅผ ๋ง๋ฃ ๊ณ์ฐ์ ์ฌ์ฉํ ์ ์๋ค๊ณ ๊ฐ์ฃผํ๋ ๊ฒ์ด ๋ฐ๋์งํฉ๋๋ค(SHOULD).
์ ์ ๋๋ ์บ์ ๋์์๋ง ์ ์ฉ๋๋ฉฐ, ์ฌ์ฉ์ ์์ด์ ํธ๊ฐ ํ์๋ฅผ ์๋ก๊ณ ์นจํ๊ฑฐ๋ ๋ฆฌ์์ค๋ฅผ ๋ค์ ๋ก๋ํ๋๋ก ๊ฐ์ ํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ค๋ ์ ์ ์ ์ํ์ญ์์ค. ์บ์์ ๊ธฐ๋ก(history) ๋ฉ์ปค๋์ฆ์ ์ฐจ์ด์ ๋ํด์๋ ์น์ 6์ ์ฐธ์กฐํ์ญ์์ค.
4.2.1. ์ ์ ๋ ์๋ช ๊ณ์ฐ
์บ์๋ ๋ค์ ๊ท์น๋ค์ ํ๊ฐํ์ฌ ์๋ต์ ์ ์ ๋ ์๋ช (freshness_lifetime)์ ๊ณ์ฐํ ์ ์์ผ๋ฉฐ, ์ฒซ ๋ฒ์งธ๋ก ์ผ์นํ๋ ๊ท์น์ ์ฌ์ฉํฉ๋๋ค:
- ์บ์๊ฐ ๊ณต์ ์บ์์ด๊ณ s-maxage ์๋ต ์ง์์ด(์น์ 5.2.2.10)๊ฐ ์์ผ๋ฉด ๊ทธ ๊ฐ์ ์ฌ์ฉํ๊ฑฐ๋,
- max-age ์๋ต ์ง์์ด(์น์ 5.2.2.1)๊ฐ ์์ผ๋ฉด ๊ทธ ๊ฐ์ ์ฌ์ฉํ๊ฑฐ๋,
- Expires ์๋ต ํค๋ ํ๋(์น์ 5.3)๊ฐ ์์ผ๋ฉด ๊ทธ ๊ฐ์์ Date ์๋ต ํค๋ ํ๋์ ๊ฐ์ ๋บ ๊ฐ์ ์ฌ์ฉํฉ๋๋ค(๋ง์ฝ Date ํ๋๊ฐ ์์ผ๋ฉด ๋ฉ์์ง๋ฅผ ์์ ํ ์๊ฐ์ ์ฌ์ฉ; ์น์ 6.6.1 ์ฐธ์กฐ), ๋๋
- ๊ทธ๋ ์ง ์์ผ๋ฉด ์๋ต์ ๋ช ์์ ๋ง๋ฃ ์๊ฐ์ด ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ํด๋ฆฌ์คํฑ ์ ์ ๋ ์๋ช ์ด ์ ์ฉ๋ ์ ์์ต๋๋ค; ์์ธํ ๋ด์ฉ์ ์น์ 4.2.2 ์ฐธ์กฐ.
์ด ๊ณ์ฐ์ ๊ฐ๋ฅํ ๊ฒฝ์ฐ ์์ ์๋ฒ๊ฐ ์ ๊ณตํ ์๊ณ ์ ๋ณด๋ฅผ ์ฌ์ฉํ์ฌ ์๊ณ ์ฐจ์ด๋ฅผ ์ค์ด๋๋ก ์ค๊ณ๋์๋ค๋ ์ ์ ์ ์ํ์ญ์์ค.
์ฃผ์ด์ง ์ง์์ด์ ๋ํด ์ฌ๋ฌ ๊ฐ์ด ์กด์ฌํ๋ ๊ฒฝ์ฐ(์: ๋ ๊ฐ์ Expires ํค๋ ํ๋ ๋ผ์ธ ๋๋ ์ฌ๋ฌ Cache-Control: max-age ์ง์์ด), ์ฒซ ๋ฒ์งธ ํญ๋ชฉ์ ์ฌ์ฉํ๊ฑฐ๋ ์๋ต์ ๋ง๋ฃ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผํด์ผ ํฉ๋๋ค. ์ง์์ด๊ฐ ์์ถฉํ๋ ๊ฒฝ์ฐ(์: max-age์ no-cache๊ฐ ๋ชจ๋ ์๋ ๊ฒฝ์ฐ)์๋ ๊ฐ์ฅ ์ ํ์ ์ธ ์ง์์ด๋ฅผ ์ค์ํด์ผ ํฉ๋๋ค. ์บ์๋ ์๋ชป๋ ์ ์ ๋ ์ ๋ณด๋ฅผ ๊ฐ์ง ์๋ต(์: ์ ์๊ฐ ์๋ ๋ด์ฉ์ ๊ฐ์ง max-age ์ง์์ด)์ ๋ง๋ฃ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ๋๋ก ๊ถ์ฅ๋ฉ๋๋ค.
4.2.2. ํด๋ฆฌ์คํฑ ์ ์ ๋ ๊ณ์ฐ
์์ ์๋ฒ๊ฐ ํญ์ ๋ช ์์ ๋ง๋ฃ ์๊ฐ์ ์ ๊ณตํ์ง ์๊ธฐ ๋๋ฌธ์, ์บ์๋ ๋ช ์์ ์๊ฐ์ด ์ง์ ๋์ง ์์ ๊ฒฝ์ฐ ํด๋ฆฌ์คํฑ ๋ง๋ฃ ์๊ฐ์ ํ ๋นํ ์ ์์ต๋๋ค(MAY). ์ด๋ Last-Modified ์๊ฐ๊ณผ ๊ฐ์ ๋ค๋ฅธ ํ๋ ๊ฐ์ ์ฌ์ฉํ์ฌ ๊ทธ๋ด๋ฏํ ๋ง๋ฃ ์๊ฐ์ ์ถ์ ํ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด ๋ช ์ธ์๋ ํน์ ์๊ณ ๋ฆฌ์ฆ์ ์ ๊ณตํ์ง ์์ง๋ง, ๊ทธ ๊ฒฐ๊ณผ์ ๋ํ ์ต์ ์ ๊ฒฝ์ฐ ์ ์ฝ์ ๋ถ๊ณผํฉ๋๋ค.
์ ์ฅ๋ ์๋ต์ ๋ช ์์ ๋ง๋ฃ ์๊ฐ์ด ์กด์ฌํ๋ ๊ฒฝ์ฐ ์บ์๋ ํด๋ฆฌ์คํฑ์ ์ฌ์ฉํ์ฌ ์ ์ ๋๋ฅผ ๊ฒฐ์ ํด์๋ ์ ๋ฉ๋๋ค(MUST NOT). ์น์ 3์ ์๊ตฌ์ฌํญ ๋๋ฌธ์, ํด๋ฆฌ์คํฑ์ ๋ช ์์ ์ ์ ๋๊ฐ ์๋ ์๋ต์๋ง ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ๊ทธ ์ํ ์ฝ๋๊ฐ ํด๋ฆฌ์คํฑ์ผ๋ก ์บ์ ๊ฐ๋ฅ(heuristically cacheable)์ผ๋ก ์ ์๋ ๊ฒฝ์ฐ(์: ์น์ 15.1 ์ฐธ์กฐ)๋ ๋ช ์์ ์ผ๋ก ์บ์ ๊ฐ๋ฅํ๋ค๊ณ ํ์๋(์: public ์๋ต ์ง์์ด) ์๋ต์๋ง ์ ์ฉํ ์ ์์ต๋๋ค.
์ด์ ๊ท๊ฒฉ์์๋ ํด๋ฆฌ์คํฑ์ผ๋ก ์บ์ ๊ฐ๋ฅํ ์๋ต ์ํ ์ฝ๋๋ฅผ "๊ธฐ๋ณธ์ ์ผ๋ก ์บ์ ๊ฐ๋ฅ(cacheable by default)"์ด๋ผ๊ณ ๋ถ๋ ์์ ์ ์ํ์ญ์์ค.
์๋ต์ Last-Modified ํค๋ ํ๋๊ฐ ์์ผ๋ฉด(์น์ 8.8.2 ์ฐธ์กฐ), ์บ์๋ ๊ทธ ์๊ฐ ์ดํ์ ๊ฐ๊ฒฉ์ ์ผ๋ถ ๋น์จ์ ์ด๊ณผํ์ง ์๋ ํด๋ฆฌ์คํฑ ๋ง๋ฃ ๊ฐ์ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค. ์ด ๋น์จ์ ์ผ๋ฐ์ ์ธ ์ค์ ๊ฐ์ 10%์ผ ์ ์์ต๋๋ค.
4.2.3. ์ฐ๋ น ๊ณ์ฐ
Age ํค๋ ํ๋๋ ์บ์์์ ์ป์ ์๋ต ๋ฉ์์ง์ ์ถ์ ์ฐ๋ น์ ์ ๋ฌํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. Age ํ๋ ๊ฐ์ ์์ ์๋ฒ๊ฐ ์๋ต์ ์์ฑํ๊ฑฐ๋ ๊ฒ์ฆํ ์ดํ ๊ฒฝ๊ณผํ ์ด ์์ ๋ํ ์บ์์ ์ถ์ ์น์ ๋๋ค. ๋ฐ๋ผ์ Age ๊ฐ์ ์์ ์๋ฒ์์ ์๋ต์ด ์์๋ ์ดํ ๊ฒฝ๋ก์์ ๊ฐ ์บ์์ ๋จธ๋ฌธ ์๊ฐ์ ํฉ๊ณผ ๋คํธ์ํฌ ๊ฒฝ๋ก๋ฅผ ํตํ ์ ์ก ์๊ฐ์ ํฉ์ ๋๋ค.
์ฐ๋ น ๊ณ์ฐ์ ๋ค์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค:
- age_value
- "age_value"๋ผ๋ ์ฉ์ด๋ Age ํค๋ ํ๋(์น์ 5.1)์ ๊ฐ์ ์ฐ์ ์ฐ์ฐ์ ์ ํฉํ ํํ๋ก ๋ํ๋ด๋ฉฐ, ์ฌ์ฉ ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ 0์ ์๋ฏธํฉ๋๋ค.
- date_value
- "date_value"๋ผ๋ ์ฉ์ด๋ Date ํค๋ ํ๋์ ๊ฐ์ ์ฐ์ ์ฐ์ฐ์ ์ ํฉํ ํํ๋ก ๋ํ๋ ๋๋ค. Date ํค๋ ํ๋์ ์ ์ ๋ฐ ๊ทธ๊ฒ์ด ์๋ ์๋ต์ ๊ดํ ์๊ตฌ์ฌํญ์ ์น์ 6.6.1 of [HTTP]๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
- now
- "now"๋ผ๋ ์ฉ์ด๋ ์ด ๊ตฌํ์ ์๊ณ์ ํ์ฌ ๊ฐ์ ์๋ฏธํฉ๋๋ค(์น์ 5.6.7 of [HTTP]).
- request_time
- ์ ์ฅ๋ ์๋ต์ ์ด๋ํ ์์ฒญ ์์ ์ ์๊ณ ๊ฐ์ ๋๋ค.
- response_time
- ์๋ต์ด ์์ ๋ ์์ ์ ์๊ณ ๊ฐ์ ๋๋ค.
์๋ต์ ์ฐ๋ น์ ์์ ํ ๋ ๋ฆฝ์ ์ธ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ๊ณ์ฐํ ์ ์์ต๋๋ค:
- "apparent_age": ๊ตฌํ์ฒด์ ์๊ณ๊ฐ ์์ ์๋ฒ์ ์๊ณ์ ํฉ๋ฆฌ์ ์ผ๋ก ๋๊ธฐํ๋์ด ์๋ ๊ฒฝ์ฐ, response_time์์ date_value๋ฅผ ๋บ ๊ฐ์ ๋๋ค. ๊ฒฐ๊ณผ๊ฐ ์์์ด๋ฉด 0์ผ๋ก ๊ต์ฒดํฉ๋๋ค.
- ์๋ต ๊ฒฝ๋ก์์ ๋ชจ๋ ์บ์๊ฐ HTTP/1.1 ์ด์์ ๊ตฌํํ๋ ๊ฒฝ์ฐ์ "corrected_age_value". ์บ์๋ ์ด ๊ฐ์ ์๋ต์ด ์์ ๋ ์๊ฐ์ด ์๋๋ผ ์์ฒญ์ด ์์๋ ์๊ฐ ๊ธฐ์ค์ผ๋ก ํด์ํด์ผ ํฉ๋๋ค(MUST).
apparent_age = max(0, response_time - date_value); response_delay = response_time - request_time; corrected_age_value = age_value + response_delay;
corrected_age_value๋ corrected_initial_age๋ก ์ฌ์ฉ๋ ์ ์์ต๋๋ค(MAY). ์ค๋๋ ์บ์ ๊ตฌํ๋ค ์ค ์ผ๋ถ๊ฐ Age๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ฝ์ ํ์ง ์์ ์ ์๋ ๊ฒฝ์ฐ, corrected_initial_age๋ ๋ณด๋ค ๋ณด์์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ด ๊ณ์ฐ๋ ์ ์์ต๋๋ค:
corrected_initial_age = max(apparent_age, corrected_age_value);
์ ์ฅ๋ ์๋ต์ current_age๋ ์์ ์๋ฒ์ ์ํด ๋ง์ง๋ง์ผ๋ก ๊ฒ์ฆ๋ ์ดํ ๊ฒฝ๊ณผํ ์๊ฐ(์ด)์ corrected_initial_age์ ๋ํ์ฌ ๊ณ์ฐํ ์ ์์ต๋๋ค.
resident_time = now - response_time; current_age = corrected_initial_age + resident_time;
4.2.4. ๋ง๋ฃ๋ ์๋ต ์ ๊ณต
"๋ง๋ฃ๋(stale)" ์๋ต์ ๋ช ์์ ๋ง๋ฃ ์ ๋ณด๊ฐ ์๊ฑฐ๋ ํด๋ฆฌ์คํฑ ๋ง๋ฃ๊ฐ ๊ณ์ฐ๋ ์ ์์ง๋ง ์น์ 4.2์ ๊ณ์ฐ์ ๋ฐ๋ผ ์ ์ ํ์ง ์์ ์๋ต์ ๋๋ค.
์บ์๋ ํ๋กํ ์ฝ ๋ด์ ๋ช ์์ ์ง์์ด(์: no-cache ์๋ต ์ง์์ด, must-revalidate ์๋ต ์ง์์ด, ๋๋ ์ ์ฉ ๊ฐ๋ฅํ s-maxage ๋๋ proxy-revalidate ์๋ต ์ง์์ด; ์น์ 5.2.2 ์ฐธ์กฐ)์ ์ํด ๊ธ์ง๋๋ ๊ฒฝ์ฐ ๋ง๋ฃ๋ ์๋ต์ ์์ฑํด์๋ ์ ๋ฉ๋๋ค(MUST NOT).
์บ์๋ ์ฐ๊ฒฐ์ด ๋๊ฒผ๊ฑฐ๋ ํด๋ผ์ด์ธํธ ๋๋ ์์ ์๋ฒ๊ฐ ๋ช ์์ ์ผ๋ก ํ์ฉํ ๊ฒฝ์ฐ(์: ์น์ 5.2.1์ max-stale ์์ฒญ ์ง์์ด, RFC5861์ ๊ฐ์ ํ์ฅ ์ง์์ด, ๋๋ ๋์ญ ์ธ ๊ณ์ฝ์ ๋ฐ๋ฅธ ๊ตฌ์ฑ)๋ง ๋ง๋ฃ๋ ์๋ต์ ์์ฑํ ์ ์์ต๋๋ค(MUST NOT).
4.3. ๊ฒ์ฆ
์บ์๊ฐ ์์ฒญ๋ URI์ ๋ํด ํ๋ ์ด์์ ์ ์ฅ๋ ์๋ต์ ๊ฐ์ง๊ณ ์์ผ๋ ๊ทธ ์ด๋ค ๊ฒ๋ ์ ๊ณตํ ์ ์๋ ๊ฒฝ์ฐ(์: ์ ์ ํ์ง ์๊ฑฐ๋ ์ ํํ ์ ์์; ์น์ 4.1 ์ฐธ์กฐ), ์บ์๋ ์ ๋ฌ๋๋ ์์ฒญ์์ ์กฐ๊ฑด๋ถ ์์ฒญ ๋ฉ์ปค๋์ฆ(์น์ 13 of [HTTP])์ ์ฌ์ฉํ์ฌ ๋ค์ ์์ ์๋ฒ๊ฐ ์ ์ฅ๋ ์๋ต ์ค ์ ํจํ ๊ฒ์ ์ ํํ์ฌ ์ฌ์ฉํ๊ฑฐ๋, ์ ์ฅ๋ ์๋ต์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๊ฐฑ์ ํ๊ฑฐ๋, ์ ์ฅ๋ ์๋ต์ ์ ์๋ต์ผ๋ก ๊ต์ฒดํ ๊ธฐํ๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค. ์ด ๊ณผ์ ์ ์ ์ฅ๋ ์๋ต์ ๊ฒ์ฆ(validating) ๋๋ ์ฌ๊ฒ์ฆ(revalidating)์ด๋ผ๊ณ ํฉ๋๋ค.
4.3.1. ๊ฒ์ฆ ์์ฒญ ์ ์ก
๊ฒ์ฆ์ ์ํ ์กฐ๊ฑด๋ถ ์์ฒญ์ ์์ฑํ ๋, ์บ์๋ ๋ง์กฑ์ํค๋ ค๋ ์์ฒญ์ผ๋ก ์์ํ๊ฑฐ๋ โ ๋ ๋ฆฝ์ ์ผ๋ก ์์ฒญ์ ์์ํ๋ ๊ฒฝ์ฐ โ ์ ์ฅ๋ ์๋ต์ ์ฌ์ฉํ์ฌ ๋ฉ์๋, ๋์ URI ๋ฐ Vary ํค๋ ํ๋(์น์ 4.1)์ ์ํด ์๋ณ๋ ์์ฒญ ํค๋ ํ๋๋ฅผ ๋ณต์ฌํ์ฌ ์์ฒญ์ ํฉ์ฑํฉ๋๋ค.
๊ทธ๋ฐ ๋ค์ ์บ์๋ ํ๋ ์ด์์ ์ ์ ์กฐ๊ฑด ํค๋ ํ๋๋ก ํด๋น ์์ฒญ์ ์ ๋ฐ์ดํธํฉ๋๋ค. ์ด๋ฌํ ํ๋๋ ๋์ผํ URI๋ฅผ ๊ฐ์ง ์ ์ฅ๋ ์๋ต์ผ๋ก๋ถํฐ ๊ฐ์ ธ์จ ๊ฒ์ฆ์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ํฌํจํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ด๋ ๋์ผํ ์บ์ ํค๋ฅผ ๊ฐ์ง ์ ์ฅ๋ ์๋ต๋ง ํฌํจํ์ง๋ง, ์บ์๋ ์ ์กํ๋ ์์ฒญ ํค๋ ํ๋๋ก ์ ํํ ์ ์๋ ์๋ต์ ๊ฒ์ฆํ ์๋ ์์ต๋๋ค(์์ธํ ๋ด์ฉ์ ์น์ 4.1 ์ฐธ์กฐ).
๊ทธ ํ ์์ ์๋ ์ ์ ์กฐ๊ฑด ํค๋ ํ๋๋ฅผ ๋น๊ตํ์ฌ ์ ์ฅ๋ ์ด๋ค ์๋ต์ด ์์์ ํ์ฌ ํํ๊ณผ ๋๋ฑํ์ง๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.
๊ฒ์ฆ์ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ฆ์ ์ค ํ๋๋ Last-Modified ํค๋ ํ๋์ ์ ๊ณต๋ ํ์์คํฌํ์ด๋ฉฐ, ์ด๋ ์๋ต ๊ฒ์ฆ์ ์ํด If-Modified-Since ํค๋ ํ๋์์ ์ฌ์ฉ๋๊ฑฐ๋, ํํ ์ ํ์ ์ํด If-Unmodified-Since ๋๋ If-Range์์ ์ฌ์ฉ๋ ์ ์์ต๋๋ค(์ฆ, ํด๋ผ์ด์ธํธ๊ฐ ํด๋น ํ์์คํฌํ๋ฅผ ๊ฐ์ง ์ด์ ์ ์ป์ ํํ์ ๊ตฌ์ฒด์ ์ผ๋ก ์ฐธ์กฐํ๋ ๊ฒฝ์ฐ).
๋ ๋ค๋ฅธ ๊ฒ์ฆ์๋ ETag ํ๋์ ์ฃผ์ด์ง ์ํฐํฐ ํ๊ทธ์ด๋ฉฐ, ํ๋ ์ด์์ ์ํฐํฐ ํ๊ทธ(์ ์ฅ๋ ์๋ต์ ๋ํ๋ด๋)๋ฅผ If-None-Match ํค๋ ํ๋์์ ์๋ต ๊ฒ์ฆ์ ์ํด ์ฌ์ฉํ๊ฑฐ๋, ํํ ์ ํ์ ์ํด If-Match ๋๋ If-Range์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๊ฒ์ฆ์ ์ํ ์กฐ๊ฑด๋ถ ์์ฒญ์ ์์ฑํ ๋, ์บ์๋ ๋ค์์ ์ํํด์ผ ํฉ๋๋ค:
- MUST ์ ์ฅ๋ ์๋ต๋ค์ ์ ๊ณต๋ ์ํฐํฐ ํ๊ทธ๊ฐ ์๋ค๋ฉด ๊ด๋ จ ์ํฐํฐ ํ๊ทธ๋ฅผ ์ ์กํด์ผ ํฉ๋๋ค(If-Match, If-None-Match, ๋๋ If-Range ์ฌ์ฉ).
- SHOULD ์์ฒญ์ด ์๋ธ๋ฒ์(subrange)๊ฐ ์๋๊ณ ๋จ์ผ ์ ์ฅ๋ ์๋ต์ ๊ฒ์ฆํ๋ฉฐ ๊ทธ ์๋ต์ Last-Modified ๊ฐ์ด ํฌํจ๋์ด ์๋ ๊ฒฝ์ฐ, If-Modified-Since๋ฅผ ์ฌ์ฉํ์ฌ Last-Modified ๊ฐ์ ์ ์กํด์ผ ํฉ๋๋ค.
- MAY ์์ฒญ์ด ์๋ธ๋ฒ์์ด๊ณ ๋จ์ผ ์ ์ฅ๋ ์๋ต์ ๊ฒ์ฆํ๋ฉฐ ๊ทธ ์๋ต์ ์ํฐํฐ ํ๊ทธ๊ฐ ์๊ณ Last-Modified ๊ฐ๋ง ์๋ ๊ฒฝ์ฐ์๋ If-Unmodified-Since ๋๋ If-Range๋ฅผ ์ฌ์ฉํ์ฌ Last-Modified ๊ฐ์ ์ ์กํ ์ ์์ต๋๋ค.
๋๋ถ๋ถ์ ๊ฒฝ์ฐ, ์ํฐํฐ ํ๊ทธ๊ฐ ๋ช ๋ฐฑํ ์ฐ์ํ ๊ฒฝ์ฐ์๋ ์ค๋๋ ์ค๊ฐ์๊ฐ ์ํฐํฐ ํ๊ทธ ์ ์ ์กฐ๊ฑด์ ์ดํดํ์ง ๋ชปํ ์ ์์ผ๋ฏ๋ก ํธํ์ฑ์ ์ํด ๋ ๊ฒ์ฆ์ ๋ชจ๋๊ฐ ์บ์ ๊ฒ์ฆ ์์ฒญ์์ ์์ฑ๋ฉ๋๋ค.
4.3.2. ์์ ๋ ๊ฒ์ฆ ์์ฒญ ์ฒ๋ฆฌ
์์ฒญ ์ฒด์ธ์ ๊ฐ ํด๋ผ์ด์ธํธ๋ ์์ฒด ์บ์๋ฅผ ๊ฐ์ง ์ ์์ผ๋ฏ๋ก, ์ค๊ฐ์์ ์๋ ์บ์๊ฐ ๋ค๋ฅธ(์ธ๋ถ) ์บ์๋ก๋ถํฐ ์กฐ๊ฑด๋ถ ์์ฒญ์ ์์ ํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ ๋๋ค. ๋ํ ์ผ๋ถ ์ฌ์ฉ์ ์์ด์ ํธ๋ ์ต๊ทผ์ ์์ ๋ ํํ์ผ๋ก์ ๋ฐ์ดํฐ ์ ์ก์ ์ ํํ๊ฑฐ๋ ๋ถ๋ถ์ ์ผ๋ก ๊ฒ์๋ ํํ์ ์ ์ก์ ์๋ฃํ๊ธฐ ์ํด ์กฐ๊ฑด๋ถ ์์ฒญ์ ์ฌ์ฉํฉ๋๋ค.
์บ์๊ฐ 200 (OK) ๋๋ 206 (Partial Content) ์ ์ฅ๋ ์๋ต์ ์ฌ์ฌ์ฉํ์ฌ ๋ง์กฑ์ํฌ ์ ์๋ ์์ฒญ์ ์์ ํ ๊ฒฝ์ฐ(์น์ 4 ์ฐธ์กฐ), ์บ์๋ ํด๋น ์์ฒญ์์ ์์ ๋ ์ ์ฉ ๊ฐ๋ฅํ ์กฐ๊ฑด๋ถ ํค๋ ์ ์ ์กฐ๊ฑด์ ์ ์ฅ๋ ์๋ต์ ํฌํจ๋ ๋์ ๊ฒ์ฆ์์ ๋ํด ํ๊ฐํด์ผ ํฉ๋๋ค(SHOULD).
์บ์๋ ์ค์ง ์์ ์๋ฒ์๋ง ์ ์ฉ๋๋ ์กฐ๊ฑด๋ถ ํค๋ ํ๋, ์บ์๋ก๋ ๋ง์กฑํ ์ ์๋ ์๋ฏธ๋ฅผ ๊ฐ์ง ์์ฒญ์ ์ ์ ์กฐ๊ฑด, ๋๋ ์ ์ฅ๋ ์๋ต์ด ์๋ ๋์ ์์์ ํฌํจ๋ ์ ์ ์กฐ๊ฑด์ ํ๊ฐํด์๋ ์ ๋ฉ๋๋ค(MUST NOT); ์ด๋ฌํ ์ ์ ์กฐ๊ฑด์ ๋ค๋ฅธ(์์ ์ธก) ์๋ฒ๋ฅผ ์๋ํ ๊ฒ์ผ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
์บ์์ ์ํ ์กฐ๊ฑด๋ถ ์์ฒญ์ ์ ์ ํ ํ๊ฐ๋ ์์ ๋ ์ ์ ์กฐ๊ฑด ํค๋ ํ๋์ ๊ทธ ์ฐ์ ์์์ ๋ฌ๋ ค ์์ต๋๋ค. ์์ฝํ๋ฉด, If-Match ๋ฐ If-Unmodified-Since ์ ์ ์กฐ๊ฑด์ ์บ์์ ์ ์ฉ๋์ง ์์ผ๋ฉฐ, If-None-Match์ If-Modified-Since๋ณด๋ค ์ฐ์ ํฉ๋๋ค. ์ ์ ์กฐ๊ฑด ์ฐ์ ์์์ ์ ์ฒด ๊ท๊ฒฉ์ ์น์ 13.2.2 of [HTTP]๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
If-None-Match ํค๋ ํ๋๋ฅผ ํฌํจํ๋ ์์ฒญ์(If-None-Match), ํด๋ผ์ด์ธํธ๊ฐ ์์ ์ ์ ์ฅ๋ ์๋ต๋ค ์ค ํ๋ ์ด์์ ์บ์๊ฐ ์ ํํ ์ ์ฅ๋ ์๋ต๊ณผ ๋น๊ตํ์ฌ ๊ฒ์ฆํ๊ธฐ๋ฅผ ์ํจ์ ๋ํ๋ ๋๋ค(์์ธํ ๋ด์ฉ์ ์น์ 4 ์ฐธ์กฐ).
If-None-Match ํค๋๊ฐ ์๊ณ If-Modified-Since ํค๋๋ฅผ ํฌํจํ๋ ์์ฒญ์(If-Modified-Since), ํด๋ผ์ด์ธํธ๊ฐ ์์ ์ ์ ์ฅ๋ ์๋ต๋ค์ ์์ ์ผ๋ก ๊ฒ์ฆํ๊ธฐ๋ฅผ ์ํจ์ ๋ํ๋ ๋๋ค.
์์ฒญ์ If-Modified-Since๊ฐ ํฌํจ๋์ด ์๊ณ ์ ์ฅ๋ ์๋ต์ Last-Modified ํค๋๊ฐ ์๋ ๊ฒฝ์ฐ, ์บ์๋ ์กฐ๊ฑด ํ๊ฐ๋ฅผ ์ํด ์ ์ฅ๋ ์๋ต์ Date ํ๋ ๊ฐ(๋๋ Date ํ๋๊ฐ ์์ผ๋ฉด ์ ์ฅ๋ ์๋ต์ ์์ ํ ์๊ฐ)์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ฐ๋์งํฉ๋๋ค(SHOULD).
๋ฒ์ ์์ฒญ์ ๋ํ ๋ถ๋ถ ์๋ต์ ๊ตฌํํ๋ ์บ์๋(์น์ 14.2 ์ฐธ์กฐ) If-Range ํค๋ ํ๋(์น์ 13.1.5)๋ฅผ ์บ์๊ฐ ์ ํํ ์๋ต์ ๋ํด ํ๊ฐํด์ผ ํฉ๋๋ค.
If-None-Match ์ํฐํฐ ํ๊ทธ ๋ชฉ๋ก์ ํฌํจํ๋ ์์ฒญ์ ์ฌ๊ฒ์ฆํ๊ธฐ ์ํด ์์ฒญ์ ์ ๋ฌํ๊ธฐ๋ก ๊ฒฐ์ ํ ์บ์๋(If-None-Match), ์์ ๋ ๋ชฉ๋ก์ ์์ ์ ์ ์ฅ๋ ์๋ต์ (์ ์ ํ๊ฑฐ๋ ๋ง๋ฃ๋)์์์ ์ํฐํฐ ํ๊ทธ ๋ชฉ๋ก๊ณผ ๊ฒฐํฉํ์ฌ ์ ๋ฌ ์์ฒญ์ If-None-Match ํค๋ ํ๋ ๊ฐ์ผ๋ก ๋ ๋ชฉ๋ก์ ํฉ์งํฉ์ ๋ณด๋ผ ์ ์์ต๋๋ค(MAY). ์ ์ฅ๋ ์๋ต์ด ๋ถ๋ถ ์ฝํ ์ธ ๋ง ํฌํจํ๋ ๊ฒฝ์ฐ, ๊ทธ ์ ์ฅ๋ ์๋ต์ด ์์ฒญ๋ ๋ฒ์๋ฅผ ์์ ํ ๋ง์กฑ์ํค๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ฉด ๊ทธ ์ํฐํฐ ํ๊ทธ๋ฅผ ํฉ์งํฉ์ ํฌํจํด์๋ ์ ๋ฉ๋๋ค(MUST NOT). ์ ๋ฌ๋ ์์ฒญ์ ๋ํ ์๋ต์ด 304 (Not Modified)์ด๊ณ ETag ํ๋ ๊ฐ์ ํด๋ผ์ด์ธํธ ๋ชฉ๋ก์ ์๋ ์ํฐํฐ ํ๊ทธ๊ฐ ํฌํจ๋์ด ์์ผ๋ฉด, ์บ์๋ 304 ์๋ต ๋ฉํ๋ฐ์ดํฐ๋ก ์ ๋ฐ์ดํธ๋ ํด๋น ์ ์ฅ๋ ์๋ต์ ์ฌ์ฌ์ฉํ์ฌ ํด๋ผ์ด์ธํธ์๊ฒ 200 (OK) ์๋ต์ ์์ฑํด์ผ ํฉ๋๋ค(์น์ 4.3.4).
4.3.3. ๊ฒ์ฆ ์๋ต ์ฒ๋ฆฌ
์กฐ๊ฑด๋ถ ์์ฒญ์ ๋ํ ์๋ต์ ์บ์๊ฐ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ ๊ทธ ์ํ ์ฝ๋์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค:
- 304 (Not Modified) ์๋ต์ ์ ์ฅ๋ ์๋ต์ ์ ๋ฐ์ดํธํ๊ณ ์ฌ์ฌ์ฉํ ์ ์์์ ๋ํ๋ ๋๋ค; ์์ธํ ๋ด์ฉ์ ์น์ 4.3.4 ์ฐธ์กฐ.
- ์ ์ฒด ์๋ต(์ฆ ์ฝํ ์ธ ๋ฅผ ํฌํจํ๋ ์๋ต)์ ์กฐ๊ฑด๋ถ ์์ฒญ์์ ์ง๋ช ๋ ์ ์ฅ๋ ์๋ต๋ค ์ค ์ด๋ ๊ฒ๋ ์ ํฉํ์ง ์์์ ๋ํ๋ ๋๋ค. ์ด ๊ฒฝ์ฐ ์บ์๋ ์์ฒญ์ ๋ง์กฑ์ํค๊ธฐ ์ํด ์ ์ฒด ์๋ต์ ์ฌ์ฉํด์ผ ํฉ๋๋ค(MUST). ์บ์๋ ๊ทธ๋ฌํ ์ ์ฒด ์๋ต์ ์ ์ฅํ ์ ์์ต๋๋ค(MAY), ๋จ ์ ์ฅ ์ ์ฝ์ ๋ฐ๋ฆ ๋๋ค(์์ธํ ๋ด์ฉ์ ์น์ 3 ์ฐธ์กฐ).
- ๊ทธ๋ฌ๋ ์บ์๊ฐ ๊ฒ์ฆ์ ์๋ํ๋ ๋์ 5xx (Server Error) ์๋ต์ ๋ฐ์ผ๋ฉด, ์บ์๋ ์ด ์๋ต์ ์์ฒญ ํด๋ผ์ด์ธํธ๋ก ์ ๋ฌํ๊ฑฐ๋ ์๋ฒ๊ฐ ์๋ตํ์ง ์์ ๊ฒ์ฒ๋ผ ํ๋ํ ์ ์์ต๋๋ค. ํ์์ ๊ฒฝ์ฐ, ์บ์๋ ์ด์ ์ ์ ์ฅ๋ ์๋ต์ ๋ณด๋ผ ์ ์์ผ๋ฉฐ ์ด๋ ๋ง๋ฃ๋ ์๋ต ์ ๊ณต์ ๊ดํ ์ ์ฝ์ ๋ฐ๋ฆ ๋๋ค(์น์ 4.2.4), ๋๋ ๊ฒ์ฆ ์์ฒญ์ ์ฌ์๋ํ ์ ์์ต๋๋ค.
4.3.4. ๊ฒ์ฆ ์ ์ ์ฅ๋ ์๋ต ๊ฐฑ์
์บ์๊ฐ 304 (Not Modified) ์๋ต์ ์์ ํ๋ฉด, ์บ์๋ ์๋ก ์ ๊ณต๋ ์ ๋ณด๋ก ์ ๋ฐ์ดํธํ๊ธฐ์ ์ ํฉํ ์ ์ฅ๋ ์๋ต์ ์๋ณํ ๋ค์ ์ด๋ฅผ ๊ฐฑ์ ํด์ผ ํฉ๋๋ค.
์ ๋ฐ์ดํธํ ์ด๊ธฐ ์ ์ฅ ์๋ต ์งํฉ์ ํด๋น ์์ฒญ์ ๋ํด ์ ํ๋ ์ ์์๋ ์๋ต๋ค, ์ฆ ์น์ 4์ ์๊ตฌ์ฌํญ์ ์ถฉ์กฑํ๋ ์๋ต๋ค๋ก ๊ตฌ์ฑ๋ฉ๋๋ค(๋จ, ๋ง์ง๋ง์ผ๋ก ์๊ตฌ๋๋ ์ ์ ํจ/๋ง๋ฃ ๊ฐ๋ฅ/๊ฒ์ฆ๋ ์ํ ์๊ตฌ์ฌํญ์ ์ ์ธ).
๊ทธ๋ฐ ๋ค์ ์ด๊ธฐ ์งํฉ์ ๋ค์์ ์ฒซ ๋ฒ์งธ ์ผ์น ๊ท์น์ผ๋ก ์ถ๊ฐ๋ก ํํฐ๋ง๋ฉ๋๋ค:
- ์ ์๋ต์ด ํ๋ ์ด์์ ๊ฐํ ๊ฒ์ฆ์(strong validators)๋ฅผ ํฌํจํ๋ฉด, ๊ฐ ๊ฐํ ๊ฒ์ฆ์๋ ๊ฐฑ์ ํ ์ ํ๋ ํํ์ ์๋ณํฉ๋๋ค. ์ด๊ธฐ ์งํฉ ๋ด์ ๋์ผํ ๊ฐํ ๊ฒ์ฆ์ ์ค ํ๋๋ฅผ ๊ฐ์ง ๋ชจ๋ ์ ์ฅ๋ ์๋ต์ด ๊ฐฑ์ ๋์์ผ๋ก ์๋ณ๋ฉ๋๋ค. ์ด๊ธฐ ์งํฉ ์ค ์ด๋ ๊ฒ๋ ๋์ผํ ๊ฐํ ๊ฒ์ฆ์๋ฅผ ํฌํจํ์ง ์์ผ๋ฉด ์บ์๋ ์ ์๋ต์ ์ฌ์ฉํ์ฌ ์ ์ฅ๋ ์๋ต์ ๊ฐฑ์ ํด์๋ ์ ๋ฉ๋๋ค(MUST NOT).
- ์ ์๋ต์ ๊ฐํ ๊ฒ์ฆ์๊ฐ ์๊ณ ํ๋ ์ด์์ ์ฝํ ๊ฒ์ฆ์(weak validators)๋ง ํฌํจ๋์ด ์๊ณ , ๊ทธ ๊ฒ์ฆ์๋ค์ด ์ด๊ธฐ ์งํฉ์ ์ ์ฅ๋ ์๋ต ์ค ํ๋์ ๋์ํ๋ฉด, ๊ทธ ์ผ์นํ๋ ์ ์ฅ๋ ์๋ต๋ค ์ค ๊ฐ์ฅ ์ต๊ทผ์ ๊ฒ์ด ๊ฐฑ์ ๋์์ผ๋ก ์๋ณ๋ฉ๋๋ค.
- ์ ์๋ต์ด ์ด๋ค ํํ์ ๊ฒ์ฆ์๋ ํฌํจํ์ง ์๋ ๊ฒฝ์ฐ(์: ํด๋ผ์ด์ธํธ๊ฐ Last-Modified ์๋ต ํค๋ ํ๋๊ฐ ์๋ ๋ค๋ฅธ ์ถ์ฒ์์ If-Modified-Since ์์ฒญ์ ์์ฑํ ๊ฒฝ์ฐ)์ด๊ณ , ์ด๊ธฐ ์งํฉ์ ์ ์ฅ๋ ์๋ต์ด ํ๋๋ง ์์ผ๋ฉฐ ๊ทธ ์ ์ฅ๋ ์๋ต๋ ๊ฒ์ฆ์๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ๊ทธ ์ ์ฅ๋ ์๋ต์ด ๊ฐฑ์ ๋์์ผ๋ก ์๋ณ๋ฉ๋๋ค.
์๋ณ๋ ๊ฐ ์ ์ฅ๋ ์๋ต์ ๋ํด ์บ์๋ 304 (Not Modified) ์๋ต์ ์ ๊ณต๋ ํค๋ ํ๋๋ก ์ ์ฅ๋ ์๋ต์ ํค๋ ํ๋๋ฅผ ์ ๋ฐ์ดํธํด์ผ ํฉ๋๋ค(MUST); ์ ๋ฐ์ดํธ ๋ฐฉ๋ฒ์ ์น์ 3.2๋ฅผ ๋ฐ๋ฆ ๋๋ค.
4.3.5. HEAD๋ก ์๋ต ๊ฐฑ์
HEAD ๋ฉ์๋์ ๋ํ ์๋ต์ ๋์ผํ ์์ฒญ์ GET์ผ๋ก ํ์ ๋์ ์๋ต๊ณผ ๋์ผํ์ง๋ง ๋ณธ๋ฌธ(content)์ ์ ์กํ์ง ์์ต๋๋ค. ์ด ํน์ฑ์ ์ ์ฅ๋ GET ์๋ต์ ๋ฌดํจํํ๊ฑฐ๋ ์ ๋ฐ์ดํธํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ์ด๋ ์ ์ฅ๋ ์๋ต์ ๊ฒ์ฆ์๊ฐ ์์ด์ ์กฐ๊ฑด๋ถ GET ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ๊ธฐ ์ด๋ ต๊ฑฐ๋, ์ฝํ ์ธ ์ ์ก์ ์ํ์ง ์์ ๋ ํนํ ์ ์ฉํฉ๋๋ค.
์บ์๊ฐ ๋์ URI์ ๋ํด ์ธ๋ฐ์ด๋ HEAD ์์ฒญ์ ํ๊ณ 200 (OK) ์๋ต์ ๋ฐ์ผ๋ฉด, ์บ์๋ ๊ทธ ์์ฒญ์ ๋ํด ์ ํ๋์์ ์ ์๋ ๊ฐ ์ ์ฅ๋ GET ์๋ต์ ๊ฐฑ์ ํ๊ฑฐ๋ ๋ฌดํจํํด์ผ ํฉ๋๋ค(SHOULD); ์์ธํ ๋ด์ฉ์ ์น์ 4.1 ์ฐธ์กฐ.
์ ํ๋ ์ ์์๋ ๊ฐ ์ ์ฅ๋ ์๋ต์ ๋ํด, ์ ์ฅ๋ ์๋ต๊ณผ HEAD ์๋ต์ด ์์ ๋ ๊ฒ์ฆ์ ํ๋(ETag ๋ฐ Last-Modified)์ ๋ํด ์ผ์นํ๊ณ , HEAD ์๋ต์ Content-Length ํค๋ ํ๋๊ฐ ํฌํจ๋์ด ์๋ค๋ฉด ๊ทธ ๊ฐ์ด ์ ์ฅ๋ ์๋ต์ ๊ฐ๊ณผ ์ผ์นํ๋ ๊ฒฝ์ฐ ์บ์๋ ์ ์ฅ๋ ์๋ต์ ์๋์ ์ค๋ช ๋ ๋๋ก ๊ฐฑ์ ํ๋ ๊ฒ์ด ๋ฐ๋์งํฉ๋๋ค(SHOULD); ๊ทธ๋ ์ง ์์ผ๋ฉด ์ ์ฅ๋ ์๋ต์ ๋ง๋ฃ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผํด์ผ ํฉ๋๋ค(SHOULD).
์บ์๊ฐ HEAD ์๋ต์ ์ ๊ณต๋ ๋ฉํ๋ฐ์ดํฐ๋ก ์ ์ฅ๋ ์๋ต์ ์ ๋ฐ์ดํธํ๋ ๊ฒฝ์ฐ, ์บ์๋ HEAD ์๋ต์ ์ ๊ณต๋ ํค๋ ํ๋๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฅ๋ ์๋ต์ ์ ๋ฐ์ดํธํด์ผ ํฉ๋๋ค(MUST); ๋ฐฉ๋ฒ์ ์น์ 3.2๋ฅผ ๋ฐ๋ฆ ๋๋ค.
4.4. ์ ์ฅ๋ ์๋ต ๋ฌดํจํ
PUT, POST, DELETE์ ๊ฐ์ ์์ ํ์ง ์์ ์์ฒญ ๋ฉ์๋(์น์ 9.2.1 of [HTTP])๋ ์์ ์๋ฒ์์ ์ํ๋ฅผ ๋ณ๊ฒฝํ ๊ฐ๋ฅ์ฑ์ด ์์ผ๋ฏ๋ก, ์ค๊ฐ์ ๊ฐ์ ํ๋ ์บ์๋ ์ ์ฅ๋ ์๋ต์ ์ต์ ์ํ๋ก ์ ์งํ๊ธฐ ์ํด ๋ฌดํจํํด์ผ ํฉ๋๋ค(MUST).
์บ์๋ ์์ ํ์ง ์์ ์์ฒญ ๋ฉ์๋์ ๋ํด ๋น์ค๋ฅ ์ํ ์ฝ๋๋ฅผ ์์ ํ ๋ ๋์ URI(์น์ 7.1 of [HTTP])๋ฅผ ๋ฌดํจํํด์ผ ํฉ๋๋ค(MUST).
์บ์๋ ์์ ํ์ง ์์ ์์ฒญ ๋ฉ์๋์ ๋ํด ๋น์ค๋ฅ ์ํ ์ฝ๋๋ฅผ ์์ ํ ๋ ๋ค๋ฅธ URI๋ค์ ๋ฌดํจํํ ์ ์์ต๋๋ค(MAY). ํนํ, ์๋ต ํค๋ ํ๋์ Location ๋ฐ Content-Location์ ์๋ URI(์กด์ฌํ๋ ๊ฒฝ์ฐ)๋ ๋ฌดํจํ ๋์์ด ๋ ์ ์์ต๋๋ค. ๋ค๋ฅธ URI๋ ์ด ๋ฌธ์์ ๋ช ์๋์ง ์์ ๋ฉ์ปค๋์ฆ์ ํตํด ๋ฐ๊ฒฌ๋ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ฌดํจํ ๋์์ ์์ (์น์ 4.3.1 of [HTTP])์ด ๋์ URI์ ์์ ๊ณผ ๋ค๋ฅด๋ฉด, ์บ์๋ ์ด๋ฌํ ์กฐ๊ฑด์์ ๋ฌดํจํ๋ฅผ ํธ๋ฆฌ๊ฑฐํด์๋ ์ ๋ฉ๋๋ค(MUST NOT). ์ด๋ ์๋น์ค ๊ฑฐ๋ถ ๊ณต๊ฒฉ์ ๋ฐฉ์งํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
๋ฌดํจํ(Invalidate)๋ ์บ์๊ฐ ์ฃผ์ด์ง URI์ ๋์ URI๊ฐ ์ผ์นํ๋ ๋ชจ๋ ์ ์ฅ๋ ์๋ต์ ์ ๊ฑฐํ๊ฑฐ๋, ์ดํ ์์ฒญ์ ๋ํด ์ ์ก๋๊ธฐ ์ ์ ๋ฐ๋์ ๊ฒ์ฆํด์ผ ํ๋ "๋ฌดํจํ" ์ํ๋ก ํ์ํจ์ ์๋ฏธํฉ๋๋ค.
"๋น์ค๋ฅ ์๋ต(non-error response)"์ 2xx (Successful) ๋๋ 3xx (Redirection) ์ํ ์ฝ๋๋ฅผ ๊ฐ์ง ์๋ต์ ๋๋ค.
์ด๊ฒ์ด ๋ชจ๋ ์ ์ ํ ์๋ต์ด ์ ์ญ์ ์ผ๋ก ๋ฌดํจํ๋๋ค๋ ๊ฒ์ ๋ณด์ฅํ์ง๋ ์๋๋ค๋ ์ ์ ์ ์ํ์ญ์์ค; ์ํ ๋ณ๊ฒฝ ์์ฒญ์ ๊ทธ๊ฒ์ด ํต๊ณผํ๋ ์บ์๋ค์์๋ง ์๋ต์ ๋ฌดํจํํฉ๋๋ค.
5. ํ๋ ์ ์
์ด ์ ์์๋ ์บ์ฑ๊ณผ ๊ด๋ จ๋ HTTP ํ๋์ ๊ตฌ๋ฌธ ๋ฐ ์๋ฏธ๋ก ์ ์ ์ํฉ๋๋ค.
5.1. Age
"Age" ์๋ต ํค๋ ํ๋๋ ์๋ต์ด ์๋ณธ ์๋ฒ์์ ์์ฑ๋์๊ฑฐ๋ ์ฑ๊ณต์ ์ผ๋ก ๊ฒ์ฆ๋ ์ดํ ๊ฒฝ๊ณผํ ์๊ฐ์ ๋ํ ์ก์ ์์ ์ถ์ ์น๋ฅผ ์ ๋ฌํฉ๋๋ค. Age ๊ฐ์ ๊ณ์ฐ ๋ฐฉ๋ฒ์ ์น์ 4.2.3์ ๊ท์ ๋ ๋๋ก์ ๋๋ค.
Age ํ๋ ๊ฐ์ ์ด ๋จ์์ ์๊ฐ์ ๋ํ๋ด๋ ์์ด ์๋ ์ ์์ ๋๋ค(์ฐธ์กฐ: ์น์ 1.2.2).
๋น๋ก ์ด ํ๋๊ฐ ๋จ์ผ ํค๋ ํ๋๋ก ์ ์๋์ด ์์ง๋ง, ๋ฆฌ์คํธ ๊ธฐ๋ฐ์ Age ํ๋ ๊ฐ์ ์ ํ ์บ์๋ ์ฒซ ๋ฒ์งธ ๋ฉค๋ฒ๋ฅผ ์ฌ์ฉํ๊ณ ์ดํ ๋ฉค๋ฒ๋ ๋ฒ๋ฆฌ๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค(SHOULD).
์์์ ์ธ๊ธํ ๋๋ก ์ถ๊ฐ ๋ฉค๋ฒ๋ฅผ ์ญ์ ํ ํ์ ํ๋ ๊ฐ์ด ์ ํจํ์ง ์์ ๊ฒฝ์ฐ(์: ์์ด ์๋ ์ ์๊ฐ ์๋ ๊ฐ์ด ํฌํจ๋ ๊ฒฝ์ฐ), ์บ์๋ ํด๋น ํ๋๋ฅผ ๋ฌด์ํ๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค(SHOULD).
Age ํค๋ ํ๋์ ์กด์ฌ๋ ํด๋น ์๋ต์ด ์ด ์์ฒญ์ ๋ํด ์์ ์๋ฒ์์ ์์ฑ๋๊ฑฐ๋ ๊ฒ์ฆ๋ ๊ฒ์ด ์๋์ ์์ํฉ๋๋ค. ๊ทธ๋ฌ๋ Age ํค๋ ํ๋๊ฐ ์๋ค๊ณ ํด์ ์์ ์๋ฒ์ ์ฐ๋ฝํ ์ ์ด ์์์ ์๋ฏธํ์ง๋ ์์ต๋๋ค.
5.2. Cache-Control
"Cache-Control" ํค๋ ํ๋๋ ์์ฒญ/์๋ต ์ฒด์ธ์ ์๋ ์บ์๋ค์ ์ํ ์ง์์ด๋ค์ ๋์ดํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์บ์ ์ง์์ด๋ ๋จ๋ฐฉํฅ์ด๋ฉฐ, ์์ฒญ์ ์ง์์ด๊ฐ ์กด์ฌํ๋ค๊ณ ํด์ ๋์ผํ ์ง์์ด๊ฐ ์๋ต์ ์กด์ฌํ๊ฑฐ๋ ๋ณต์ฌ๋๋ค๋ ๊ฒ์ ์๋ฏธํ์ง ์์ต๋๋ค.
์น์ 5.2.3์์๋ ๋ค๋ฅธ ๊ณณ์์ ์ ์๋ Cache-Control ์ง์์ด๋ค์ด ์ด๋ป๊ฒ ์ฒ๋ฆฌ๋๋์ง์ ๋ํ ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค.
ํ๋ก์(์บ์๋ฅผ ๊ตฌํํ๋ ํ์ง ์๋ ๊ด๊ณ์์ด)๋ ์ ๋ฌ๋๋ ๋ฉ์์ง์์ ์บ์ ์ง์์ด๋ฅผ ๊ทธ ์ ํจ์ฑ์ ๊ด๊ณ์์ด ์ ๋ฌํด์ผ ํฉ๋๋ค(MUST), ์ด๋ ์ง์์ด๊ฐ ์์ฒญ/์๋ต ์ฒด์ธ์์ ๋ชจ๋ ์์ ์์ ์ ์ฉ๋ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ํน์ ์บ์์ ์ง์์ด๋ฅผ ๋ชฉํ๋ก ์ผ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
์บ์ ์ง์์ด๋ ํ ํฐ์ผ๋ก ์๋ณ๋๋ฉฐ ๋์๋ฌธ์ ๊ตฌ๋ถ ์์ด ๋น๊ต๋ฉ๋๋ค. ์ ํ์ ์ธ์๋ฅผ ๊ฐ์ง ์ ์์ผ๋ฉฐ ์ธ์๋ ํ ํฐ ๋๋ ์ธ์ฉ ๋ฌธ์์ด(quoted-string) ๋ฌธ๋ฒ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ ์ ์๋ ์ธ์๋ฅผ ๊ฐ์ง๋ ์ง์์ด์ ๊ฒฝ์ฐ, ์์ ์๋ ์์ฑ ์ ํน์ ํ์์ด ์๊ตฌ๋๋๋ผ๋ ๋ ํ์ ๋ชจ๋๋ฅผ ์์ฉํ๋ ๊ฒ์ด ๋ฐ๋์งํฉ๋๋ค.
Cache-Control = #cache-directive cache-directive = token [ "=" ( token / quoted-string ) ]
์๋์ ์ ์๋ ์บ์ ์ง์์ด๋ค์ ๋ํด์๋, ๋ณ๋๋ก ๋ช ์ํ์ง ์๋ ํ ์ธ์๊ฐ ์ ์๋๊ฑฐ๋ ํ์ฉ๋์ง ์์ต๋๋ค.
5.2.1. ์์ฒญ ์ง์์ด
์ด ์ ์์๋ ์บ์ ์์ฒญ ์ง์์ด๋ฅผ ์ ์ํฉ๋๋ค. ์ด๋ค์ ๊ถ๊ณ ์ ์ด๋ฉฐ ์บ์๋ ์ด๋ฅผ ๊ตฌํํ ์ ์์ผ๋ ํ์๋ ์๋๋๋ค(MAY).
5.2.1.1. max-age
์ธ์ ๋ฌธ๋ฒ:
- delta-seconds (์ฐธ์กฐ: ์น์ 1.2.2)
max-age ์์ฒญ ์ง์์ด๋ ํด๋ผ์ด์ธํธ๊ฐ ์ง์ ํ ์ด ์๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ฐ๋ น์ ๊ฐ์ง ์๋ต์ ์ ํธํจ์ ๋ํ๋ ๋๋ค. max-stale ์์ฒญ ์ง์์ด๊ฐ ํจ๊ป ์๋ ํ, ํด๋ผ์ด์ธํธ๋ ๋ง๋ฃ๋ ์๋ต์ ๋ฐ๊ณ ์ ํ์ง ์์ต๋๋ค.
์ด ์ง์์ด๋ ์ธ์์ ํ ํฐ ํ์์ ์ฌ์ฉํฉ๋๋ค: ์: 'max-age=5' ( 'max-age="5"' ์๋). ์ก์ ์๋ ์ธ์ฉ ๋ฌธ์์ด ํ์์ ์์ฑํด์๋ ์ ๋ฉ๋๋ค(MUST NOT).
5.2.1.2. max-stale
์ธ์ ๋ฌธ๋ฒ:
- delta-seconds (์ฐธ์กฐ: ์น์ 1.2.2)
max-stale ์์ฒญ ์ง์์ด๋ ํด๋ผ์ด์ธํธ๊ฐ ์ ์ ๋ ์๋ช ์ ์ด๊ณผํ ์๋ต์ ํ์ฉํ ๊ฒ์์ ๋ํ๋ ๋๋ค. ๊ฐ์ด ์กด์ฌํ๋ฉด, ํด๋ผ์ด์ธํธ๋ ์ ์ ๋ ์๋ช ์ ์ง์ ๋ ์ด ์๋งํผ ์ด๊ณผํ ์๋ต๊น์ง๋ง ํ์ฉํฉ๋๋ค. ๊ฐ์ด ์ง์ ๋์ง ์์ผ๋ฉด, ํด๋ผ์ด์ธํธ๋ ๋์ด์ ์๊ด์์ด ๋ง๋ฃ๋ ์๋ต์ ๋ฐ์๋ค์ ๋๋ค.
์ด ์ง์์ด๋ ์ธ์์ ํ ํฐ ํ์์ ์ฌ์ฉํฉ๋๋ค: ์: 'max-stale=10' ( 'max-stale="10"' ์๋). ์ก์ ์๋ ์ธ์ฉ ๋ฌธ์์ด ํ์์ ์์ฑํด์๋ ์ ๋ฉ๋๋ค(MUST NOT).
5.2.1.3. min-fresh
์ธ์ ๋ฌธ๋ฒ:
- delta-seconds (์ฐธ์กฐ: ์น์ 1.2.2)
min-fresh ์์ฒญ ์ง์์ด๋ ํด๋ผ์ด์ธํธ๊ฐ ํ์ฌ ์ฐ๋ น์ ์ง์ ๋ ์ด๋ฅผ ๋ํ ๊ฐ๋ณด๋ค ์ ์ง ์์ ์ ์ ๋ ์๋ช ์ ๊ฐ์ง ์๋ต์ ์ ํธํจ์ ๋ํ๋ ๋๋ค. ์ฆ, ํด๋ผ์ด์ธํธ๋ ์์ผ๋ก ์ต์ํ ์ง์ ๋ ์ด ๋์ ์ ์ ํ ์๋ต์ ์ํฉ๋๋ค.
์ด ์ง์์ด๋ ์ธ์์ ํ ํฐ ํ์์ ์ฌ์ฉํฉ๋๋ค: ์: 'min-fresh=20' ( 'min-fresh="20"' ์๋). ์ก์ ์๋ ์ธ์ฉ ๋ฌธ์์ด ํ์์ ์์ฑํด์๋ ์ ๋ฉ๋๋ค(MUST NOT).
5.2.1.4. no-cache
no-cache ์์ฒญ ์ง์์ด๋ ํด๋ผ์ด์ธํธ๊ฐ ์์ ์๋ฒ์์ ์ฑ๊ณต์ ์ธ ๊ฒ์ฆ ์์ด ์ ์ฅ๋ ์๋ต์ด ์์ฒญ์ ๋ง์กฑ์ํค๋ ๋ฐ ์ฌ์ฉ๋๋ ๊ฒ์ ์ํ์ง ์์์ ๋ํ๋ ๋๋ค.
5.2.1.5. no-store
no-store ์์ฒญ ์ง์์ด๋ ์บ์๊ฐ ์ด ์์ฒญ์ด๋ ์ด์ ๋ํ ์ด๋ค ์๋ต์ ์ด๋ค ๋ถ๋ถ๋ ์ ์ฅํด์๋ ์ ๋จ์ ๋ํ๋ ๋๋ค(MUST NOT). ์ด ์ง์์ด๋ ๊ฐ์ธ ์บ์์ ๊ณต์ ์บ์ ๋ชจ๋์ ์ ์ฉ๋ฉ๋๋ค. ์ฌ๊ธฐ์ "์ ์ฅํด์๋ ์ ๋๋ค"๋ ๊ฒ์ ์บ์๊ฐ ์ ๋ณด๋ฅผ ๋นํ๋ฐ์ฑ ์ ์ฅ์์ ์๋์ ์ผ๋ก ์ ์ฅํด์๋ ์ ๋๋ฉฐ, ์ ๋ฌ ํ ๊ฐ๋ฅํ ํ ์ ์ํ๊ฒ ํ๋ฐ์ฑ ์ ์ฅ์์์ ํด๋น ์ ๋ณด๋ฅผ ์ ๊ฑฐํ๋๋ก ์ต์ ์ ๋คํด์ผ ํจ์ ์๋ฏธํฉ๋๋ค(MUST).
์ด ์ง์์ด๋ ํ๋ผ์ด๋ฒ์๋ฅผ ๋ณด์ฅํ๊ธฐ ์ํ ์ ๋ขฐํ ์ ์๊ฑฐ๋ ์ถฉ๋ถํ ๋ฉ์ปค๋์ฆ์ด ์๋๋๋ค. ํนํ ์ ์์ ์ด๊ฑฐ๋ ์์๋ ์บ์๋ ์ด ์ง์์ด๋ฅผ ์ธ์ํ์ง ์๊ฑฐ๋ ์ค์ํ์ง ์์ ์ ์์ผ๋ฉฐ, ํต์ ๋คํธ์ํฌ๋ ๋์ฒญ์ ์ทจ์ฝํ ์ ์์ต๋๋ค.
์ด ์ง์์ด๋ฅผ ํฌํจํ ์์ฒญ์ด ์บ์์์ ๋ง์กฑ๋ ๊ฒฝ์ฐ, ๊ทธ ๋ ์ด๋ฏธ ์ ์ฅ๋ ์๋ต์๋ no-store ์์ฒญ ์ง์์ด๊ฐ ์ ์ฉ๋์ง ์๋๋ค๋ ์ ์ ์ ์ํ์ญ์์ค.
5.2.1.6. no-transform
no-transform ์์ฒญ ์ง์์ด๋ ํด๋ผ์ด์ธํธ๊ฐ ์ค๊ฐ์๋ค์๊ฒ ์ฝํ ์ธ ๋ณํ์ ํผํ๋๋ก ์์ฒญํ๊ณ ์์์ ๋ํ๋ ๋๋ค(์ ์: ์น์ 7.7).
5.2.1.7. only-if-cached
only-if-cached ์์ฒญ ์ง์์ด๋ ํด๋ผ์ด์ธํธ๊ฐ ์ค์ง ์ ์ฅ๋ ์๋ต๋ง์ ์ป๊ณ ์ ํจ์ ๋ํ๋ ๋๋ค. ์ด ์ง์์ด๋ฅผ ์กด์คํ๋ ์บ์๋ ์์ ์ ๋ค๋ฅธ ์์ฒญ ์ ์ฝ๊ณผ ์ผ์นํ๋ ์ ์ฅ๋ ์๋ต์ ๋ฐํํ๊ฑฐ๋ 504 (Gateway Timeout) ์ํ ์ฝ๋๋ฅผ ๋ฐํํด์ผ ํฉ๋๋ค(SHOULD).
5.2.2. ์๋ต ์ง์์ด
์ด ์ ์ ์บ์ ์๋ต ์ง์์ด๋ฅผ ์ ์ํฉ๋๋ค. ์บ์๋ ์ด ์ ์์ ์ ์ํ Cache-Control ์ง์์ด๋ฅผ ์ค์ํด์ผ ํฉ๋๋ค(MUST).
5.2.2.1. max-age
์ธ์ ๋ฌธ๋ฒ:
- delta-seconds (์ฐธ์กฐ: ์น์ 1.2.2)
max-age ์๋ต ์ง์์ด๋ ์๋ต์ ์ฐ๋ น์ด ์ง์ ๋ ์ด ์๋ฅผ ์ด๊ณผํ๋ฉด ํด๋น ์๋ต์ ๋ง๋ฃ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ๋๋ก ์ง์ํฉ๋๋ค.
์ด ์ง์์ด๋ ์ธ์์ ํ ํฐ ํ์์ ์ฌ์ฉํฉ๋๋ค: ์: 'max-age=5' ( 'max-age="5"' ์๋). ์ก์ ์๋ ์ธ์ฉ ๋ฌธ์์ด ํ์์ ์์ฑํด์๋ ์ ๋ฉ๋๋ค(MUST NOT).
5.2.2.2. must-revalidate
must-revalidate ์๋ต ์ง์์ด๋ ์๋ต์ด ๋ง๋ฃ๋ ๊ฒฝ์ฐ ์บ์๊ฐ ์์ ์์ ์ฑ๊ณต์ ์ผ๋ก ๊ฒ์ฆ๋ ๋๊น์ง ๊ทธ ์๋ต์ ๋ค๋ฅธ ์์ฒญ์ ๋ง์กฑ์ํค๋ ๋ฐ ์ฌ์ฌ์ฉํด์๋ ์ ๋จ์ ๋ํ๋ ๋๋ค(์ ์: ์น์ 4.3).
must-revalidate ์ง์์ด๋ ํน์ ํ๋กํ ์ฝ ๊ธฐ๋ฅ์ ์ ๋ขฐํ ์ ์๋ ๋์์ ์ง์ํ๊ธฐ ์ํด ํ์ํฉ๋๋ค. ๋ชจ๋ ์ํฉ์์ ์บ์๋ must-revalidate ์ง์์ด๋ฅผ ๋ฌด์ํด์๋ ์ ๋ฉ๋๋ค(MUST NOT); ํนํ ์บ์๊ฐ ์ฐ๊ฒฐ์ด ๋๊ธด ๊ฒฝ์ฐ ์บ์๋ ๋ง๋ฃ๋ ์๋ต์ ์ฌ์ฌ์ฉํ๋ ๋์ ์ค๋ฅ ์๋ต์ ์์ฑํด์ผ ํฉ๋๋ค(MUST). ์์ฑ๋ ์ํ ์ฝ๋๋ ๋ค๋ฅธ ์ค๋ฅ ์ํ ์ฝ๋๊ฐ ๋ ์ ํฉํ์ง ์๋ ํ 504 (Gateway Timeout)๊ฐ ๋์ด์ผ ํฉ๋๋ค(SHOULD).
must-revalidate ์ง์์ด๋ ๊ฒ์ฆ ์คํจ๊ฐ ์๋ชป๋ ๋์์ ์ด๋ํ ์ ์๋ ๊ฒฝ์ฐ(์: ๊ธ์ต ๊ฑฐ๋๊ฐ ์กฐ์ฉํ ์คํ๋์ง ์๋ ๊ฒฝ์ฐ)์ ํํด ์๋ฒ๊ฐ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
must-revalidate ์ง์์ด๋ ๋ํ ๊ณต์ ์บ์๊ฐ Authorization ํค๋ ํ๋๋ฅผ ํฌํจํ ์์ฒญ์ ๋ํ ์๋ต์ ์ฌ์ฌ์ฉํ๋๋ก ํ์ฉํ ์ ์์ง๋ง, ์ด๋ ์ฌ๊ฒ์ฆ์ ๊ดํ ์ ์๊ตฌ์ฌํญ์ ์ ์ฉ์ ๋ฐ์ต๋๋ค(์น์ 3.5 ์ฐธ์กฐ).
5.2.2.3. must-understand
must-understand ์๋ต ์ง์์ด๋ ํด๋น ์๋ต์ ์ํ ์ฝ๋์ ๋ํ ์๊ตฌ์ฌํญ์ ์ดํดํ๊ณ ์ค์ํ๋ ์บ์์๋ง ๊ทธ ์๋ต์ ์บ์ฑ์ ํ์ฉํ๋๋ก ์ ํํฉ๋๋ค.
must-understand ์ง์์ด๋ฅผ ํฌํจํ๋ ์๋ต์ no-store ์ง์์ด๋ ํฌํจํ๋ ๊ฒ์ด ๋ฐ๋์งํฉ๋๋ค(SHOULD). must-understand๋ฅผ ๊ตฌํํ๋ ์บ์๋ ํด๋น ์ง์์ด๋ฅผ ํฌํจํ ์๋ต์ ๋ฐ์ ๋, ๊ทธ ์ํ ์ฝ๋์ ์บ์ฑ ์๊ตฌ์ฌํญ์ ์ดํดํ๊ณ ๊ตฌํํ๋ค๋ฉด no-store ์ง์์ด๋ฅผ ๋ฌด์ํ๋ ๊ฒ์ด ๋ฐ๋์งํฉ๋๋ค(SHOULD).
5.2.2.4. no-cache
์ธ์ ๋ฌธ๋ฒ:
no-cache ์๋ต ์ง์์ด์ ๋ฌด์์ ํํ(์ธ์ ์์ด)๋ ํด๋น ์๋ต์ด ์์ ์๋ฒ๋ก ์ ๋ฌ๋์ด ์ฑ๊ณต์ ์ธ ๊ฒ์ฆ์ ๋ฐ์ง ์๋ ํ ๋ค๋ฅธ ์์ฒญ์ ๋ง์กฑ์ํค๋ ๋ฐ ์ฌ์ฉ๋์ด์๋ ์ ๋จ์ ๋ํ๋ ๋๋ค(MUST NOT); ์์ธํ ๋ด์ฉ์ ์น์ 4.3 ์ฐธ์กฐ.
์ด๋ ์์ ์๋ฒ๊ฐ ์บ์๋ก ํ์ฌ๊ธ ์บ์์ ์ ์ฅ๋ ์๋ต์ ์ฌ์ฉํ์ง ์๊ณ ์์ ์๋ฒ์ ์ฐ๋ฝํ๋๋ก ๊ฐ์ ํ ์ ์๊ฒ ํด์ค๋๋ค. ๊ตฌ์ฑ๋ ์บ์๊ฐ ๋ง๋ฃ๋ ์๋ต์ ๋ณด๋ด๋๋ก ๋์ด ์์ด๋ ์ด๋ฅผ ๋ง์ ์ ์์ต๋๋ค.
์ธ์๊ฐ ์๋ ํ์ ๋ ํํ์ no-cache ์ง์์ด๋ ํ๋ ์ด์์ ํ๋ ์ด๋ฆ์ ๋์ดํ๋ฉฐ, ์บ์๋ ๋์ด๋ ํค๋ ํ๋๋ค์ด ํ์ ์๋ต์์ ์ ์ธ๋์๊ฑฐ๋ ํ์ ์๋ต์ด ์์ ์๋ฒ์์ ์ฑ๊ณต์ ์ผ๋ก ์ฌ๊ฒ์ฆ๋์ด ๊ทธ ํ๋๋ค์ด ๊ฐฑ์ ๋๊ฑฐ๋ ์ ๊ฑฐ๋ ๊ฒฝ์ฐ์๋ง(๋ค๋ฅธ ์บ์ฑ ์ ์ฝ์ ์ค์ํ๋ฉด์) ์๋ต์ ์ฌ์ฉํด ํ์ ์์ฒญ์ ๋ง์กฑ์ํฌ ์ ์์์ ๋ํ๋ ๋๋ค(MAY). ์ด๋ ์์ ์๋ฒ๊ฐ ์๋ต์ ํน์ ํค๋ ํ๋์ ์ฌ์ฌ์ฉ๋ง์ ๋ฐฉ์งํ๋ฉด์ ๋๋จธ์ง ์๋ต์ ์บ์ฑ์ ํ์ฉํ ์ ์๊ฒ ํฉ๋๋ค.
์ง์ ๋ ํ๋ ์ด๋ฆ์ ์ด ๋ช ์ธ์์์ ์ ์ํ ํค๋ ํ๋ ์งํฉ์ผ๋ก ์ ํ๋์ง ์์ต๋๋ค. ํ๋ ์ด๋ฆ์ ๋์๋ฌธ์ ๊ตฌ๋ถ์ด ์์ต๋๋ค.
์ด ์ง์์ด๋ ์ธ์์ ์ธ์ฉ ๋ฌธ์์ด ํ์์ ์ฌ์ฉํฉ๋๋ค. ์ก์ ์๋ ํ ํฐ ํ์์ ์์ฑํด์๋ ์ ๋ฉ๋๋ค(SHOULD NOT), ์ค๋ น ๋จ์ผ ํญ๋ชฉ ๋ฆฌ์คํธ์ ๊ฒฝ์ฐ ์ธ์ฉ์ด ํ์ ์์ด ๋ณด์ด๋๋ผ๋.
5.2.2.5. no-store
no-store ์๋ต ์ง์์ด๋ ์บ์๊ฐ ์ฆ์ ์์ฒญ ๋๋ ์๋ต์ ์ด๋ค ๋ถ๋ถ๋ ์ ์ฅํด์๋ ์ ๋๋ฉฐ, ๋ํ ํด๋น ์๋ต์ ๋ค๋ฅธ ์์ฒญ์ ๋ง์กฑ์ํค๋ ๋ฐ ์ฌ์ฉํด์๋ ์ ๋จ์ ๋ํ๋ ๋๋ค(MUST NOT).
์ด ์ง์์ด๋ ๊ฐ์ธ ์บ์์ ๊ณต์ ์บ์ ๋ชจ๋์ ์ ์ฉ๋ฉ๋๋ค. ์ฌ๊ธฐ์ "์ ์ฅํด์๋ ์ ๋๋ค"๋ ๊ฒ์ ์บ์๊ฐ ์ ๋ณด๋ฅผ ๋นํ๋ฐ์ฑ ์ ์ฅ์์ ์๋์ ์ผ๋ก ์ ์ฅํด์๋ ์ ๋๋ฉฐ, ์ ๋ฌ ํ ๊ฐ๋ฅํ ํ ์ ์ํ๊ฒ ํ๋ฐ์ฑ ์ ์ฅ์์์ ํด๋น ์ ๋ณด๋ฅผ ์ ๊ฑฐํ๋๋ก ์ต์ ์ ๋คํด์ผ ํจ์ ์๋ฏธํฉ๋๋ค(MUST).
์ด ์ง์์ด๋ ํ๋ผ์ด๋ฒ์ ๋ณด์ฅ์ ์ํ ์ ๋ขฐํ ์ ์๋ ์ถฉ๋ถํ ๋ฉ์ปค๋์ฆ์ด ์๋๋๋ค. ํนํ ์ ์์ ์ด๊ฑฐ๋ ์์๋ ์บ์๋ ์ด๋ฅผ ์ธ์ํ์ง ์๊ฑฐ๋ ์ค์ํ์ง ์์ ์ ์์ผ๋ฉฐ, ํต์ ๋คํธ์ํฌ๋ ๋์ฒญ์ ์ทจ์ฝํ ์ ์์ต๋๋ค.
must-understand ์บ์ ์ง์์ด๊ฐ ํน์ ์ํฉ์์ no-store๋ฅผ ์ฌ์ ์ํ ์ ์๋ค๋ ์ ์ ์ ์ํ์ญ์์ค(์์ธํ ๋ด์ฉ์ ์น์ 5.2.2.3 ์ฐธ์กฐ).
5.2.2.6. no-transform
no-transform ์๋ต ์ง์์ด๋ ์ค๊ฐ์(์บ์ ๊ตฌํ ์ฌ๋ถ์ ๊ด๊ณ์์ด)๊ฐ ์ฝํ ์ธ ๋ฅผ ๋ณํํด์๋ ์ ๋จ์ ๋ํ๋ ๋๋ค(์ ์: ์น์ 7.7).
5.2.2.7. private
์ธ์ ๋ฌธ๋ฒ:
๋ฌด์์ private ์๋ต ์ง์์ด๋ ๊ณต์ ์บ์๊ฐ ํด๋น ์๋ต์ ์ ์ฅํด์๋ ์ ๋จ์ ๋ํ๋ ๋๋ค(MUST NOT)(์ฆ, ์๋ต์ ๋จ์ผ ์ฌ์ฉ์์ฉ์ ๋๋ค). ๋ํ ๊ฐ์ธ ์บ์๋ ํด๋น ์๋ต์ ์ ์ฅํ ์ ์์์ ๋ํ๋ ๋๋ค(MAY), ๋จ ์น์ 3์ ์ ์๋ ์ ์ฝ์ ๋ฐ๋ฆ ๋๋ค. ์ด๋ ํด๋น ์๋ต์ด ๊ทธ๋ ์ง ์๋ค๋ฉด ๊ฐ์ธ ์บ์์์ ํด๋ฆฌ์คํฑ์ผ๋ก ์บ์ํ ์ ์์์ ๊ฒฝ์ฐ์๋ ์ ์ฉ๋ฉ๋๋ค.
ํ์ ๋ private ์๋ต ์ง์์ด๊ฐ ์๊ณ ์ธ์๋ก ํ๋ ์ด์์ ํ๋ ์ด๋ฆ์ด ๋์ด๋ ๊ฒฝ์ฐ, ๋์ด๋ ํค๋ ํ๋๋ง ๋จ์ผ ์ฌ์ฉ์๋ก ์ ํ๋ฉ๋๋ค: ๊ณต์ ์บ์๋ ์๋ ์๋ต์ ํด๋น ํ๋๋ค์ด ์กด์ฌํ๋ ๊ฒฝ์ฐ ๊ทธ ํ๋๋ค์ ์ ์ฅํด์๋ ์ ๋๋ฉฐ(MUST NOT), ๋๋จธ์ง ์๋ต ๋ฉ์์ง๋ ํด๋น ํค๋ ํ๋ ์์ด ์ ์ฅํ ์ ์์ต๋๋ค(MAY), ๋จ ์น์ 3์ ์ ์ฝ์ ๋ฐ๋ฆ ๋๋ค.
์ง์ ๋ ํ๋ ์ด๋ฆ์ ์ด ๋ช ์ธ์์์ ์ ์ํ ํค๋ ํ๋ ์งํฉ์ผ๋ก ์ ํ๋์ง ์์ต๋๋ค. ํ๋ ์ด๋ฆ์ ๋์๋ฌธ์ ๊ตฌ๋ถ์ด ์์ต๋๋ค.
์ด ์ง์์ด๋ ์ธ์์ ์ธ์ฉ ๋ฌธ์์ด ํ์์ ์ฌ์ฉํฉ๋๋ค. ์ก์ ์๋ ํ ํฐ ํ์์ ์์ฑํด์๋ ์ ๋ฉ๋๋ค(SHOULD NOT), ์ค๋ น ๋จ์ผ ํญ๋ชฉ ๋ฆฌ์คํธ์ ๊ฒฝ์ฐ ์ธ์ฉ์ด ํ์ ์์ด ๋ณด์ด๋๋ผ๋.
5.2.2.8. proxy-revalidate
proxy-revalidate ์๋ต ์ง์์ด๋ ์๋ต์ด ๋ง๋ฃ๋ ๊ฒฝ์ฐ ๊ณต์ ์บ์๊ฐ ์์ ์์ ์ฑ๊ณต์ ์ผ๋ก ๊ฒ์ฆ๋ ๋๊น์ง ๊ทธ ์๋ต์ ๋ค๋ฅธ ์์ฒญ์ ๋ง์กฑ์ํค๋ ๋ฐ ์ฌ์ฌ์ฉํด์๋ ์ ๋จ์ ๋ํ๋ ๋๋ค(MUST NOT), ์ด๋ must-revalidate์ ์ ์ฌํ์ง๋ง proxy-revalidate๋ ๊ฐ์ธ ์บ์์๋ ์ ์ฉ๋์ง ์์ต๋๋ค.
proxy-revalidate ์์ฒด๋ง์ผ๋ก๋ ์๋ต์ด ์บ์ ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ์๋ฏธํ์ง ์์ต๋๋ค. ์๋ฅผ ๋ค์ด public ์ง์์ด์ ๊ฒฐํฉ๋์ด ์๋ต์ ์บ์ ๊ฐ๋ฅํ๊ฒ ํ๋ฉด์ ๊ณต์ ์บ์๋ง ๋ง๋ฃ ์ ์ฌ๊ฒ์ฆํ๋๋ก ์๊ตฌํ ์ ์์ต๋๋ค.
5.2.2.9. public
public ์๋ต ์ง์์ด๋ ์บ์๊ฐ ํด๋น ์๋ต์ ์ ์ฅํ ์ ์๋๋ก ํ์ฉํจ์ ๋ํ๋ ๋๋ค(MAY), ๋จ ์น์ 3์ ์ ์๋ ์ ์ฝ์ ๋ฐ๋ฆ ๋๋ค. ์ฆ, public์ ์๋ต์ ๋ช ์์ ์ผ๋ก ์บ์ ๊ฐ๋ฅํ๋ค๊ณ ํ์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด public์ Authorization ํค๋ ํ๋๋ฅผ ํฌํจํ ์์ฒญ์ ๋ํ ์๋ต์ ๊ณต์ ์บ์๊ฐ ์ฌ์ฌ์ฉํ ์ ์๋๋ก ํ์ฉํฉ๋๋ค(์น์ 3.5).
์ด๋ฏธ ์น์ 3์ ๋ฐ๋ผ ์บ์ ๊ฐ๋ฅํ ์๋ต์๋ public ์ง์์ด๋ฅผ ์ถ๊ฐํ ํ์๊ฐ ์์ต๋๋ค.
public ์ง์์ด๊ฐ ์๋ ์๋ต์ด ๋ช ์์ ์ ์ ๋ ์ ๋ณด๋ฅผ ๊ฐ์ง์ง ์์ผ๋ฉด ๊ทธ ์๋ต์ ํด๋ฆฌ์คํฑ์ผ๋ก ์บ์ ๊ฐ๋ฅํ๊ฒ ๋ฉ๋๋ค(์น์ 4.2.2).
5.2.2.10. s-maxage
์ธ์ ๋ฌธ๋ฒ:
- delta-seconds (์ฐธ์กฐ: ์น์ 1.2.2)
s-maxage ์๋ต ์ง์์ด๋ ๊ณต์ ์บ์์ ๋ํด ์ด ์ง์์ด๋ก ์ง์ ๋ ์ต๋ ์ฐ๋ น์ด max-age ์ง์์ด๋ Expires ํค๋ ํ๋์ ์ํด ์ง์ ๋ ์ต๋ ์ฐ๋ น์ ๋ฌด์ํ๋๋ก ์ง์ํฉ๋๋ค.
s-maxage ์ง์์ด๋ ๊ณต์ ์บ์์ ๋ํด proxy-revalidate ์๋ต ์ง์์ด(์น์ 5.2.2.8)์ ์๋ฏธ๋ฅผ ํฌํจํฉ๋๋ค. ๊ณต์ ์บ์๋ s-maxage๊ฐ ์๋ ๋ง๋ฃ๋ ์๋ต์ ์์ ์์ ์ฑ๊ณต์ ์ผ๋ก ๊ฒ์ฆํ ๋๊น์ง ๋ค๋ฅธ ์์ฒญ์ ๋ง์กฑ์ํค๋ ๋ฐ ์ฌ์ฌ์ฉํด์๋ ์ ๋ฉ๋๋ค(MUST NOT)(์ ์: ์น์ 4.3). ์ด ์ง์์ด๋ ๋ํ ๊ณต์ ์บ์๊ฐ Authorization ํค๋ ํ๋๋ฅผ ํฌํจํ๋ ์์ฒญ์ ๋ํด ์๋ต์ ์ฌ์ฌ์ฉํ๋๋ก ํ์ฉํ๋, ์ต๋ ์ฐ๋ น ๋ฐ ์ฌ๊ฒ์ฆ์ ๊ดํ ์ ์๊ตฌ์ฌํญ์ ์ ์ฉ์ ๋ฐ์ต๋๋ค(์น์ 3.5).
์ด ์ง์์ด๋ ์ธ์์ ํ ํฐ ํ์์ ์ฌ์ฉํฉ๋๋ค: ์: 's-maxage=10' ( 's-maxage="10"' ์๋). ์ก์ ์๋ ์ธ์ฉ ๋ฌธ์์ด ํ์์ ์์ฑํด์๋ ์ ๋ฉ๋๋ค(MUST NOT).
5.2.3. ํ์ฅ ์ง์์ด
Cache-Control ํค๋ ํ๋๋ ํ๋ ์ด์์ ํ์ฅ ์บ์ ์ง์์ด๋ฅผ ์ฌ์ฉํ์ฌ ํ์ฅ๋ ์ ์์ต๋๋ค. ์บ์๋ ์ธ์ํ์ง ๋ชปํ๋ ์บ์ ์ง์์ด๋ฅผ ๋ฌด์ํด์ผ ํฉ๋๋ค(MUST).
์ ๋ณด์ฑ ํ์ฅ(์บ์ ๋์์ ๋ณ๊ฒฝ์ ์๊ตฌํ์ง ์๋ ๊ฒ)์ ๋ค๋ฅธ ์ง์์ด์ ์๋ฏธ๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ์ถ๊ฐ๋ ์ ์์ต๋๋ค.
๋์์ ํ์ฅ์ ๊ธฐ์กด ์บ์ ์ง์์ด์ ์์ ์ ํตํด ๋์ํ๋๋ก ์ค๊ณ๋ฉ๋๋ค. ์๋ก์ด ์ง์์ด์ ๊ธฐ์กด ์ง์์ด๊ฐ ํจ๊ป ์ ๊ณต๋์ด, ์๋ก์ด ์ง์์ด๋ฅผ ์ดํดํ์ง ๋ชปํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ธฐ์กด ์ง์์ด์ ๋ช ์๋ ๋์์ ๊ธฐ๋ณธ์ผ๋ก ํ๊ณ , ์๋ก์ด ์ง์์ด๋ฅผ ์ดํดํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ทธ๊ฒ์ด ๊ธฐ์กด ์ง์์ด์ ์๊ตฌ์ฌํญ์ ์์ ํ๋ค๊ณ ์ธ์ํ๋๋ก ํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ฐฐํฌ๋ ์บ์๋ฅผ ๊นจ๋จ๋ฆฌ์ง ์์ผ๋ฉด์ ๊ธฐ์กด ์บ์ ์ง์์ด์ ํ์ฅ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, hypotheticalํ ์๋ก์ด ์๋ต ์ง์์ด "community"๊ฐ private ์ง์์ด๋ฅผ ์์ ํ๋๋ก ๋์ํ๋ค๊ณ ๊ฐ์ ํด ๋ณด์ญ์์ค: private ์บ์ ์ธ์๋ ๋ช ๋ช ๋ ์ปค๋ฎค๋ํฐ ๊ตฌ์ฑ์๋ค์ด ๊ณต์ ํ๋ ์บ์๋ง ์๋ต์ ์บ์ํ ์ ์๊ฒ ํ๋ ๊ฒ์ ๋๋ค. ์์ ์๋ฒ๊ฐ ํน์ ์ปค๋ฎค๋ํฐ๊ฐ ๊ทธ๋ ์ง ์์ผ๋ฉด private์ธ ์๋ต์ ์์ ์ ๊ณต์ ์บ์์ ํ์ฉํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํฌํจํ ์ ์์ต๋๋ค
Cache-Control: private, community="UCI"
community ์บ์ ์ง์์ด๋ฅผ ์ธ์ํ๋ ์บ์๋ ํด๋น ํ์ฅ์ ๋ฐ๋ผ ๋์์ ํ์ฅํ ์ ์์ต๋๋ค. ์ธ์ํ์ง ๋ชปํ๋ ์บ์๋ ์ด๋ฅผ ๋ฌด์ํ๊ณ private ์ง์์ด๋ฅผ ๋ฐ๋ฆ ๋๋ค.
์ ํ์ฅ ์ง์์ด๋ ๋ค์ ์ฌํญ๋ค์ ์ ์ํ๋ ๊ฒ์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค:
- ์ง์์ด๊ฐ ์ฌ๋ฌ ๋ฒ ์ง์ ๋์์ ๋ ๊ทธ๊ฒ์ด ์๋ฏธํ๋ ๋ฐ,
- ์ง์์ด๊ฐ ์ธ์๋ฅผ ์ทจํ์ง ์์ ๋ ์ธ์๊ฐ ์กด์ฌํ๋ฉด ๊ทธ๊ฒ์ด ์๋ฏธํ๋ ๋ฐ,
- ์ง์์ด๊ฐ ์ธ์๋ฅผ ์๊ตฌํ ๋ ์ธ์๊ฐ ์์ผ๋ฉด ๊ทธ๊ฒ์ด ์๋ฏธํ๋ ๋ฐ, ๋ฐ
- ์ง์์ด๊ฐ ์์ฒญ ์ ์ฉ์ธ์ง ์๋ต ์ ์ฉ์ธ์ง ๋๋ ์ด๋ ์ชฝ์๋ ์ฌ์ฉํ ์ ์๋์ง ์ฌ๋ถ.
5.2.4. ์บ์ ์ง์์ด ๋ ์ง์คํธ๋ฆฌ
"Hypertext Transfer Protocol (HTTP) Cache Directive Registry"๋ ์บ์ ์ง์์ด์ ๋ค์์คํ์ด์ค๋ฅผ ์ ์ํฉ๋๋ค. ํด๋น ๋ ์ง์คํธ๋ฆฌ๋ ๋ค์์์ ์์ฑ๋์ด ํ์ฌ ์ ์ง ๊ด๋ฆฌ๋๊ณ ์์ต๋๋ค: https://www.iana.org/assignments/http-cache-directives.
๋ฑ๋ก์๋ ๋ค์ ํ๋๋ค์ด ํฌํจ๋์ด์ผ ํฉ๋๋ค(MUST):
- Cache Directive Name
- Pointer to specification text
์ด ๋ค์์คํ์ด์ค์ ์ถ๊ฐํ ๊ฐ์ IETF ๊ฒํ ๊ฐ ํ์ํฉ๋๋ค(์ฐธ์กฐ: [RFC8126], ์น์ 4.8).
5.3. Expires
"Expires" ์๋ต ํค๋ ํ๋๋ ์๋ต์ด ๋ง๋ฃ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋๋ ์ดํ์ ๋ ์ง/์๊ฐ์ ์ ๊ณตํฉ๋๋ค. ์ ์ ๋ ๋ชจ๋ธ์ ๋ํ ์ถ๊ฐ ๋ ผ์๋ ์น์ 4.2๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
Expires ํค๋ ํ๋์ ์กด์ฌ๋ ์๋ ์์์ด ํด๋น ์์ ์ ๋ณ๊ฒฝ๋๊ฑฐ๋ ์กด์ฌํ์ง ์๊ฒ ๋ ๊ฒ์์ ์์ํ์ง ์์ต๋๋ค.
Expires ํ๋ ๊ฐ์ HTTP-date ํ์์คํฌํ์ ๋๋ค(์ ์: ์น์ 5.6.7). ์บ์์ ํนํ๋ ๊ตฌ๋ฌธ ๋ถ์ ์๊ตฌ์ฌํญ์ ๋ํ ์น์ 4.2๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
์:
Expires: Thu, 01 Dec 1994 16:00:00 GMT
์บ์ ์์ ์๋ ํนํ ๊ฐ "0"์ ํฌํจํ ์๋ชป๋ ๋ ์ง ํ์์ ๊ณผ๊ฑฐ์ ์๊ฐ(์ฆ, ์ด๋ฏธ ๋ง๋ฃ๋ ๊ฒ์ผ๋ก)์ผ๋ก ํด์ํด์ผ ํฉ๋๋ค(MUST).
์๋ต์ Cache-Control ํค๋ ํ๋๊ฐ ์๊ณ ๊ทธ ์์ max-age ์ง์์ด(์น์ 5.2.2.1)๊ฐ ํฌํจ๋์ด ์์ผ๋ฉด, ์์ ์๋ Expires ํค๋ ํ๋๋ฅผ ๋ฌด์ํด์ผ ํฉ๋๋ค(MUST). ๋ง์ฐฌ๊ฐ์ง๋ก ์๋ต์ s-maxage ์ง์์ด(์น์ 5.2.2.10)๊ฐ ํฌํจ๋์ด ์์ผ๋ฉด, ๊ณต์ ์บ์ ์์ ์๋ Expires ํค๋ ํ๋๋ฅผ ๋ฌด์ํด์ผ ํฉ๋๋ค(MUST). ์ด ๋ ๊ฒฝ์ฐ ๋ชจ๋ Expires์ ๊ฐ์ Cache-Control ํค๋ ํ๋๋ฅผ ์์ง ๊ตฌํํ์ง ์์ ์์ ์๋ฅผ ์ํ ๊ฒ์ ๋๋ค.
์๊ณ๊ฐ ์๋ ์์ ์๋ฒ๋(์ ์: ์น์ 5.6.7) Expires ํค๋ ํ๋๋ฅผ ์์ฑํด์๋ ์ ๋ฉ๋๋ค(MUST NOT), ๋จ ๊ทธ ๊ฐ์ด ๊ณผ๊ฑฐ์ ๊ณ ์ ์๊ฐ(ํญ์ ๋ง๋ฃ๋จ)์ ๋ํ๋ด๊ฑฐ๋ ๊ทธ ๊ฐ์ด ์๊ณ๋ฅผ ๊ฐ์ง ์์คํ ์ ์ํด ์์๊ณผ ์ฐ๊ด๋์์ ๋๋ ์์ธ์ ๋๋ค.
์ญ์ฌ์ ์ผ๋ก HTTP๋ Expires ํ๋ ๊ฐ์ด ๋ฏธ๋๋ก ์ต๋ 1๋ ์ ์ด๊ณผํ์ง ์๋๋ก ์๊ตฌํ์ต๋๋ค. ๋ ๊ธด ์ ์ ๋ ์๋ช ์ด ๋ ์ด์ ๊ธ์ง๋์ง๋ ์์ง๋ง, ๋งค์ฐ ํฐ ๊ฐ์ ๋ฌธ์ (์: ์๊ฐ ๊ฐ์ ๋ํด 32๋นํธ ์ ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์๊ณ ์ค๋ฒํ๋ก)๋ฅผ ์ผ์ผํค๋ ๊ฒ์ผ๋ก ์ ์ฆ๋์๊ณ , ๋ง์ ์บ์๋ ํจ์ฌ ๋ ๋นจ๋ฆฌ ์๋ต์ ์ถ์ถํ ๊ฒ์ ๋๋ค.
5.4. Pragma
"Pragma" ์์ฒญ ํค๋ ํ๋๋ HTTP/1.0 ์บ์๋ฅผ ์ํด ์ ์๋์์ผ๋ฉฐ, ๋น์์๋ Cache-Control์ด HTTP/1.1๊น์ง ์ ์๋์ง ์์์ผ๋ฏ๋ก ํด๋ผ์ด์ธํธ๊ฐ "no-cache" ์์ฒญ์ ์ง์ ํ ์ ์๊ฒ ํ์ต๋๋ค.
๊ทธ๋ฌ๋ ํ์ฌ๋ Cache-Control์ ์ง์์ด ๋๋ฆฌ ํผ์ ธ ์์ต๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ์ด ๋ช ์ธ์๋ Pragma๋ฅผ ์ฌ์ฉ ์ค๋จ(deprecate)ํฉ๋๋ค.
5.5. Warning
"Warning" ํค๋ ํ๋๋ ์ํ ์ฝ๋์ ๋ฐ์๋์ง ์์ ์ ์๋ ๋ฉ์์ง์ ์ํ ๋๋ ๋ณํ์ ๋ํ ์ถ๊ฐ ์ ๋ณด๋ฅผ ์ ๋ฌํ๋ ๋ฐ ์ฌ์ฉ๋์์ต๋๋ค. ์ด ๋ช ์ธ์๋ Warning์ ๋๋ฆฌ ์์ฑ๋๊ฑฐ๋ ์ฌ์ฉ์์๊ฒ ๋ ธ์ถ๋์ง ์์ผ๋ฏ๋ก ํ์งํฉ๋๋ค. Warning์ด ์ ๋ฌํ๋ ์ ๋ณด๋ Age์ ๊ฐ์ ๋ค๋ฅธ ํค๋ ํ๋๋ฅผ ๊ฒ์ฌํจ์ผ๋ก์จ ์ป์ ์ ์์ต๋๋ค.
6. ์ ํ๋ฆฌ์ผ์ด์ ๋ฐ ๋ค๋ฅธ ์บ์์์ ๊ด๊ณ
HTTP๋ฅผ ์ฌ์ฉํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ข ์ข ์ถ๊ฐ์ ์ธ ํํ์ ์บ์ฑ์ ๋ช ์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์น ๋ธ๋ผ์ฐ์ ๋ ์ธ์ ์ค ์ด์ ์ ๊ฐ์ ธ์จ ํํ์ ๋ค์ ํ์ํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ "๋ค๋ก" ๋ฒํผ๊ณผ ๊ฐ์ ํ์คํ ๋ฆฌ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก ์ผ๋ถ ์น ๋ธ๋ผ์ฐ์ ๋ ํ์ด์ง ๋ทฐ ๋ด์์ ์ด๋ฏธ์ง ๋ฐ ๊ธฐํ ์์ฐ์ ์บ์ํ๋๋ก ๊ตฌํํ๋๋ฐ, ์ด๋ค์ HTTP ์บ์ฑ ์๋ฏธ๋ก ์ ์ค์ํ ์๋ ์๊ณ ๊ทธ๋ ์ง ์์ ์๋ ์์ต๋๋ค.
์ด ๋ช ์ธ์์ ์๊ตฌ์ฌํญ์ ๋ฐ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ด HTTP ์บ์์์ ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๋ฅผ ์ดํ์ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง์ ์ ์ฉ๋๋ ๊ฒ์ ์๋๋๋ค. ์๋ฅผ ๋ค์ด, ํ์คํ ๋ฆฌ ๋ฉ์ปค๋์ฆ์ ๋ง๋ฃ๋ ์ด์ ํํ์ ํ์ํ ์ ์๊ณ , ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ ๋ ์๋ช ์ด ์ง๋ ์บ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ด ๋ช ์ธ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด HTTP ์บ์ฑ์ ๊ณ ๋ คํ๋ ๊ฒ์ ๊ธ์งํ์ง ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ํ์คํ ๋ฆฌ ๋ฉ์ปค๋์ฆ์ ๋ณด๊ธฐ(View)๊ฐ ์ค๋๋์์์ ์ฌ์ฉ์์๊ฒ ์๋ฆฌ๊ฑฐ๋ ์บ์ ์ง์์ด(e.g., Cache-Control: no-store)๋ฅผ ์กด์คํ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ฐ์ดํฐ๋ฅผ ์บ์ํ๊ณ ์ด๋ฅผ ์ฌ์ฉ์์๊ฒ ๋ช ํํ ์๋ฆฌ๊ฑฐ๋ ์ฌ์ฉ์๊ฐ ์ฝ๊ฒ ์ ์ดํ ์ ์๊ฒ ๋ง๋ค ๊ฒฝ์ฐ, ์บ์ฑ ์๋ฏธ๋ก ์ด ์กด์ค๋ ๊ฒ์ด๋ผ๊ณ ๊ธฐ๋ํ๋ ์์ฑ์๋ค์ ๋๋ผ๊ฒ ํ์ง ์๋๋ก HTTP ์บ์ ์ง์์ด์ ๊ด๋ จํ์ฌ ๊ทธ ๋์์ ์ ์ํ๋ ๊ฒ์ด ๊ฐ๋ ฅํ ๊ถ์ฅ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, Cache-Control: no-store๋ฅผ ํฌํจํ ์๋ต์ ๋์ผํ ํ์ด์ง ๋ก๋ ์ค์ ์์ฑ๋ ์์ฒญ๊ณผ ๊ฐ์ด ๊ทธ ์๋ต์ ๊ฐ์ ธ์จ ์์ฒญ๊ณผ ์ง์ ๊ด๋ จ๋ ์์ฒญ์ ํํด ์ฌ์ฌ์ฉํ๋๋ก ํ์ฉํ๋ "HTTP ์์" ์ ํ๋ฆฌ์ผ์ด์ ์บ์๋ฅผ ์ ์ํ๋ ๊ฒ์ ํฉ๋ฆฌ์ ์ผ ์ ์์ง๋ง, ์ ํ ๊ด๋ จ์ด ์๋ ๋ค๋ฅธ ์์ฒญ์ ๋ํด ์ฌ์ฌ์ฉ์ ํ์ฉํ๋ค๋ฉด ์ฌ์ฉ์์ ์์ฑ์์๊ฒ ๋๋๊ณ ํผ๋์ค๋ฌ์ธ ๊ฒ์ ๋๋ค.
7. ๋ณด์ ๊ณ ๋ ค์ฌํญ
์ด ์ ์ ๊ฐ๋ฐ์, ์ ๋ณด ์ ๊ณต์ ๋ฐ ์ฌ์ฉ์์๊ฒ HTTP ์บ์ฑ๊ณผ ๊ด๋ จ๋ ์๋ ค์ง ๋ณด์ ๋ฌธ์ ๋ฅผ ์๋ฆฌ๊ธฐ ์ํ ๊ฒ์ ๋๋ค. ๋ณด๋ค ์ผ๋ฐ์ ์ธ ๋ณด์ ๊ณ ๋ ค์ฌํญ์ "HTTP/1.1"(Section 11 of [HTTP/1.1]) ๋ฐ "HTTP Semantics"(Section 17 of [HTTP])์์ ๋ค๋ฃน๋๋ค.
์บ์๋ ์บ์์ ๋ด์ฉ์ด ์ ์์ ์ธ ์ฐฉ์ทจ์ ๋งค๋ ฅ์ ์ธ ํ์ ์ด ๋๊ธฐ ๋๋ฌธ์ ์ถ๊ฐ์ ์ธ ๊ณต๊ฒฉ ํ๋ฉด์ ๋ ธ์ถํฉ๋๋ค. ์บ์ ๋ด์ฉ์ HTTP ์์ฒญ์ด ์๋ฃ๋ ํ์๋ ์ง์๋๋ฏ๋ก, ์บ์์ ๋ํ ๊ณต๊ฒฉ์ ์ฌ์ฉ์๊ฐ ํด๋น ์ ๋ณด๊ฐ ๋คํธ์ํฌ์์ ์ ๊ฑฐ๋์๋ค๊ณ ์๊ฐํ ์ดํ์๋ ์ ๋ณด๋ฅผ ๋๋ฌ๋ผ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์บ์ ๋ด์ฉ์ ๋ฏผ๊ฐํ ์ ๋ณด๋ก์ ๋ณดํธ๋์ด์ผ ํฉ๋๋ค.
ํนํ ๊ฐ์ธ ์บ์๋ ๋จ์ผ ์ฌ์ฉ์๋ก ์ ํ๋๋ฏ๋ก ์ฌ์ฉ์์ ํ๋์ ์ฌ๊ตฌ์ฑํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ์ฌ์ฉ์ ์์ด์ ํธ๋ ์ฌ์ฉ์๊ฐ ์ด๋ฅผ ์ ์ดํ ์ ์๋๋ก(์: ์ผ๋ถ ๋๋ ๋ชจ๋ ์ค๋ฆฌ์ง ์๋ฒ์ ๋ํด ์ ์ฅ๋ ์๋ต์ ์ ๊ฑฐํ ์ ์๋๋ก) ํ์ฉํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
7.1. ์บ์ ์ค๋
์บ์์ ์ ์์ ์ธ ์ฝํ ์ธ ๋ฅผ ์ ์ฅํ๋ฉด ๊ณต๊ฒฉ์๊ฐ ์ฌ๋ฌ ์ฌ์ฉ์์๊ฒ ์ํฅ์ ๋ฏธ์น๋๋ก ๋ฒ์๋ฅผ ํ์ฅํ ์ ์์ต๋๋ค. ์ด๋ฌํ "์บ์ ์ค๋ " ๊ณต๊ฒฉ์ ๊ณต๊ฒฉ์๊ฐ ๊ตฌํ ๊ฒฐํจ, ๊ถํ ์์น ๋๋ ๋ค๋ฅธ ๊ธฐ๋ฒ์ ์ฌ์ฉํ์ฌ ์๋ต์ ์บ์์ ์ฝ์ ํ ๋ ๋ฐ์ํฉ๋๋ค. ๊ณต์ ์บ์๊ฐ ๋ง์ ํด๋ผ์ด์ธํธ์๊ฒ ์ ์์ ์ฝํ ์ธ ๋ฅผ ๋ฐฐํฌํ๋ ๋ฐ ์ฌ์ฉ๋ ๋ ํนํ ํจ๊ณผ์ ์ ๋๋ค.
์บ์ ์ค๋ ์ ์ผ๋ฐ์ ์ธ ๊ณต๊ฒฉ ๋ฒกํฐ ์ค ํ๋๋ ํ๋ก์์ ์ฌ์ฉ์ ์์ด์ ํธ์์์ ๋ฉ์์ง ๊ตฌ๋ฌธ ๋ถ์ ์ฐจ์ด๋ฅผ ์ ์ฉํ๋ ๊ฒ์ ๋๋ค; ๊ด๋ จ ์๊ตฌ์ฌํญ์ HTTP/1.1์ ๊ดํ Section 6.3๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
7.2. ํ์ด๋ฐ ๊ณต๊ฒฉ
์บ์์ ์ฃผ์ ์ฌ์ฉ ๋ชฉ์ ์ค ํ๋๊ฐ ์ฑ๋ฅ ์ต์ ํ์ด๊ธฐ ๋๋ฌธ์, ์บ์ ์ฌ์ฉ์ ์ด์ ์ ์ด๋ค ๋ฆฌ์์ค๊ฐ ์์ฒญ๋์๋์ง์ ๋ํ ์ ๋ณด๋ฅผ "์ ์ถ"์ํฌ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ์ฌ์ฉ์๊ฐ ์ด๋ค ์ฌ์ดํธ๋ฅผ ๋ฐฉ๋ฌธํ์ฌ ๋ธ๋ผ์ฐ์ ๊ฐ ๊ทธ ์๋ต๋ค์ ์บ์ํ๊ณ ๋์ ๋ ๋ฒ์งธ ์ฌ์ดํธ๋ก ์ด๋ํ ๊ฒฝ์ฐ, ๊ทธ ๋ ๋ฒ์งธ ์ฌ์ดํธ๋ ์ฒซ ๋ฒ์งธ ์ฌ์ดํธ์ ์กด์ฌํ๋ ๊ฒ์ ์๋ฉด์ ์๋ต์ ๋ก๋ํ๋ ค ์๋ํ ์ ์์ต๋๋ค. ์๋ต์ด ๋น ๋ฅด๊ฒ ๋ก๋๋๋ฉด ์ฌ์ฉ์๊ฐ ํด๋น ์ฌ์ดํธ ๋๋ ํน์ ํ์ด์ง๋ฅผ ๋ฐฉ๋ฌธํ ๊ฒ์ผ๋ก ์ถ์ ํ ์ ์์ต๋๋ค.
์ด๋ฌํ "ํ์ด๋ฐ ๊ณต๊ฒฉ"์ ์บ์ ํค์ ์ฐธ์กฐ ์ฌ์ดํธ์ ์ ์ฒด์ฑ๊ณผ ๊ฐ์ ์ถ๊ฐ ์ ๋ณด๋ฅผ ์ถ๊ฐํ์ฌ ์ํํ ์ ์์ต๋๋ค(์์์ ์ค๋ช ํ ๊ณต๊ฒฉ์ ๋ฐฉ์งํ๊ธฐ ์ํด). ์ด๋ฅผ ๋๋๋ก "์ด์ค ํคํ(double keying)"๋ผ๊ณ ํฉ๋๋ค.
7.3. ๋ฏผ๊ฐํ ์ ๋ณด์ ์บ์ฑ
๊ตฌํ ๋ฐ ๋ฐฐํฌ์์ ๊ฒฐํจ(์ข ์ข ์บ์ ๋์์ ์คํด์์ ๋น๋กฏ๋จ)์ ๋ฏผ๊ฐํ ์ ๋ณด(์: ์ธ์ฆ ์๊ฒฉ ์ฆ๋ช )์ ์บ์ฑ์ผ๋ก ์ด์ด์ง ์ ์์ผ๋ฉฐ, ์ด๋ ์๋ ๋น๊ณต๊ฐ๋ก ๊ฐ์ฃผ๋๋ ์ ๋ณด๋ฅผ ๋ฌด๋จ ๋น์ฌ์์๊ฒ ๋ ธ์ถ์ํฌ ์ ์์ต๋๋ค.
Set-Cookie ์๋ต ํค๋ ํ๋([COOKIE])๊ฐ ์บ์ฑ์ ์ฐจ๋จํ์ง ์๋๋ค๋ ์ ์ ์ ์ํ์ญ์์ค; Set-Cookie๋ฅผ ๊ฐ์ง ์บ์ ๊ฐ๋ฅ ์๋ต์ ์ดํ์ ์์ฒญ์ ๋ง์กฑ์ํค๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค. ์ด๋ฌํ ์๋ต์ ์บ์ฑ์ ์ ์ดํ๋ ค๋ ์๋ฒ๋ ์ ์ ํ Cache-Control ์๋ต ํค๋ ํ๋๋ฅผ ๋ด๋ณด๋ด๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค.
8. IANA ๊ณ ๋ ค์ฌํญ
๋ค์ ๋ฑ๋ก์ ๋ํ ๋ณ๊ฒฝ ๊ด๋ฆฌ์๋ "IETF (iesg@ietf.org) - Internet Engineering Task Force"์ ๋๋ค.
8.1. ํ๋ ์ด๋ฆ ๋ฑ๋ก
IANA๋ "Hypertext Transfer Protocol (HTTP) Field Name Registry"๋ฅผ ์ ๋ฐ์ดํธํ์ผ๋ฉฐ, ์ด๋ Section 18.4 of [HTTP]์ ์ค๋ช ๋ ๋๋ก์ด๋ฉฐ, ์๋ ํ์ ๋์ด๋ ํ๋ ์ด๋ฆ๋ค์ ํฌํจํฉ๋๋ค:
8.2. ์บ์ ์ง์์ด ๋ฑ๋ก
IANA๋ "Hypertext Transfer Protocol (HTTP) Cache Directive Registry"๋ฅผ ์ ๋ฐ์ดํธํ์ผ๋ฉฐ, ์ด๋ ์น์ 5.2.4์ ๋ฐ๋ฅธ ๋ฑ๋ก ์ ์ฐจ์ ์๋ ํ์ ์์ฝ๋ ์บ์ ์ง์์ด ์ด๋ฆ๋ค์ ํฌํจํฉ๋๋ค.
| ์บ์ ์ง์์ด | ์น์ |
|---|---|
| max-age | 5.2.1.1, 5.2.2.1 |
| max-stale | 5.2.1.2 |
| min-fresh | 5.2.1.3 |
| must-revalidate | 5.2.2.2 |
| must-understand | 5.2.2.3 |
| no-cache | 5.2.1.4, 5.2.2.4 |
| no-store | 5.2.1.5, 5.2.2.5 |
| no-transform | 5.2.1.6, 5.2.2.6 |
| only-if-cached | 5.2.1.7 |
| private | 5.2.2.7 |
| proxy-revalidate | 5.2.2.8 |
| public | 5.2.2.9 |
| s-maxage | 5.2.2.10 |
8.3. Warn ์ฝ๋ ๋ ์ง์คํธ๋ฆฌ
IANA๋ "Hypertext Transfer Protocol (HTTP) Warn Codes" ๋ ์ง์คํธ๋ฆฌ์ ๋ค์ ์ฃผ์์ ์ถ๊ฐํ์ผ๋ฉฐ, Warning์ด ํ์ง๋์๋ค๊ณ ๋ช ์ํ์ต๋๋ค:
The Warning header field (and the warn codes that it uses) has been obsoleted for HTTP per [RFC9111].
9. ์ฐธ๊ณ ๋ฌธํ
9.1. ๊ท๋ฒ์ ์ฐธ๊ณ ๋ฌธํ
- [HTTP]
- Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, Ed., โHTTP Semanticsโ, STD 97, RFC 9110, DOI 10.17487/RFC9110, June 2022.
- [RFC2119]
- Bradner, S., โKey words for use in RFCs to Indicate Requirement Levelsโ, BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997, <https://www.rfc-editor.org/info/rfc2119>.
- [RFC5234]
- Crocker, D., Ed. and P. Overell, โAugmented BNF for Syntax Specifications: ABNFโ, STD 68, RFC 5234, DOI 10.17487/RFC5234, January 2008, <https://www.rfc-editor.org/info/rfc5234>.
- [RFC7405]
- Kyzivat, P., โCase-Sensitive String Support in ABNFโ, RFC 7405, DOI 10.17487/RFC7405, December 2014, <https://www.rfc-editor.org/info/rfc7405>.
- [RFC8174]
- Leiba, B., โAmbiguity of Uppercase vs Lowercase in RFC 2119 Key Wordsโ, BCP 14, RFC 8174, DOI 10.17487/RFC8174, May 2017, <https://www.rfc-editor.org/info/rfc8174>.
9.2. ์ ๋ณด์ฑ ์ฐธ๊ณ ๋ฌธํ
- [COOKIE]
- Barth, A., โHTTP State Management Mechanismโ, RFC 6265, DOI 10.17487/RFC6265, April 2011, <https://www.rfc-editor.org/info/rfc6265>.
- [HTTP/1.1]
- Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, Ed., โHTTP/1.1โ, STD 99, RFC 9112, DOI 10.17487/RFC9112, June 2022.
- [RFC2616]
- Fielding, R., Gettys, J., Mogul, J., Frystyk, H., Masinter, L., Leach, P., and T. Berners-Lee, โHypertext Transfer Protocol -- HTTP/1.1โ, RFC 2616, DOI 10.17487/RFC2616, June 1999, <https://www.rfc-editor.org/info/rfc2616>.
- [RFC5861]
- Nottingham, M., โHTTP Cache-Control Extensions for Stale Contentโ, RFC 5861, DOI 10.17487/RFC5861, May 2010, <https://www.rfc-editor.org/info/rfc5861>.
- [RFC7234]
- Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke, Ed., โHypertext Transfer Protocol (HTTP/1.1): Cachingโ, RFC 7234, DOI 10.17487/RFC7234, June 2014, <https://www.rfc-editor.org/info/rfc7234>.
- [RFC8126]
- Cotton, M., Leiba, B., and T. Narten, โGuidelines for Writing an IANA Considerations Section in RFCsโ, BCP 26, RFC 8126, DOI 10.17487/RFC8126, June 2017, <https://www.rfc-editor.org/info/rfc8126>.
๋ถ๋ก A. ์์ง๋ ABNF
์๋์ ์์ง๋ ABNF์์, ๋ชฉ๋ก ๊ท์น์ Section 5.6.1 of HTTP์ ๋ฐ๋ผ ํ์ฅ๋์ด ์์ต๋๋ค.
Age = delta-seconds Cache-Control = [ cache-directive *( OWS "," OWS cache-directive ) ] Expires = HTTP-date HTTP-date = <HTTP-date, see [HTTP], Section 5.6.7> OWS = <OWS, see [HTTP], Section 5.6.3> cache-directive = token [ "=" ( token / quoted-string ) ] delta-seconds = 1*DIGIT field-name = <field-name, see [HTTP], Section 5.1> quoted-string = <quoted-string, see [HTTP], Section 5.6.4> token = <token, see [HTTP], Section 5.6.2>
๋ถ๋ก B. RFC 7234๋ก๋ถํฐ์ ๋ณ๊ฒฝ ์ฌํญ
์ค๋ณต๋๊ฑฐ๋ ์์ถฉํ๋ ์บ์ ์ง์์ด์ ์ฒ๋ฆฌ ๋ฐฉ์์ด ๋ช ํํด์ก์ต๋๋ค. (Section 4.2.1)
Location ๋ฐ Content-Location ํค๋ ํ๋์ ์๋ URI๋ค์ ์บ์ ๋ฌดํจํ๋ ๋ ์ด์ ํ์๋ ์๋์ง๋ง ์ฌ์ ํ ํ์ฉ๋ฉ๋๋ค. (Section 4.4)
Location ๋ฐ Content-Location ํค๋ ํ๋์ ์๋ URI๋ค์ ์บ์ ๋ฌดํจํ๋ ์์ (origin)์ด ๋ค๋ฅธ ๊ฒฝ์ฐ ํ์ฉ๋์ง ์์ต๋๋ค; ์ด์ ์๋ ํธ์คํธ(host) ๊ธฐ๋ฐ์ด์์ต๋๋ค. (Section 4.4)
์๋ชป๋์๊ฑฐ๋ ์ฌ๋ฌ ๊ฐ์ Age ํค๋ ํ๋ ๊ฐ ์ฒ๋ฆฌ ๋ฐฉ์์ด ๋ช ํํด์ก์ต๋๋ค. (Section 5.1)
์ด ๋ช ์ธ์์์ ์ ์ํ ์ผ๋ถ ์บ์ ์ง์์ด๋ ๊ฐ์ ์ธ์ฉํ(quoted form)์ ์์ฑํ๋ ๊ฒ์ ๋ํด ๋ ๊ฐํ ๊ธ์ง๋ฅผ ๊ฐ๊ฒ ๋์๋๋ฐ, ์ด๋ ์ํธ์ด์ฉ์ฑ ๋ฌธ์ ๋ฅผ ์ผ์ผํค๋ ๊ฒ์ผ๋ก ๋ฐํ์ก๊ธฐ ๋๋ฌธ์ ๋๋ค. ํ์ฅ ์บ์ ์ง์์ด์ ์๋น์๋ ๋ ์ด์ ํ ํฐ๊ณผ ์ธ์ฉ ๋ฌธ์์ด ํ์์ ๋ ๋ค๋ฅผ ์์ฉํด์ผ ํ ํ์๋ ์์ง๋ง, ์๋ ค์ง์ง ์์ ํ์ฅ์ ๊ฒฝ์ฐ์๋ ์ ์ ํ ๊ตฌ๋ฌธ ๋ถ์ํ ํ์๋ ์ฌ์ ํ ์์ต๋๋ค. (Section 5.2)
public ๋ฐ private ์บ์ ์ง์์ด๊ฐ ๋ช ํํด์ ธ์, ์ด๋ค์ด ์ด๋ค ์กฐ๊ฑด์์๋ ์๋ต์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ๊ฒ ๋ง๋ค์ง ์์์ ๋ถ๋ช ํ ํ์ต๋๋ค. (Section 5.2.2)
must-understand ์บ์ ์ง์์ด๊ฐ ๋์ ๋์์ต๋๋ค; ์ด ์ง์์ด๊ฐ ์์ผ๋ฉด ์บ์๋ ์ ์๋ต ์ํ ์ฝ๋์ ์๋ฏธ๋ฅผ ์ดํดํด์ผ ํ ์๋ฌด๊ฐ ๋ ์ด์ ์์ต๋๋ค. (Section 5.2.2.3)
Warning ์๋ต ํค๋๊ฐ ํ์ง๋์์ต๋๋ค. Warning์ด ์ง์ํ๋ ์ ๋ณด์ ๋๋ถ๋ถ์ ์๋ต์ ๊ฒ์ฌํจ์ผ๋ก์จ ์ป์ ์ ์๊ณ , ๋จ์ ์ ๋ณด๋ ์ ์ ์ผ๋ก ๊ณ ์ง์ (advisory)์ด์์ผ๋ฉฐ ์ค์ ๋ก ์บ์๋ ์ค๊ฐ์์ ์ํด ๋๋ฆฌ ์ถ๊ฐ๋์ง ์์์ต๋๋ค. (Section 5.5)
๊ฐ์ฌ์ ๊ธ
Appendix "Acknowledgements" of HTTP๋ฅผ ์ฐธ์กฐํ์ญ์์ค. ํด๋น ๋ด์ฉ์ ์ด ๋ฌธ์์๋ ์ ์ฉ๋ฉ๋๋ค.
์์ธ
- A
- C
- E
- F
- G
- H
- Header Fields
- heuristic expiration time 4.2
- heuristically cacheable 4.2.2
- HTTP 1, 1.1, 1.2, 1.2.1, 1.2.1, 1.2.1, 1.2.1, 1.2.1, 1.2.1, 2, 2, 3, 3, 3.1, 3.1, 3.1, 3.1, 3.1, 3.3, 3.3, 3.4, 3.4, 3.5, 4, 4, 4, 4.1, 4.1, 4.2.1, 4.2.2, 4.2.2,
4.2.3, 4.2.3, 4.3, 4.3.1, 4.3.1, 4.3.2,
4.3.2, 4.3.2, 4.3.2, 4.3.2,
4.3.4, 4.4, 4.4, 4.4, 4.4, 5.2.1.6,
5.2.2.2, 5.2.2.6, 5.3,
5.3, 7, 8.1, 9.1, A, A, A, A, A, A, "Acknowledgements"
- Section 2 1.1
- Section 3 2
- Section 3.7 1
- Section 4.3.1 4.4
- Section 5.1 1.2.1
- Section 5.2 4.1
- Section 5.6.1 1.2, A
- Section 5.6.2 1.2.1
- Section 5.6.3 1.2.1
- Section 5.6.4 1.2.1
- Section 5.6.7 1.2.1, 4, 4.2.3, 5.3, 5.3
- Section 6.1 3.3
- Section 6.6.1 4.2.1, 4.2.3
- Section 7.1 4, 4.4, 4.4
- Section 7.6.1 3.1, 3.1
- Section 7.7 5.2.1.6, 5.2.2.6
- Section 8.8.1 4.3.4
- Section 8.8.2 4.2.2, 4.3.1
- Section 8.8.3 4.3.1
- Section 9.2.1 4, 4.4
- Section 9.3.1 2
- Section 11.6.2 3, 3.5, 5.2.2.2
- Section 11.7.1 3.1
- Section 11.7.2 3.1
- Section 11.7.3 3.1
- Section 12.5.5 4.1
- Section 13 4.3
- Section 13.1.2 4.3.2
- Section 13.1.3 4.3.2
- Section 13.1.5 4.3.2
- Section 13.2.2 4.3.2
- Section 14.2 3.3, 3.4, 4.3.2
- Section 15 3
- Section 15.1 4.2.2
- Section 15.3.7.3 3.4
- Section 17 7
- Section 18.4 8.1
- Acknowledgements "Acknowledgements"
- HTTP/1.1 7, 7.1, 9.2
- M
- N
- O
- only-if-cached (cache directive) 5.2.1.7
- P
- R
- S
- V
- validator 4.3.1
- W