Skip to content

Latest commit

History

History
1135 lines (847 loc) 路 68.4 KB

http_cache.rst

File metadata and controls

1135 lines (847 loc) 路 68.4 KB

single: 袣褝褕懈褉芯胁邪薪懈械

HTTP 袣褝褕懈褉芯胁邪薪懈械

袩褉懈褉芯写邪 薪邪褋褘褖械薪薪褘褏 (斜芯谐邪褌褘褏) 胁械斜-锌褉懈谢芯卸械薪懈泄 锌芯写褉邪蟹褍屑械胁邪械褌, 褔褌芯 芯薪懈 写懈薪邪屑懈褔械褋泻懈械. 袙薪械 蟹邪胁懈褋懈屑芯褋褌懈 芯褌 褌芯谐芯, 薪邪褋泻芯谢褜泻芯 褝褎褎械泻褌懈胁薪芯 胁邪褕械 锌褉懈谢芯卸械薪懈械, 泻邪卸写褘泄 蟹邪锌褉芯褋 斜褍写械褌 褋芯写械褉卸邪褌褜 褉邪斜芯褌褘 斜芯谢褜褕械 褔械屑 芯褌写邪褔邪 锌褉芯褋褌芯谐芯 褋褌邪褌懈褔械褋泻芯谐芯 褎邪泄谢邪.

袠 写谢褟 斜芯谢褜褕懈薪褋褌胁邪 胁械斜-锌褉懈谢芯卸械薪懈泄 褝褌芯 胁锌芯谢薪械 薪芯褉屑邪谢褜薪芯. Symfony2 芯褔械薪褜 斜褘褋褌褉 懈, 械褋谢懈 胁褘 薪械 写械谢邪械褌械 褔械谐芯-褌芯 写械泄褋褌胁懈褌械谢褜薪芯 褌褟卸械谢芯胁械褋薪芯谐芯, 泻邪卸写褘泄 蟹邪锌褉芯褋 斜褍写械褌 芯斜褉邪斜邪褌褘胁邪褌褜褋褟 斜褘褋褌褉芯 懈 薪械 褋芯蟹写邪胁邪褟 褋褌褉械褋褋芯胁褘褏 褋懈褌褍邪褑懈泄 薪邪 褋械褉胁械褉械.

袧芯, 锌芯 屑械褉械 褉芯褋褌邪 胁邪褕械谐芯 褋邪泄褌邪, 褉芯褋褌 薪邪谐褉褍蟹泻懈 屑芯卸械褌 褋褌邪褌褜 锌褉芯斜谢械屑芯泄. 袪邪斜芯褌邪, 泻芯褌芯褉邪褟 芯斜褘褔薪芯 胁褘锌芯谢薪褟械褌褋褟 写谢褟 泻邪卸写芯谐芯 蟹邪锌褉芯褋邪, 褌械锌械褉褜 写芯谢卸薪邪 斜褘褌褜 胁褘锌芯谢薪械薪邪 褌芯谢褜泻芯 械写懈薪芯卸写褘. 袠 褝褌芯 懈屑械薪薪芯 褌芯, 褔械谐芯 锌芯蟹胁芯谢褟械褌 写芯斜懈褌褜褋褟 泻褝褕懈褉芯胁邪薪懈械.

袣褝褕懈褉芯胁邪薪懈械 薪邪 锌谢械褔邪褏 谐懈谐邪薪褌芯胁

袧邪懈斜芯谢械械 褝褎褎械泻褌懈胁薪褘屑 褋锌芯褋芯斜芯屑 褍胁械谢懈褔懈褌褜 斜褘褋褌褉芯写械泄褋褌胁懈械 锌褉懈谢芯卸械薪懈褟 褟胁谢褟械褌褋褟 泻褝褕懈褉芯胁邪薪懈械 褋褌褉邪薪懈褑褘 褑械谢懈泻芯屑 懈 蟹邪褌械屑, 胁 芯斜褏芯写 锌褉懈谢芯卸械薪懈褟, 芯褌写邪胁邪褌褜 泻褝褕懈褉芯胁邪薪薪褘械 写邪薪薪褘械 写谢褟 泻邪卸写芯谐芯 蟹邪锌褉芯褋邪. 袣芯薪械褔薪芯 卸械, 褝褌芯 薪械 胁褋械谐写邪 胁芯蟹屑芯卸薪芯 锌褉懈屑械薪懈褌褜, 芯褋芯斜械薪薪芯 写谢褟 芯褔械薪褜 写懈薪邪屑懈褔薪芯 屑械薪褟褞褖懈褏褋褟 褋邪泄褌芯胁... 懈谢懈 胁褋褢 卸械 胁芯蟹屑芯卸薪芯? 袙 褝褌芯泄 谐谢邪胁械 胁褘 褍胁懈写懈褌械, 泻邪泻 褉邪斜芯褌邪械褌 褋懈褋褌械屑邪 泻褝褕懈褉芯胁邪薪懈褟 Symfony2 懈 锌芯褔械屑褍 屑褘 褋褔懈褌邪械屑 褝褌芯 薪邪懈谢褍褔褕懈屑 褉械褕械薪懈械屑 懈蟹 胁芯蟹屑芯卸薪褘褏.

小懈褋褌械屑邪 泻褝褕懈褉芯胁邪薪懈褟 Symfony2 芯褌谢懈褔邪械褌褋褟 芯褌 写褉褍谐懈褏, 褌邪泻 泻邪泻 芯薪邪 锌芯谢邪谐邪械褌褋褟 薪邪 锌褉芯褋褌芯褌褍 懈 屑芯褖褜 HTTP 泻褝褕懈褉芯胁邪薪懈褟, 泻邪泻 褝褌芯 芯锌褉械写械谢械薪芯 胁 褋锌械褑懈褎懈泻邪褑懈懈 HTTP (褋屑. 小锌械褑懈褎懈泻邪褑懈褟 锌褉芯褌芯泻芯谢邪 HTTP). 袙屑械褋褌芯 褌芯谐芯 褔褌芯斜褘 懈蟹芯斜褉械褌邪褌褜 泻褝褕懈褉芯胁邪薪懈械 蟹邪薪芯胁芯, Symfony2 锌芯谢褜蟹褍械褌褋褟 褋褌邪薪写邪褉褌芯屑, 泻芯褌芯褉褘泄 芯锌褉械写械谢褟械褌 斜邪蟹芯胁褘械 泻芯屑屑褍薪懈泻邪褑懈懈 胁 Web. 袣邪泻 褌芯谢褜泻芯 胁褘 锌芯泄屑褢褌械 芯褋薪芯胁芯锌芯谢邪谐邪褞褖懈械 屑芯写械谢懈 HTTP 胁邪谢懈写邪褑懈懈 懈 懈褋褌械褔械薪懈褟 褋褉芯泻邪 写谢褟 泻褝褕邪, 胁褘 斜褍写械褌械 谐芯褌芯胁褘 泻 褍锌褉邪胁谢械薪懈褞 褋懈褋褌械屑芯泄 泻褝褕懈褉芯胁邪薪懈褟 Symfony2.

小 褑械谢褜褞 懈蟹褍褔械薪懈褟 褌芯谐芯, 泻邪泻 泻褝褕懈褉芯胁邪褌褜 胁 Symfony2, 屑褘 锌褉芯泄写褢屑 褔械褌褘褉械 褕邪谐邪:

  • 楔邪谐 1: 泻褝褕懈褉褍褞褖懈泄 褕谢褞蟹 <gateway-caches>, 懈谢懈 芯斜褉邪褌薪褘泄 锌褉芯泻褋懈-褋械褉胁械褉 (reverse proxy), 褝褌芯 薪械蟹邪胁懈褋懈屑褘泄 褋谢芯泄, 泻芯褌芯褉褘泄 褉邪褋锌芯谢邪谐邪械褌褋褟 锌械褉械写 胁邪褕懈屑 锌褉懈谢芯卸械薪懈械屑. 袨斜褉邪褌薪褘泄 锌褉芯泻褋懈 泻褝褕懈褉褍械褌 芯褌胁械褌褘 锌芯 屑械褉械 懈褏 锌芯褋褌褍锌谢械薪懈褟 芯褌 锌褉懈谢芯卸械薪懈褟 懈 芯褌胁械褔邪械褌 薪邪 蟹邪锌褉芯褋褘 锌褉懈 锌芯屑芯褖懈 泻褝褕懈褉芯胁邪薪薪褘褏 芯褌胁械褌芯胁, 薪械 锌芯写泻谢褞褔邪褟 锌褉懈谢芯卸械薪懈械. Symfony2 褋芯写械褉卸懈褌 褋胁芯泄 褋芯斜褋褌胁械薪薪褘泄 芯斜褉邪褌薪褘泄 锌褉芯泻褋懈, 薪芯 胁褘 褌邪泻卸械 屑芯卸械褌械 懈褋锌芯谢褜蟹芯胁邪褌褜 谢褞斜芯泄 芯斜褉邪褌薪褘泄 锌褉芯泻褋懈 薪邪 胁邪褕 胁褘斜芯褉.
  • 楔邪谐 2: 蟹邪谐芯谢芯胁泻懈 HTTP 泻褝褕邪 <http-cache-introduction> 懈褋锌芯谢褜蟹褍褞褌褋褟 写谢褟 泻芯屑屑褍薪懈泻邪褑懈懈 泻褝褕懈褉褍褞褖械谐芯 褕谢褞蟹邪 懈 谢褞斜芯谐芯 写褉褍谐芯谐芯 泻褝褕械褉邪, 泻芯褌芯褉褘泄 屑芯卸械褌 薪邪褏芯写懈褌褜褋褟 屑械卸写褍 胁邪褕懈屑 锌褉懈谢芯卸械薪懈械屑 懈 泻谢懈械薪褌芯屑. Symfony2 褋芯写械褉卸懈褌 褌懈锌芯胁褍褞 泻芯薪褎懈谐褍褉邪褑懈褞 锌芯 褍屑芯谢褔邪薪懈褞 懈 屑芯褖薪褘泄 懈薪褌械褉褎械泄褋 写谢褟 褉邪斜芯褌褘 褋 蟹邪谐芯谢芯胁泻邪屑懈 泻褝褕邪.
  • 楔邪谐 3: 芯泻芯薪褔邪薪懈械 褋褉芯泻邪 写械泄褋褌胁懈褟 懈 胁邪谢懈写邪褑懈褟 HTTP 泻褝褕邪 <http-expiration-validation>

    - 褝褌芯 写胁械 屑芯写械谢懈, 懈褋锌芯谢褜蟹褍械屑褘械 写谢褟 芯锌褉械写械谢械薪懈褟 褟胁谢褟械褌褋褟 谢懈 泻褝褕懈褉芯胁邪薪薪褘泄 泻芯薪褌械薪褌 褋胁械卸懈屑 (懈 屑芯卸械褌 锌芯胁褌芯褉薪芯 斜褉邪褌褜褋褟 懈蟹 泻褝褕邪) 懈谢懈 卸械 锌褉芯褋褉芯褔械薪薪褘屑 (懈 械谐芯 薪械芯斜褏芯写懈屑芯 锌械褉械褋芯蟹写邪褌褜 锌褉懈 锌芯屑芯褖懈 锌褉懈谢芯卸械薪懈褟).

  • 楔邪谐 4: Edge Side Includes <edge-side-includes> (ESI) 锌芯蟹胁芯谢褟褞褌 懈褋锌芯谢褜蟹芯胁邪褌褜 HTTP 泻褝褕 写谢褟 薪械蟹邪胁懈褋懈屑芯谐芯 泻褝褕懈褉芯胁邪薪懈褟 褎褉邪谐屑械薪褌芯胁 褋褌褉邪薪懈褑 (写邪卸械 胁谢芯卸械薪薪褘褏 褎褉邪谐屑械薪褌芯胁). 袩褉懈 锌芯屑芯褖懈 ESI 胁褘 屑芯卸械褌械 泻褝褕懈褉芯胁邪褌褜 胁褋褞 褋褌褉邪薪懈褑褍 薪邪 60 屑懈薪褍褌, 薪芯 胁褋褌褉芯械薪薪褍褞 斜芯泻芯胁褍褞 锌邪薪械谢褜 谢懈褕褜 薪邪 5 屑懈薪褍褌.

孝邪泻 泻邪泻 HTTP 泻褝褕懈褉芯胁邪薪懈械 薪械 褟胁谢褟械褌褋褟 写芯褋褌芯褟薪懈械屑 谢懈褕褜 Symfony, 褋褍褖械褋褌胁褍械褌 屑薪芯卸械褋褌胁芯 褋褌邪褌械泄 锌芯 写邪薪薪芯泄 褌械屑械. 袝褋谢懈 胁褘 薪芯胁懈褔芯泻 胁 HTTP 泻褝褕懈褉芯胁邪薪懈懈, 屑褘 薪邪褋褌芯褟褌械谢褜薪芯 褉械泻芯屑械薪写褍械屑 胁邪屑 锌褉芯褔懈褌邪褌褜 褋褌邪褌褜褞 Ryan Tomayko: Things Caches Do. 袛褉褍谐懈屑 懈褋褔械褉锌褘胁邪褞褖懈屑 褉褍泻芯胁芯写褋褌胁芯屑 褟胁谢褟械褌褋褟 Cache Tutorial 芯褌 Mark Nottingham.

single: 袣褝褕懈褉芯胁邪薪懈械; 袩褉芯泻褋懈 single: 袣褝褕懈褉芯胁邪薪懈械; 袨斜褉邪褌薪褘泄 锌褉芯泻褋懈 single: 袣褝褕懈褉芯胁邪薪懈械; 楔谢褞蟹

袣褝褕懈褉芯胁邪薪懈械 锌褉懈 锌芯屑芯褖懈 泻褝褕懈褉褍褞褖械谐芯 褕谢褞蟹邪

袩褉懈 泻褝褕懈褉芯胁邪薪懈懈 锌褉懈 锌芯屑芯褖懈 HTTP, 泻褝褕 锌芯谢薪芯褋褌褜褞 芯褌写械谢褢薪 芯褌 胁邪褕械谐芯 锌褉懈谢芯卸械薪懈褟 懈 褉邪褋锌芯谢邪谐邪械褌褋褟 屑械卸写褍 胁邪褕懈屑 锌褉懈谢芯卸械薪懈械屑 懈 泻谢懈械薪褌芯屑, 胁褘锌芯谢薪懈胁褕械屑 蟹邪锌褉芯褋.

袪邪斜芯褌邪 泻褝褕邪 蟹邪泻谢褞褔邪械褌褋褟 胁 锌褉懈褢屑械 蟹邪锌褉芯褋邪 芯褌 泻谢懈械薪褌邪 懈 锌械褉械写邪褔械 械谐芯 胁邪褕械屑褍 锌褉懈谢芯卸械薪懈褞. 袣褝褕 褌邪泻卸械 斜褍写械褌 锌芯谢褍褔邪褌褜 芯褌胁械褌 芯褌 胁邪褕械谐芯 锌褉懈谢芯卸械薪懈褟 懈 锌械褉械薪邪锌褉邪胁谢褟褌褜 械谐芯 写邪谢械械 泻 泻谢懈械薪褌褍. 袣褝褕 褟胁谢褟械褌褋褟 锌芯褋褉械写薪懈泻芯屑 胁 泻谢懈械薪褌-褋械褉胁械褉薪褘褏 泻芯屑屑褍薪懈泻邪褑懈褟褏 屑械卸写褍 泻谢懈械薪褌芯屑 懈 胁邪褕懈屑 锌褉懈谢芯卸械薪懈械屑.

袩芯 锌褍褌懈, 泻褝褕 斜褍写械褌 褋芯褏褉邪薪褟褌褜 泻邪卸写褘泄 芯褌胁械褌, 泻芯褌芯褉褘泄 锌芯谢邪谐邪械褌 "泻褝褕懈褉褍械屑褘屑" (褋屑. http-cache-introduction). 袝褋谢懈 褝褌芯褌 卸械 褉械褋褍褉褋 斜褍写械褌 蟹邪锌褉芯褕械薪 械褖褢 褉邪蟹, 泻褝褕 芯褌锌褉邪胁懈褌 褋芯褏褉邪薪褢薪薪褘泄 (泻褝褕懈褉芯胁邪薪薪褘泄) 芯褌胁械褌 泻谢懈械薪褌褍, 懈谐薪芯褉懈褉褍褟 胁邪褕械 锌褉懈谢芯卸械薪懈械.

协褌芯褌 褌懈锌 泻褝褕懈褉芯胁邪薪懈褟 懈蟹胁械褋褌械薪 锌芯写 懈屑械薪械屑 "泻褝褕懈褉褍褞褖械谐芯 HTTP 褕谢褞蟹邪". 小褍褖械褋褌胁褍械褌 屑薪芯谐芯 泻褝褕械褉芯胁 褌邪泻芯谐芯 褌懈锌邪, 薪邪锌褉懈屑械褉: Varnish, Squid 胁 褉械卸懈屑械 芯斜褉邪褌薪芯谐芯 锌褉芯泻褋懈, 邪 褌邪泻卸械 芯斜褉邪褌薪褘泄 锌褉芯泻褋懈 Symfony2.

single: 袣褝褕懈褉芯胁邪薪懈械; 孝懈锌褘

孝懈锌褘 泻褝褕懈褉芯胁邪薪懈褟

袧芯 泻褝褕懈褉褍褞褖懈屑 褕谢褞蟹芯屑 褌懈锌褘 泻褝褕械褉芯胁 薪械 懈褋褔械褉锌褘胁邪褞褌褋褟. 肖邪泻褌懈褔械褋泻懈, 蟹邪谐芯谢芯胁泻懈 HTTP 泻褝褕邪, 芯褌锌褉邪胁谢褟械屑褘械 胁邪褕懈屑 锌褉懈谢芯卸械薪懈械屑, 屑芯谐褍褌 斜褘褌褜 锌芯谢褍褔械薪褘 懈 懈褋锌芯谢褜蟹芯胁邪薪褘 褌褉械屑褟 褉邪蟹谢懈褔薪褘屑懈 褌懈锌邪屑懈 泻褝褕械褉芯胁:

  • 袣褝褕 斜褉邪褍蟹械褉邪: 袣邪卸写褘泄 斜褉邪褍蟹械褉 懈屑械械褌 褋胁芯泄 褋芯斜褋褌胁械薪薪褘泄 谢芯泻邪谢褜薪褘泄 泻褝褕, 泻芯褌芯褉褘泄 胁 芯褋薪芯胁薪芯屑 懈褋锌芯谢褜蟹褍械褌褋褟, 泻芯谐写邪 胁褘 薪邪卸懈屑邪械褌械 泻薪芯锌泻褍 "back", 邪 褌邪泻卸械 泻褝褕 泻邪褉褌懈薪芯泻 懈 锌褉芯褔懈褏 褉械褋褍褉褋芯胁. 袣褝褕 斜褉邪褍蟹械褉邪 - 褝褌芯 谢懈褔薪褘泄 泻褝褕, 泻芯褌芯褉褘泄 薪械 懈褋锌芯谢褜蟹褍械褌褋褟 薪懈泻械屑 斜芯谢械械.
  • 袣褝褕懈褉褍褞褖懈械 锌褉芯泻褋懈: 袩褉芯泻褋懈 - 褝褌芯 泻褝褕 芯斜褖械谐芯 写芯褋褌褍锌邪, 褌邪泻 泻邪泻 蟹邪 芯写薪懈屑 褌邪泻懈屑 锌褉芯泻褋懈 屑芯卸械褌 薪邪褏芯写懈褌褜褋褟 屑薪芯谐芯 泻谢懈械薪褌芯胁. 孝邪泻懈械 锌褉芯泻褋懈 泻邪泻 锌褉邪胁懈谢芯 褍褋褌邪薪邪胁谢懈胁邪褞褌褋褟 斜芯谢褜褕懈屑懈 泻芯屑锌邪薪懈褟屑懈 懈 袠薪褌械褉薪械褌-锌褉芯胁邪泄写械褉芯屑 写谢褟 褍屑械薪褜褕械薪懈褟 胁褉械屑械薪懈 写芯褋褌褍锌邪 泻 褉械褋褍褉褋邪屑 懈 褋薪懈卸械薪懈褞 褋械褌械胁芯谐芯 褌褉邪褎懈泻邪.
  • 袣褝褕懈褉褍褞褖懈械 褕谢褞蟹褘: 袣邪泻 懈 锌褉芯泻褋懈, 芯薪懈 褌邪泻卸械 锌褉械写褋褌邪胁谢褟褞褌 褋芯斜芯泄 泻褝褕 芯斜褖械谐芯 写芯褋褌褍锌邪, 薪芯 薪邪 褋褌芯褉芯薪械 褋械褉胁械褉邪. 校褋褌邪薪邪胁谢懈胁邪械屑褘械 邪写屑懈薪懈褋褌褉邪褌芯褉邪屑懈, 芯薪懈 写械谢邪褞褌 褋邪泄褌褘 斜芯谢械械 屑邪褋褕褌邪斜懈褉褍械屑褘屑懈, 薪邪写褢卸薪褘屑懈 懈 斜褘褋褌褉褘屑懈.

Tip

袣褝褕懈褉褍褞褖懈械 褕谢褞蟹褘 懈薪芯谐写邪 薪邪蟹褘胁邪褞褌 泻褝褕懈褉褍褞褖懈屑懈 芯斜褉邪褌薪褘屑懈 锌褉芯泻褋懈, 褋褍褉褉芯谐邪褌薪褘屑懈 泻褝褕械褉邪屑懈 懈 写邪卸械 HTTP 邪泻褋械谢械褉邪褌芯褉邪屑懈.

Note

袟薪邪褔懈屑芯褋褌褜 谢懈褔薪芯谐芯 泻褝褕邪 锌芯 褋褉邪胁薪械薪懈褞 褋 泻褝褕械屑 芯斜褖械谐芯 写芯褋褌褍锌邪 褋褌邪薪芯胁懈褌褋褟 斜芯谢械械 蟹邪屑械褌薪芯泄, 械褋谢懈 屑褘 谐芯胁芯褉懈屑 芯 泻褝褕懈褉芯胁邪薪懈懈 芯褌胁械褌芯胁, 褋芯写械褉卸邪褖懈褏 泻芯薪褌械薪褌, 芯褌薪芯褋褟褖懈泄褋褟 泻 泻芯薪泻褉械褌薪芯屑褍 锌芯谢褜蟹芯胁邪褌械谢褞 (薪邪锌褉懈屑械褉, 懈薪褎芯褉屑邪褑懈褟 芯 褋褔褢褌械).

袣邪卸写褘泄 芯褌胁械褌 芯褌 胁邪褕械谐芯 锌褉懈谢芯卸械薪懈褟 斜褍写械褌 锌褉芯褏芯写懈褌褜 褔械褉械蟹 锌械褉胁褘泄 褌懈锌 泻褝褕邪 懈谢懈 卸械 褔械褉械蟹 芯斜邪 - 锌械褉胁褘泄 懈 胁褌芯褉芯泄. 协褌懈 泻褝褕懈 薪邪褏芯写褟褌褋褟 胁薪械 胁邪褕械谐芯 泻芯薪褌褉芯谢褟, 薪芯 褋谢械写褍褞褌 褍泻邪蟹邪薪懈褟屑 写谢褟 HTTP 泻褝褕邪, 泻芯褌芯褉褘械 械褋褌褜 胁 芯褌胁械褌械.

single: 袣褝褕懈褉芯胁邪薪懈械; 袨斜褉邪褌薪褘泄 锌褉芯泻褋懈 Symfony2

袨斜褉邪褌薪褘泄 锌褉芯泻褋懈 Symfony2

Symfony2 褋芯写械褉卸懈褌 芯斜褉邪褌薪褘泄 锌褉芯泻褋懈 (褌邪泻卸械 薪邪蟹褘胁邪械屑褘泄 泻褝褕懈褉褍褞褖懈屑 褕谢褞蟹芯屑), 薪邪锌懈褋邪薪薪褘泄 薪邪 PHP. 袗泻褌懈胁懈褉褍泄褌械 械谐芯 懈 泻褝褕懈褉褍械屑褘械 芯褌胁械褌褘 胁邪褕械谐芯 锌褉懈谢芯卸械薪懈褟 薪邪褔薪褍褌 泻褝褕懈褉芯胁邪褌褜褋褟 薪邪写谢械卸邪褖懈屑 芯斜褉邪蟹芯屑. 袝谐芯 褍褋褌邪薪芯胁泻邪 芯褔械薪褜 锌褉芯褋褌邪. 袣邪卸写芯械 薪芯胁芯械 锌褉懈谢芯卸械薪懈械 Symfony2 褋芯写械褉卸懈褌 褍卸械 薪邪褋褌褉芯械薪薪芯械 泻褝褕懈褉褍褞褖械械 褟写褉芯 (AppCache), 泻芯褌芯褉芯械 褋谢褍卸懈褌 芯斜芯谢芯褔泻芯泄 写谢褟 褟写褉邪 锌芯 褍屑芯谢褔邪薪懈褞 (AppKernel). 袣褝褕懈褉褍褞褖械械 褟写褉芯 懈 械褋褌褜 褌芯褌 褋邪屑褘泄 芯斜褉邪褌薪褘泄 锌褉芯泻褋懈.

袛谢褟 褌芯谐芯 褔褌芯斜褘 邪泻褌懈胁懈褉芯胁邪褌褜 泻褝褕懈褉芯胁邪薪懈械, 屑芯写懈褎懈褑懈褉褍泄褌械 泻芯写 褎褉芯薪褌-泻芯薪褌褉芯谢谢械褉邪 褌邪泻懈屑 芯斜褉邪蟹芯屑, 褔褌芯斜褘 芯薪 懈褋锌芯谢褜蟹芯胁邪谢 泻褝褕懈褉褍褞褖械械 褟写褉芯:

<?php
// web/app.php

require_once __DIR__.'/../app/bootstrap.php.cache';
require_once __DIR__.'/../app/AppKernel.php';
require_once __DIR__.'/../app/AppCache.php';

use Symfony\Component\HttpFoundation\Request;

$kernel = new AppKernel('prod', false);
$kernel->loadClassCache();
// wrap the default AppKernel with the AppCache one
$kernel = new AppCache($kernel);
$kernel->handle(Request::createFromGlobals())->send();

袣褝褕懈褉褍褞褖械械 褟写褉芯 薪械屑械写谢械薪薪芯 薪邪褔薪褢褌 写械泄褋褌胁芯胁邪褌褜 胁 泻邪褔械褋褌胁械 芯斜褉邪褌薪芯谐芯 锌褉芯泻褋懈 -斜褍写械褌 泻褝褕懈褉芯胁邪褌褜 芯褌胁械褌褘 胁邪褕械谐芯 锌褉懈谢芯卸械薪懈褟 懈 芯褌锌褉邪胁谢褟褌褜 懈褏 泻谢懈械薪褌褍.

Tip

袣褝褕懈褉褍褞褖械械 褟写褉芯 懈屑械械褌 芯褋芯斜褘泄 屑械褌芯写 getLog(), 泻芯褌芯褉褘泄 胁芯蟹胁褉邪褖邪械褌 褋褌褉芯泻芯胁芯械 锌褉械写褋褌邪胁谢械薪懈械 褌芯谐芯, 褔褌芯 锌褉芯懈褋褏芯写懈褌 薪邪 泻褝褕懈褉褍褞褖械屑 褍褉芯胁薪械. 袙 dev 芯泻褉褍卸械薪懈懈 胁褘 屑芯卸械褌械 懈褋锌芯谢褜蟹芯胁邪褌褜 械谐芯 写谢褟 芯褌谢邪写泻懈 懈 锌褉芯胁械褉泻懈 胁邪褕械泄 褋褌褉邪褌械谐懈懈 泻褝褕懈褉芯胁邪薪懈褟:

error_log($kernel->getLog());

袨斜褗械泻褌 AppCache 懈屑械械褌 泻芯薪褎懈谐褍褉邪褑懈褞 锌芯 褍屑芯谢褔邪薪懈褞, 薪芯 胁褘 屑芯卸械褌械 泻芯薪褎懈谐褍褉懈褉芯胁邪褌褜 懈 薪邪褋褌褉邪懈胁邪褌褜 械谐芯 芯锌褑懈懈 锌芯褋褉械写褋褌胁芯屑 锌械褉械芯锌褉械写械谢械薪懈褟 屑械褌芯写邪 getOptions():

<?php
// app/AppCache.php
class AppCache extends Cache
{
    protected function getOptions()
    {
        return array(
            'debug'                  => false,
            'default_ttl'            => 0,
            'private_headers'        => array('Authorization', 'Cookie'),
            'allow_reload'           => false,
            'allow_revalidate'       => false,
            'stale_while_revalidate' => 2,
            'stale_if_error'         => 60,
        );
    }
}

Tip

袛谢褟 懈蟹屑械薪械薪懈褟 芯锌褑懈懈 debug 锌械褉械芯锌褉械写械谢褟褌褜 getOptions() 薪械 芯斜褟蟹邪褌械谢褜薪芯, 褌邪泻 泻邪泻 芯薪邪 邪胁褌芯屑邪褌懈褔械褋泻懈 锌褉懈薪懈屑邪械褌 蟹薪邪褔械薪懈械 锌邪褉邪屑械褌褉邪 debug 芯褌 AppKernel.

袧懈卸械 锌褉械写褋褌邪胁谢械薪 褋锌懈褋芯泻 芯褋薪芯胁薪褘褏 芯锌褑懈泄:

  • default_ttl: 袙褉械屑褟 (胁 褋械泻褍薪写邪褏), 胁 褌械褔械薪懈械 泻芯褌芯褉芯谐芯 泻褝褕懈褉芯胁邪薪薪褘泄 褝谢械屑械薪褌 褋褔懈褌邪械褌褋褟 褋胁械卸懈屑, 械褋谢懈 芯褌胁械褌 薪械 褋芯写械褉卸懈褌 褌芯褔薪褘褏 写邪薪薪褘褏 芯 械谐芯 "褋胁械卸械褋褌懈". 携胁薪芯 褍泻邪蟹邪薪薪褘械 蟹邪谐芯谢芯胁泻懈 Cache-Control 懈谢懈 Expires 锌械褉械蟹邪锌懈褋褘胁邪褞褌 褝褌芯 蟹薪邪褔械薪懈械 (锌芯 褍屑芯谢褔邪薪懈褞 0);
  • private_headers: 袧邪斜芯褉 蟹邪谐芯谢芯胁泻芯胁 蟹邪锌褉芯褋邪, 泻芯褌芯褉褘械 邪泻褌懈胁懈褉褍褞褌 "锌褉懈胁邪褌薪褘泄" Cache-Control 写谢褟 芯褌胁械褌芯胁, 泻芯褌芯褉褘械 褟胁薪芯 薪械 褍泻邪蟹褘胁邪褞褌 锌芯胁械写械薪懈械 "锌褉懈胁邪褌薪褘泄" 懈谢懈 "锌褍斜谢懈褔薪褘泄" 锌芯褋褉械写褋褌胁芯屑 写懈褉械泻褌懈胁褘 Cache-Control (锌芯 褍屑芯谢褔邪薪懈褞 AuthorizationCookie);
  • allow_reload: 袨锌褉械写械谢褟械褌, 屑芯卸械褌 谢懈 泻谢懈械薪褌 褎芯褉褋懈褉芯胁邪褌褜 芯斜薪芯胁谢械薪懈械 泻褝褕邪 锌褉懈 锌芯屑芯褖懈 写懈褉械泻褌懈胁褘 Cache-Control "no-cache" 胁 蟹邪锌褉芯褋械. 校褋褌邪薪芯胁懈褌械 械褢 胁 true 写谢褟 褋谢械写芯胁邪薪懈褟 褋锌械褑懈褎懈泻邪褑懈懈 RFC 2616 (锌芯 褍屑芯谢褔邪薪懈褞 false);
  • allow_revalidate: 袨锌褉械写械谢褟械褌, 屑芯卸械褌 谢懈 泻谢懈械薪褌 褎芯褉褋懈褉芯胁邪褌褜 锌械褉械锌褉芯胁械褉泻褍 泻褝褕邪 锌褉懈 锌芯屑芯褖懈 写懈褉械泻褌懈胁褘 Cache-Control "max-age=0" 胁 蟹邪锌褉芯褋械. 校褋褌邪薪芯胁懈褌械 械褢 胁 true 写谢褟 褋谢械写芯胁邪薪懈褟 褋锌械褑懈褎懈泻邪褑懈懈 RFC 2616 (锌芯 褍屑芯谢褔邪薪懈褞 false);
  • stale_while_revalidate: 袨锌褉械写械谢褟械褌 褔懈褋谢芯 褋械泻褍薪写 锌芯 褍屑芯谢褔邪薪懈褞 (泻胁邪薪褌懈褎懈泻邪褑懈褟 胁褉械屑械薪懈 锌褉芯懈蟹胁芯写懈褌褋褟 胁 褋械泻褍薪写邪褏, 褌邪泻 泻邪泻 TTL (time to live) 芯褌胁械褌邪 懈蟹屑械褉褟械褌褋褟 胁 褋械泻褍薪写邪褏) 胁芯 胁褉械屑褟 泻芯褌芯褉芯谐芯 泻褝褕 斜褍写械褌 薪械屑械写谢械薪薪芯 胁芯蟹胁褉邪褖邪褌褜 锌褉芯褋褉芯褔械薪薪褘泄 芯褌胁械褌, 锌芯泻邪 锌褉芯懈蟹胁芯写懈褌褋褟 械谐芯 褎芯薪芯胁邪褟 锌械褉械锌褉芯胁械褉泻邪 (锌芯 褍屑芯谢褔邪薪懈褞 2); 褝褌邪 芯锌褑懈褟 锌械褉械芯锌褉械写械谢褟械褌褋褟 褉邪褋褕懈褉械薪懈械屑 HTTP Cache-Control - stale-while-revalidate (褋屑. RFC 5861);
  • stale_if_error: 袨锌褉械写械谢褟械褌 褔懈褋谢芯 褋械泻褍薪写 锌芯 褍屑芯谢褔邪薪懈褞 (泻胁邪薪褌懈褎懈泻邪褑懈褟 胁褉械屑械薪懈 锌褉芯懈蟹胁芯写懈褌褋褟 胁 褋械泻褍薪写邪褏, 褌邪泻 泻邪泻 TTL (time to live) 芯褌胁械褌邪 懈蟹屑械褉褟械褌褋褟 胁 褋械泻褍薪写邪褏), 胁芯 胁褉械屑褟 泻芯褌芯褉芯谐芯 泻褝褕 屑芯卸械褌 芯斜褋谢褍卸懈胁邪褌褜 锌褉芯褋褉芯褔械薪薪褘泄 芯褌胁械褌, 械褋谢懈 胁芯蟹薪懈泻邪械褌 芯褕懈斜泻邪 (锌芯 褍屑芯谢褔邪薪懈褞 60). 协褌邪 芯锌褑懈褟 锌械褉械芯锌褉械写械谢褟械褌褋褟 褉邪褋褕懈褉械薪懈械屑 HTTP Cache-Control - stale-if-error (褋屑. RFC 5861)

袝褋谢懈 debug 懈屑械械褌 蟹薪邪褔械薪懈械 true, Symfony2 邪胁褌芯屑邪褌懈褔械褋泻懈 写芯斜邪胁谢褟械褌 胁 芯褌胁械褌 蟹邪谐芯谢芯胁芯泻 X-Symfony-Cache, 褋芯写械褉卸邪褖懈泄 锌芯谢械蟹薪褍褞 懈薪褎芯褉屑邪褑懈褞 芯 褔懈褋谢械 褋褉邪斜邪褌褘胁邪薪懈泄 泻褝褕邪 懈 芯 褔懈褋谢械 薪械 薪邪泄写械薪薪褘褏 芯褌胁械褌芯胁 胁 泻褝褕械.

袠褋锌芯谢褜蟹芯胁邪薪懈械 写褉褍谐芯谐芯 芯斜褉邪褌薪芯谐芯 锌褉芯泻褋懈

袨斜褉邪褌薪褘泄 锌褉芯泻褋懈 Symfony2 褝褌芯 芯褌谢懈褔薪褘泄 懈薪褋褌褉褍屑械薪褌 写谢褟 懈褋锌芯谢褜蟹芯胁邪薪懈褟 胁芯 胁褉械屑褟 褉邪蟹褉邪斜芯褌泻懈 懈谢懈 卸械 锌褉懈 胁褘谐褉褍蟹泻械 胁邪褕械谐芯 褋邪泄褌邪 薪邪 胁懈褉褌褍邪谢褜薪褘泄 (褕邪褉械写) 褏芯褋褌懈薪谐, 谐写械 胁褘 薪械 屑芯卸械褌械 褍褋褌邪薪芯胁懈褌褜 薪懈褔械谐芯, 泻褉芯屑械 PHP 泻芯写邪. 袧芯, 锌褉芯泻褋懈 薪邪 PHP 薪懈泻芯谐写邪 薪械 斜褍写械褌 斜褘褋褌褉械械 锌褉芯泻褋懈 薪邪 小懈. 袙芯褌 锌芯褔械屑褍 屑褘 薪邪褋褌芯褟褌械谢褜薪芯 褉械泻芯屑械薪写褍械屑 胁邪屑 懈褋锌芯谢褜蟹芯胁邪褌褜 Varnish 懈谢懈 Squid 薪邪 胁邪褕懈褏 锌褉芯写褍泻褌芯胁褘褏 褋械褉胁械褉邪褏, 械褋谢懈 褝褌芯 胁芯蟹屑芯卸薪芯. 啸芯褉芯褕械泄 薪芯胁芯褋褌褜褞 写谢褟 胁邪褋 斜褍写械褌 褌芯, 褔褌芯 锌械褉械泻谢褞褔械薪懈械 褋 芯写薪芯谐芯 锌褉芯泻褋懈 褋械褉胁械褉邪 薪邪 写褉褍谐芯泄 胁褘锌芯谢薪褟械褌褋褟 锌褉芯褋褌芯 懈 锌褉芯蟹褉邪褔薪芯 懈 薪械 褌褉械斜褍械褌 屑芯写懈褎懈泻邪褑懈懈 泻芯写邪 胁邪褕械谐芯 锌褉懈谢芯卸械薪懈褟. 袩褉芯褋褌芯 薪邪褔薪懈褌械 褉邪斜芯褌褍 褋 芯斜褉邪褌薪褘屑 锌褉芯泻褋懈 Symfony2 懈 蟹邪屑械薪懈褌械 械谐芯 薪邪 Varnish, 泻芯谐写邪 褌褉邪褎懈泻 胁芯蟹褉邪褋褌褢褌.

袘芯谢褜褕械 芯斜 懈褋锌芯谢褜蟹芯胁邪薪懈懈 Varnish 褋 Symfony2 褔懈褌邪泄褌械 胁 泻薪懈谐械 褉械褑械锌褌芯胁: 袣邪泻 懈褋锌芯谢褜蟹芯胁邪褌褜 Varnish </cookbook/cache/varnish>.

Note

袘褘褋褌褉芯写械泄褋褌胁懈械 芯斜褉邪褌薪芯谐芯 锌褉芯泻褋懈 Symfony2 薪械 蟹邪胁懈褋懈褌 芯褌 褋谢芯卸薪芯褋褌懈 锌褉懈谢芯卸械薪懈褟. 协褌芯 写芯褋褌懈谐邪械褌褋褟 蟹邪 褋褔褢褌 褌芯谐芯, 褔褌芯 褟写褉芯 锌褉懈谢芯卸械薪懈褟 蟹邪谐褉褍卸邪械褌褋褟 谢懈褕褜 胁 褌芯屑 褋谢褍褔邪械, 泻芯谐写邪 泻 薪械屑褍 褌褉械斜褍械褌褋褟 锌械褉械薪邪锌褉邪胁懈褌褜 胁褏芯写褟褖懈泄 蟹邪锌褉芯褋.

single: 袣褝褕懈褉芯胁邪薪懈械; HTTP

袙胁械写械薪懈械 胁 HTTP 泻褝褕懈褉芯胁邪薪懈械

袛谢褟 褌芯谐芯, 褔褌芯斜褘 锌芯谢褍褔懈褌褜 锌芯谢褜蟹褍 芯褌 泻褝褕懈褉芯胁邪薪懈褟, 胁邪褕械 锌褉懈谢芯卸械薪懈械 写芯谢卸薪芯 懈屑械褌褜 胁芯蟹屑芯卸薪芯褋褌褜 褋芯芯斜褖懈褌褜, 泻邪泻懈械 芯褌胁械褌褘 屑芯谐褍褌 斜褘褌褜 泻褝褕懈褉芯胁邪薪褘, 邪 褌邪泻卸械 锌褉邪胁懈谢邪, 泻芯褌芯褉褘械 斜褍写褍褌 褍泻邪蟹褘胁邪褌褜 泻芯谐写邪 懈 泻邪泻 懈褋褌械泻邪械褌 褋褉芯泻 写械泄褋褌胁懈褟 褝褌芯谐芯 泻褝褕邪. 协褌芯谐芯 屑芯卸薪芯 写芯褋褌懈褔褜 锌褉懈 锌芯屑芯褖懈 HTTP 蟹邪谐芯谢芯胁泻芯胁 写谢褟 泻褝褕懈褉芯胁邪薪懈褟 芯褌胁械褌芯胁.

Tip

袠屑械泄褌械 胁 胁懈写褍, 褔褌芯 "HTTP" 褝褌芯 薪械 斜芯谢械械 褔械屑 褟蟹褘泻 (锌褉芯褋褌芯泄 褌械泻褋褌芯胁褘泄 褟蟹褘泻), 泻芯褌芯褉褘泄 胁械斜 泻谢懈械薪褌褘 (薪邪锌褉懈屑械褉, 斜褉邪褍蟹械褉褘) 懈 胁械斜 褋械褉胁械褉褘 懈褋锌芯谢褜蟹褍褞褌 写谢褟 泻芯屑屑褍薪懈泻邪褑懈泄 屑械卸写褍 褋芯斜芯泄. 袣芯谐写邪 屑褘 谐芯胁芯褉懈屑 芯斜 HTTP 泻褝褕懈褉芯胁邪薪懈懈, 屑褘 谐芯胁芯褉懈屑 芯 褔邪褋褌懈 褝褌芯谐芯 褟蟹褘泻邪, 泻芯褌芯褉邪褟 锌芯蟹胁芯谢褟械褌褋褟 泻谢懈械薪褌邪屑 懈 褋械褉胁械褉邪屑 芯斜屑械薪懈胁邪褌褜褋褟 懈薪褎芯褉屑邪褑懈械泄, 芯褌薪芯褋褟褖械泄褋褟 泻 泻褝褕懈褉芯胁邪薪懈褞.

小锌械褑懈褎懈泻邪褑懈褟 HTTP 褋芯写械褉卸懈褌 褔械褌褘褉械 蟹邪谐芯谢芯胁泻邪, 芯褌薪芯褋褟褖懈褏褋褟 泻 泻褝褕懈褉芯胁邪薪懈褞:

  • Cache-Control
  • Expires
  • ETag
  • Last-Modified

袧邪懈斜芯谢械械 胁邪卸薪褘屑 懈 屑薪芯谐芯褋褌芯褉芯薪薪懈屑 褟胁谢褟械褌褋褟 蟹邪谐芯谢芯胁芯泻 Cache-Control, 泻芯褌芯褉褘泄 薪邪 褋邪屑芯屑 写械谢械 褟胁谢褟械褌褋褟 泻芯谢谢械泻褑懈械泄 褉邪蟹薪芯芯斜褉邪蟹薪芯泄 懈薪褎芯褉屑邪褑懈懈 芯 泻褝褕懈褉芯胁邪薪懈懈.

Note

袣邪卸写褘泄 懈蟹 蟹邪谐芯谢芯胁泻芯胁 斜褍写械褌 写械褌邪谢褜薪芯 褉邪褋褋屑芯褌褉械薪 胁 褋械泻褑懈懈 http-expiration-validation.

single: 袣褝褕懈褉芯胁邪薪懈械; 袟邪谐芯谢芯胁芯泻 Cache-Control single: HTTP 蟹邪谐芯谢芯胁泻懈; Cache-Control

袟邪谐芯谢芯胁芯泻 Cache-Control

袟邪谐芯谢芯胁芯泻 Cache-Control 褍薪懈泻邪谢械薪 蟹邪 褋褔褢褌 褌芯谐芯, 褔褌芯 芯薪 褋芯写械褉卸懈褌 薪械 芯写薪芯 泻芯薪泻褉械褌薪芯械 蟹薪邪褔械薪懈械, 邪 屑薪芯谐芯 褉邪蟹谢懈褔薪褘褏 写邪薪薪褘褏 芯 泻褝褕懈褉褍械屑芯褋褌懈 芯褌胁械褌邪. 袣邪卸写邪褟 薪芯胁邪褟 锌芯褉褑懈褟 写邪薪薪褘褏 芯褌写械谢褟械褌褋褟 蟹邪锌褟褌芯泄:

Cache-Control: private, max-age=0, must-revalidate

Cache-Control: max-age=3600, must-revalidate

Symfony 锌褉械写芯褋褌邪胁谢褟械褌 屑械褌芯写褘 写谢褟 斜芯谢械械 褍写芯斜薪芯谐芯 褍锌褉邪胁谢械薪懈褟 蟹邪谐芯谢芯胁泻芯屑 Cache-Control:

<?php
//...

$response = new Response();

// 锌芯屑械褌懈褌褜 芯褌胁械褌 泻邪泻 public 懈谢懈 private
$response->setPublic();
$response->setPrivate();

// 褍褋褌邪薪芯胁懈褌褜 max age 写谢褟 private 懈 shared 芯褌胁械褌芯胁
$response->setMaxAge(600);
$response->setSharedMaxAge(600);

// 褍褋褌邪薪芯胁懈褌褜 褋锌械褑懈邪谢褜薪褍褞 写懈褉械泻褌懈胁褍 Cache-Control
$response->headers->addCacheControlDirective('must-revalidate', true);

袩褍斜谢懈褔薪褘械 (public) vs 效邪褋褌薪褘械 (private) 芯褌胁械褌褘

袣褝褕懈褉褍褞褖懈械 褕谢褞蟹褘 懈 锌褉芯泻褋懈 褉邪褋褋屑邪褌褉懈胁邪褞褌 "芯斜褖懈械" 泻褝褕懈 泻邪泻 泻褝褕懈褉芯胁邪薪薪褘泄 泻芯薪褌械薪褌, 泻芯褌芯褉褘泄 懈褋锌芯谢褜蟹褍械褌褋褟 斜芯谢械械 褔械屑 芯写薪懈屑 锌芯谢褜蟹芯胁邪褌械谢械屑. 袝褋谢懈 斜褍写械褌 褋谢褍褔邪泄薪芯 褋芯褏褉邪薪褢薪 芯褌胁械褌, 褋锌械褑懈褎懈褔薪褘泄 写谢褟 芯褌写械谢褜薪芯谐芯 锌芯谢褜蟹芯胁邪褌械谢褟, 胁锌芯褋谢械写褋褌胁懈懈 芯薪 屑芯卸械褌 斜褘褌褜 芯褌锌褉邪胁谢械薪 屑薪芯卸械褋褌胁褍 褉邪蟹谢懈褔薪褘褏 锌芯谢褜蟹芯胁邪褌械谢械泄. 袩褉械写褋褌邪胁褜褌械, 褔褌芯 懈薪褎芯褉屑邪褑懈褟 芯 胁邪褕械屑 褋褔褢褌械 斜褘谢邪 泻褝褕懈褉芯胁邪薪邪 懈 斜褍写械褌 芯褌锌褉邪胁谢械薪邪 谢褞斜芯屑褍 锌芯谢褜蟹芯胁邪褌械谢褞, 泻芯褌芯褉褘泄 蟹邪锌褉芯褋懈褌 褋胁芯褞 褋芯斜褋褌胁械薪薪褍褞 褋褌褉邪薪懈褑褍 褋芯 褋褔褢褌芯屑!

袛谢褟 褌芯谐芯 褔褌芯斜褘 泻芯褉褉械泻褌薪芯 芯斜褉邪斜芯褌邪褌褜 褝褌褍 褋懈褌褍邪褑懈褞, 泻邪卸写褘泄 芯褌胁械褌 屑芯卸械褌 斜褘褌褜 芯斜褗褟胁谢械薪 锌褍斜谢懈褔薪褘屑 懈谢懈 卸械 褔邪褋褌薪褘屑:

  • public: 袩褍斜谢懈褔薪褘泄 芯褌胁械褌 屑芯卸械褌 泻褝褕懈褉芯胁邪褌褜褋褟 泻邪泻 褔邪褋褌薪褘屑, 褌邪泻 懈 锌褍斜谢懈褔薪褘屑 泻褝褕邪屑懈;
  • private: 效邪褋褌薪褘泄 芯褌胁械褌 锌芯写褉邪蟹褍屑械胁邪械褌 褔褌芯 芯薪 褑械谢懈泻芯屑 懈谢懈 卸械 械谐芯 褔邪褋褌褜 锌褉械写薪邪蟹薪邪褔械薪邪 写谢褟 芯写薪芯谐芯 械写懈薪褋褌胁械薪薪芯谐芯 锌芯谢褜蟹芯胁邪褌械谢褟 懈 薪械 写芯谢卸械薪 泻褝褕懈褉芯胁邪褌褜褋褟 锌褍斜谢懈褔薪褘屑懈 泻褝褕械褉邪屑懈.

Symfony 写械泄褋褌胁褍械褌 泻芯薪褋械褉胁邪褌懈胁薪芯 懈 锌芯屑械褔邪械褌 泻邪卸写褘泄 芯褌胁械褌 泻邪泻 褔邪褋褌薪褘泄. 袛谢褟 褌芯谐芯 褔褌芯斜褘 锌芯谢褍褔懈褌褜 锌褉械懈屑褍褖械褋褌胁邪 芯褌 懈褋锌芯谢褜蟹芯胁邪薪懈褟 锌褍斜谢懈褔薪褘褏 泻褝褕械褉芯胁 (胁 褌芯屑 褔懈褋谢械 懈 芯斜褉邪褌薪芯谐芯 锌褉芯泻褋懈 Symfony2), 芯褌胁械褌 写芯谢卸械薪 斜褘褌褜 锌芯屑械褔械薪 泻邪泻 锌褍斜谢懈褔薪褘泄 (public).

single: 袣褝褕懈褉芯胁邪薪懈械; 袘械蟹芯锌邪褋薪褘械 屑械褌芯写褘

袘械蟹芯锌邪褋薪褘械 屑械褌芯写褘

HTTP 泻褝褕懈褉芯胁邪薪懈械 褉邪斜芯褌邪械褌 谢懈褕褜 写谢褟 "斜械蟹芯锌邪褋薪褘褏" HTTP 屑械褌芯写芯胁 (褌邪泻懈褏 泻邪泻 GET 懈 HEAD). 袩芯写 斜械蟹芯锌邪褋薪芯褋褌褜褞 褝褌懈褏 屑械褌芯写芯胁 锌芯薪懈屑邪械褌褋褟, 褔褌芯 胁褘 薪懈泻芯谐写邪 薪械 懈蟹屑械薪懈褌械 褋芯褋褌芯褟薪懈械 锌褉懈谢芯卸械薪懈褟 锌褉懈 芯斜褉邪斜芯褌泻械 褌邪泻懈褏 蟹邪锌褉芯褋芯胁 (锌褉懈 褝褌芯屑 胁褘, 泻芯薪械褔薪芯, 屑芯卸械褌械 谢芯谐谐懈褉芯胁邪褌褜 懈薪褎芯褉屑邪褑懈褞, 泻褝褕懈褉芯胁邪褌褜 写邪薪薪褘械 懈 褌.写.). 协褌芯 芯谐褉邪薪懈褔械薪懈械 懈屑械械褌 写胁邪 褋谢械写褋褌胁懈褟:

  • 袙褘 薪懈泻芯谐写邪 薪械 写芯谢卸薪褘 懈蟹屑械薪褟褌褜 褋芯褋褌芯褟薪懈械 胁邪褕械谐芯 锌褉懈谢芯卸械薪懈褟, 芯褌胁械褔邪褟 薪邪 GET 懈谢懈 HEAD 蟹邪锌褉芯褋. 袛邪卸械 械褋谢懈 胁褘 薪械 懈褋锌芯谢褜蟹褍械褌械 泻褝褕懈褉褍褞褖懈泄 褕谢褞蟹, 薪邪谢懈褔懈械 锌褉芯泻褋懈-泻褝褕邪 芯蟹薪邪褔邪械褌, 褔褌芯 谢褞斜芯泄 GET 懈谢懈 HEAD 蟹邪锌褉芯褋 屑芯卸械褌 泻邪泻 锌芯锌邪褋褌褜 胁 胁邪褕械 锌褉懈谢芯卸械薪懈械, 褌邪泻 懈 薪械 锌芯锌邪褋褌褜 (锌褉芯泻褋懈 胁械褉薪褢褌 泻褝褕懈褉芯胁邪薪薪褘械 写邪薪薪褘械, 薪械 蟹邪褌褉邪谐懈胁邪褟 锌褉懈谢芯卸械薪懈械).
  • 袧懈 胁 泻芯械屑 褋谢褍褔邪械 薪械 泻褝褕懈褉褍泄褌械 PUT, POST 懈 DELETE 屑械褌芯写褘. 协褌懈 屑械褌芯写褘 锌褉械写薪邪蟹薪邪褔械薪褘 写谢褟 懈蟹屑械薪械薪懈褟 褋芯褋褌芯褟薪懈褟 锌褉懈谢芯卸械薪懈褟 (薪邪锌褉懈屑械褉, 褍写邪谢械薪懈褟 蟹邪锌懈褋懈 懈蟹 斜谢芯谐邪). 袝褋谢懈 懈褏 泻褝褕懈褉芯胁邪褌褜, 褌芯 褔邪褋褌褜 蟹邪锌褉芯褋芯胁 薪邪 懈蟹屑械薪械薪懈械 褋芯褋褌芯褟薪懈褟 锌褉懈谢芯卸械薪懈褟 薪械 斜褍写褍褌 写芯褋褌懈谐邪褌褜 械谐芯.

袩褉邪胁懈谢邪 泻褝褕懈褉芯胁邪薪懈褟 懈 蟹薪邪褔械薪懈褟 锌芯 褍屑芯谢褔邪薪懈褞

HTTP 1.1 锌芯 褍屑芯谢褔邪薪懈褞 褉邪蟹褉械褕邪械褌 泻褝褕懈褉芯胁邪薪懈械, 械褋谢懈 褟胁薪芯 薪械 褍泻邪蟹邪薪 蟹邪谐芯谢芯胁芯泻 Cache-Control. 袧邪 锌褉邪泻褌懈泻械, 斜芯谢褜褕懈薪褋褌胁芯 泻褝褕械褉芯胁 薪懈褔械谐芯 薪械 写械谢邪褞褌, 械褋谢懈 蟹邪锌褉芯褋褘 懈屑械褞褌 泻褍泻懈, 邪胁褌芯褉懈蟹邪褑懈芯薪薪褘泄 蟹邪谐芯谢芯胁芯泻, 懈褋锌芯谢褜蟹褍褞褌 薪械斜械蟹芯锌邪褋薪褘械 屑械褌芯写褘 (褌.械. PUT, POST, DELETE), 懈谢懈 泻芯谐写邪 芯褌胁械褌 懈屑械械褌 锌械褉械薪邪锌褉邪胁谢褟褞褖懈泄 褋褌邪褌褍褋-泻芯写 (薪邪锌褉懈屑械褉, 301 懈谢懈 302).

Symfony2 邪胁褌芯屑邪褌懈褔械褋泻懈 褍褋褌邪薪邪胁谢懈胁邪械褌 褉邪蟹褍屑薪芯-泻芯薪褋械褉胁邪褌懈胁薪褘泄 蟹邪谐芯谢芯胁芯泻 Cache-Control, 械褋谢懈 褉邪蟹褉邪斜芯褌褔懈泻 薪械 蟹邪写邪谢 锌褉邪胁懈谢邪 泻褝褕懈褉芯胁邪薪懈褟 褟胁薪芯. 协褌懈 褍屑芯谢褔邪薪懈褟 褋谢械写褍褞褌 褋谢械写褍褞褖懈屑 锌褉邪胁懈谢邪屑:

  • 袝褋谢懈 薪械 芯锌褉械写械谢械薪褘 蟹邪谐芯谢芯胁泻懈 泻褝褕懈褉芯胁邪薪懈褟 (Cache-Control, Expires, ETag 懈谢懈 Last-Modified), Cache-Control 褍褋褌邪薪邪胁谢懈胁邪械褌褋褟 胁 蟹薪邪褔械薪懈械 no-cache, 褌芯 械褋褌褜 芯褌胁械褌 泻褝褕懈褉芯胁邪褌褜褋褟 薪械 斜褍写械褌;
  • 袝褋谢懈 Cache-Control 锌褍褋褌芯泄 (薪芯 锌褉懈褋褍褌褋褌胁褍械褌 谢褞斜芯泄 写褉褍谐芯泄 泻褝褕懈褉褍褞褖懈泄 蟹邪谐芯谢芯胁芯泻), 械谐芯 蟹薪邪褔械薪懈械 褍褋褌邪薪邪胁谢懈胁邪械褌褋褟 胁 private, must-revalidate;
  • 袝褋谢懈 锌褉懈褋褍褌褋褌胁褍械褌 褏芯褌褟 斜褘 芯写薪邪 写懈褉械泻褌懈胁邪 Cache-Control 懈 褟胁薪芯 薪械 褍泻邪蟹邪薪褘 写懈褉械泻褌懈胁褘 public 懈谢懈 private, Symfony2 写芯斜邪胁谢褟械褌 写懈褉械泻褌懈胁褍 private 邪胁褌芯屑邪褌懈褔械褋泻懈 (蟹邪 懈褋泻谢褞褔械薪懈械屑 褋谢褍褔邪褟, 泻芯谐写邪 褍褋褌邪薪芯胁谢械薪 s-maxage).

袦芯写械谢懈 泻褝褕懈褉芯胁邪薪懈褟 胁 HTTP: expiration 懈 validation

小锌械褑懈褎懈泻邪褑懈褟 HTTP 芯锌褉械写械谢褟械褌 写胁械 屑芯写械谢懈 泻褝褕懈褉芯胁邪薪懈褟:

  • 袩械褉胁邪褟 - 屑芯写械谢褜 "芯泻芯薪褔邪薪懈褟 褋褉芯泻邪 写械泄褋褌胁懈褟" (expiration), 胁褘 锌褉芯褋褌芯 褍泻邪蟹褘胁邪械褌械 泻邪泻 写芯谢谐芯 芯褌胁械褌 斜褍写械褌 "褋胁械卸懈屑", 胁泻谢褞褔邪褟 蟹邪谐芯谢芯胁泻懈 Cache-Control 懈/懈谢懈 Expires. 袣褝褕械褉褘, 泻芯褌芯褉褘械 锌芯写写械褉卸懈胁邪褞褌 褝褌褍 屑芯写械谢褜, 薪械 斜褍写褍褌 胁褘锌芯谢薪褟褌褜 薪械泻芯褌芯褉褘泄 蟹邪锌褉芯褋 写芯 褌械褏 锌芯褉, 锌芯泻邪 械谐芯 泻褝褕懈褉芯胁邪薪薪邪褟 胁械褉褋懈褟 薪械 写芯褋褌懈谐薪械褌 芯泻芯薪褔邪薪懈褟 褋褉芯泻邪 写械泄褋褌胁懈褟 (expiration) 懈 薪械 褋褌邪薪械褌 "锌褉芯褋褉芯褔械薪薪芯泄".
  • 袣芯谐写邪 褋褌褉邪薪懈褑褘 芯褔械薪褜 斜褘褋褌褉芯 屑械薪褟褞褌褋褟, 褔邪褋褌芯 斜褘胁邪械褌 薪械芯斜褏芯写懈屑芯 懈褋锌芯谢褜蟹芯胁邪褌褜 屑芯写械谢褜 胁邪谢懈写邪褑懈懈 (validation). 袩褉懈 懈褋锌芯谢褜蟹芯胁邪薪懈懈 褝褌芯泄 屑芯写械谢懈 泻褝褕械褉 褋芯褏褉邪薪褟械褌 芯褌胁械褌, 薪芯 锌褉懈 泻邪卸写芯屑 锌芯褋谢械写褍褞褖械屑 蟹邪锌褉芯褋械 芯薪 蟹邪锌褉邪褕懈胁邪械褌 褋械褉胁械褉 - 褟胁谢褟械褌褋褟 谢懈 泻褝褕懈褉芯胁邪薪薪褘泄 芯褌胁械褌 胁邪谢懈写薪褘屑 懈谢懈 薪械褌. 袩褉懈谢芯卸械薪懈械 懈褋锌芯谢褜蟹褍械褌 薪械泻芯褌芯褉褘泄 褍薪懈泻邪谢褜薪褘泄 懈写械薪褌懈褎懈泻邪褌芯褉 芯褌胁械褌邪 (蟹邪谐芯谢芯胁芯泻 Etag) 懈/懈谢懈 胁褉械屑械薪薪褍褞 屑械褌泻褍 (蟹邪谐芯谢芯胁芯泻 Last-Modified) 写谢褟 锌褉芯胁械褉泻懈 懈蟹屑械薪懈谢邪褋褜 谢懈 褋褌褉邪薪懈褑邪 褋 屑芯屑械薪褌邪 械褢 泻褝褕懈褉芯胁邪薪懈褟.

笑械谢褜褞 芯斜芯懈褏 褝褌懈褏 屑芯写械谢械泄 褟胁谢褟械褌褋褟 褋谢械写褍褞褖邪褟: 薪械 谐械薪械褉懈褉芯胁邪褌褜 芯写懈薪 懈 褌芯褌 卸械 芯褌胁械褌 写胁邪卸写褘, 械褋谢懈 胁 泻褝褕械 褍卸械 械褋褌褜 "褋胁械卸懈泄" 芯褌胁械褌, 褋芯褏褉邪薪褢薪薪褘泄 褌邪屑 褉邪薪械械.

效懈褌邪械屑 褋锌械褑懈褎懈泻邪褑懈褞 HTTP

小锌械褑懈褎懈泻邪褑懈褟 HTTP 芯锌褉械写械谢褟械褌 锌褉芯褋褌芯泄, 薪芯 屑芯褖薪褘泄 褟蟹褘泻, 锌褉懈 锌芯屑芯褖懈 泻芯褌芯褉芯谐芯 芯褋褍褖械褋褌胁谢褟褞褌褋褟 泻谢懈械薪褌-褋械褉胁械褉薪褘械 泻芯屑屑褍薪懈泻邪褑懈懈 胁 褋械褌懈. 袦芯写械谢褜 蟹邪锌褉芯褋-芯褌胁械褌 芯锌褉械写械谢褟械褌 胁褋褞 胁邪褕褍 褉邪斜芯褌褍, 泻邪泻 胁械斜-褉邪蟹褉邪斜芯褌褔懈泻邪. 袣 薪械褋褔邪褋褌褜褞, 芯褉懈谐懈薪邪谢褜薪褍褞 褋锌械褑懈褎懈泻邪褑懈褞 - RFC 2616 - 褔懈褌邪褌褜 胁械褋褜屑邪 薪械锌褉芯褋褌芯.

袙 薪邪褋褌芯褟褖械械 胁褉械屑褟 褋褍褖械褋褌胁褍械褌 懈薪懈褑懈邪褌懈胁邪 (HTTP Bis) 锌芯 锌械褉械锌懈褋褘胁邪薪懈褞 RFC 2616. 袨薪邪 薪械 褋褌邪胁懈褌 褑械谢褜褞 薪邪锌懈褋邪薪懈械 薪芯胁芯泄 胁械褉褋懈懈 HTTP, 邪 胁 芯褋薪芯胁薪芯屑 褋芯褋褉械写芯褌芯褔械薪邪 薪邪 褉邪蟹褗褟褋薪械薪懈懈 芯褉懈谐懈薪邪谢褜薪芯泄 褋锌械褑懈褎懈泻邪褑懈懈 HTTP. 小褌褉褍泻褌褍褉邪 褋锌械褑懈褎懈泻邪褑懈懈 褌邪泻卸械 锌芯写胁械褉谐谢邪褋褜 褍谢褍褔褕械薪懈褞 - 芯薪邪 褉邪蟹斜懈褌邪 薪邪 褋械屑褜 褔邪褋褌械泄; 胁褋褢 褔褌芯 芯褌薪芯褋懈褌褋褟 泻 HTTP 泻褝褕懈褉芯胁邪薪懈褞 - 褉邪褋锌芯谢芯卸械薪芯 胁 写胁褍褏 薪械蟹邪胁懈褋懈屑褘褏 褔邪褋褌褟褏 (P4 - Conditional RequestsP6 - Caching: Browser and intermediary caches).

袙邪屑, 泻邪泻 胁械斜 褉邪蟹褉邪斜芯褌褔懈泻褍, 屑褘 薪邪褋褌芯褟褌械谢褜薪芯 褉械泻芯屑械薪写褍械屑 锌褉芯褔懈褌邪褌褜 褝褌褍 褋锌械褑懈褎懈泻邪褑懈褞. 袝褢 锌褉芯褋褌芯褌邪 懈 褋懈谢邪 - 写邪卸械 褋锌褍褋褌褟 写械褋褟褌褜 谢械褌 锌芯褋谢械 械褢 薪邪锌懈褋邪薪懈褟 - 斜械褋褑械薪薪褘. 袠 薪械 斜芯泄褌械褋褜 胁薪械褕薪械谐芯 胁懈写邪 褋锌械褑懈褎懈泻邪褑懈懈 - 械褢 褋芯写械褉卸邪薪懈械 屑薪芯谐芯 谢褍褔褕械, 褔械屑 械褢 芯斜谢芯卸泻邪.

single: 袣褝褕懈褉芯胁邪薪懈械; HTTP Expiration - 芯泻芯薪褔邪薪懈械 褋褌褉芯泻邪 写械泄褋褌胁懈褟

HTTP Expiration - 芯泻芯薪褔邪薪懈械 褋褌褉芯泻邪 写械泄褋褌胁懈褟

袦芯写械谢褜 芯泻芯薪褔邪薪懈褟 褋褉芯泻邪 写械泄褋褌胁懈褟 斜芯谢械械 褝褎褎械泻褌懈胁薪邪褟 懈 锌褉芯褋褌邪褟 懈蟹 写胁褍褏 锌芯写写械褉卸懈胁邪械屑褘褏 屑芯写械谢械泄 泻褝褕懈褉芯胁邪薪懈褟 懈 写芯谢卸薪邪 懈褋锌芯谢褜蟹芯胁邪褌褜褋褟 胁械蟹写械, 谐写械 褝褌芯 胁芯蟹屑芯卸薪芯. 袣芯谐写邪 芯褌胁械褌 泻褝褕懈褉褍械褌褋褟 褋芯 褋褉芯泻芯屑 芯泻芯薪褔邪薪懈褟 写械泄褋褌胁懈褟, 泻褝褕 斜褍写械褌 褏褉邪薪懈褌褜 芯褌胁械褌 懈 胁芯蟹胁褉邪褖邪褌褜 械谐芯 薪邪 泻谢懈械薪褌 薪邪锌褉褟屑褍褞, 薪械 蟹邪褌褉邪谐懈胁邪褟 锌褉懈谢芯卸械薪懈械, 锌芯泻邪 褋褉芯泻 写械泄褋褌胁懈褟 薪械 芯泻芯薪褔懈褌褋褟.

袦芯写械谢褜 芯泻芯薪褔邪薪懈褟 褋褉芯泻邪 写械泄褋褌胁懈褟 屑芯卸械褌 斜褘褌褜 蟹邪写械泄褋褌胁芯胁邪薪邪 褋 懈褋锌芯谢褜蟹芯胁邪薪懈械屑 写胁褍褏 锌芯褏芯卸懈褏 HTTP 蟹邪谐芯谢芯胁泻芯胁: Expires 懈谢懈 Cache-Control.

single: 袣褝褕懈褉芯胁邪薪懈械; 袟邪谐芯谢芯胁芯泻 Expires single: HTTP 蟹邪谐芯谢芯胁泻懈; Expires

袨泻芯薪褔邪薪懈械 褋褉芯泻邪 写械泄褋褌胁懈褟 锌褉懈 锌芯屑芯褖懈 蟹邪谐芯谢芯胁泻邪 Expires

小谢械写褍褟 褋锌械褑懈褎懈泻邪褑懈懈 HTTP, "蟹邪谐芯谢芯胁芯泻 Expires 褋芯写械褉卸懈褌 写邪褌褍/胁褉械屑褟, 锌芯褋谢械 泻芯褌芯褉芯谐芯 褝褌芯褌 芯褌胁械褌 斜褍写械褌 褋褔懈褌邪褌褜褋褟 锌褉芯褋褉芯褔械薪薪褘屑". 袟邪谐芯谢芯胁芯泻 Expires 屑芯卸械褌 斜褘褌褜 褍褋褌邪薪芯胁谢械薪 锌褉懈 锌芯屑芯褖懈 屑械褌芯写邪 setExpires() 泻谢邪褋褋邪 Response. 袨薪 锌褉懈薪懈屑邪械褌 褝泻蟹械屑锌谢褟褉 DateTime 胁 泻邪褔械褋褌胁械 邪褉谐褍屑械薪褌邪:

<?php
//...
$date = new DateTime();
$date->modify('+600 seconds');

$response->setExpires($date);

袪械蟹褍谢褜褌懈褉褍褞褖懈泄 蟹邪谐芯谢芯胁芯泻 斜褍写械褌 胁褘谐谢褟写械褌褜 褋谢械写褍褞褖懈屑 芯斜褉邪蟹芯屑:

Expires: Thu, 01 Mar 2011 16:00:00 GMT

Note

袦械褌芯写 setExpires() 邪胁褌芯屑邪褌懈褔械褋泻懈 泻芯薪胁械褉褌懈褉褍械褌 写邪褌褍 胁 蟹芯薪褍 GMT, 泻邪泻 褌芯谐芯 褌褉械斜褍械褌 褋锌械褑懈褎懈泻邪褑懈褟.

袟邪谐芯谢芯胁芯泻 Expires 懈屑械械褌 2 芯谐褉邪薪懈褔械薪懈褟. 袩械褉胁芯械, 褔邪褋褘 薪邪 胁械斜-褋械褉胁械褉械 懈 懈 褔邪褋褘 泻褝褕械褉邪 (薪邪锌褉懈屑械褉, 斜褉邪褍蟹械褉邪) 写芯谢卸薪褘 斜褘褌褜 褋懈薪褏褉芯薪懈蟹懈褉芯胁邪薪薪褘屑懈. 袙褌芯褉芯械, 褋谢械写褍械褌 懈蟹 褋锌械褑懈褎懈泻邪褑懈懈 懈 谐谢邪褋懈褌, 褔褌芯 "HTTP/1.1 褋械褉胁械褉褘 薪懈泻芯谐写邪 薪械 写芯谢卸薪褘 褍褋褌邪薪邪胁谢懈胁邪褌褜 写邪褌褍 Expires 斜芯谢械械 褔械屑 薪邪 芯写懈薪 谐芯写 胁锌械褉褢写".

single: 袣褝褕懈褉芯胁邪薪懈械; 袟邪谐芯谢芯胁芯泻 Cache-Control single: HTTP 蟹邪谐芯谢芯胁泻懈; Cache-Control

袨泻芯薪褔邪薪懈械 褋褉芯泻邪 写械泄褋褌胁懈褟 锌褉懈 锌芯屑芯褖懈 蟹邪谐芯谢芯胁泻邪 Cache-Control

袩芯褋泻芯谢褜泻褍 蟹邪谐芯谢芯胁芯泻 Expires 懈屑械械褌 芯谐褉邪薪懈褔械薪懈褟, 胁褘 写芯谢卸薪褘 懈褋锌芯谢褜蟹芯胁邪褌褜 蟹邪谐芯谢芯胁芯泻 Cache-Control. 袙褋锌芯屑懈薪邪泄褌械, 褔褌芯 蟹邪谐芯谢芯胁芯泻 Cache-Control 懈褋锌芯谢褜蟹褍械褌褋褟 写谢褟 褍泻邪蟹邪薪懈褟 褉邪蟹谢懈褔薪褘褏 写懈褉械泻褌懈胁, 芯褌薪芯褋褟褖懈褏褋褟 泻 泻褝褕懈褉芯胁邪薪懈褞. 袛谢褟 芯泻芯薪褔邪薪懈褟 褋褉芯泻邪 写械泄褋褌胁懈褟 懈屑械褞褌褋褟 写胁械 写懈褉械泻褌懈胁褘, max-ages-maxage. 袩械褉胁邪褟 懈褋锌芯谢褜蟹褍械褌褋褟 胁褋械屑懈 泻褝褕械褉邪屑懈, 胁 褌芯 胁褉械屑褟 泻邪泻 胁褌芯褉邪褟 懈褋锌芯谢褜蟹褍械褌褋褟 谢懈褕褜 "芯斜褖懈屑懈" (shared) 泻褝褕邪屑懈:

<?php
//...
// 校褋褌邪薪邪胁谢懈胁邪械屑 褔懈褋谢芯 褋械泻褍薪写, 锌芯褋谢械 泻芯褌芯褉芯谐芯 芯褌胁械褌 斜芯谢械械 薪械 斜褍写械褌 褋褔懈褌邪褌褜褋褟 褋胁械卸懈屑
$response->setMaxAge(600);

// 孝芯卸械 褔褌芯 懈 胁褘褕械, 薪芯 褌芯谢褜泻芯 写谢褟 芯斜褖懈褏 泻褝褕械泄
$response->setSharedMaxAge(600);

袟邪谐芯谢芯胁芯泻 Cache-Control 斜褍写械褌 懈屑械褌褜 褋谢械写褍褞褖懈泄 褎芯褉屑邪褌 (褌邪泻卸械 褌邪屑 屑芯谐褍褌 斜褘褌褜 懈 写褉褍谐懈械 写懈褉械泻褌懈胁褘):

Cache-Control: max-age=600, s-maxage=600

single: 袣褝褕懈褉芯胁邪薪懈械; 袙邪谢懈写邪褑懈褟

袙邪谢懈写邪褑懈褟

袣芯谐写邪 薪械泻芯褌芯褉褘泄 褉械褋褍褉褋 写芯谢卸械薪 斜褘褌褜 芯斜薪芯胁谢褢薪, 胁 褋胁褟蟹懈 褋 褌械屑, 褔褌芯 锌褉芯懈蟹芯褕谢懈 懈蟹屑械薪械薪懈褟 胁 写邪薪薪褘褏, 谢械卸邪褖懈褏 胁 械谐芯 芯褋薪芯胁械, 屑芯写械谢褜 芯泻芯薪褔邪薪懈褟 褋褉芯泻邪 写械泄褋褌胁懈褟 褋褌邪薪芯胁懈褌褋褟 薪械褋芯褋褌芯褟褌械谢褜薪芯泄. 袩褉懈 锌芯写褏芯写械, 懈褋锌芯谢褜蟹褍械屑芯屑 胁 屑芯写械谢懈 芯泻芯薪褔邪薪懈褟 褋褉芯泻邪 写械泄褋褌胁懈褟, 泻褝褕 薪械 芯斜褉邪褌懈褌褋褟 泻 锌褉懈谢芯卸械薪懈褞 写谢褟 芯斜薪芯胁谢械薪懈褟 芯褌胁械褌邪 锌芯泻邪 写邪薪薪褘械 薪械 褋褌邪薪芯胁褟褌褋褟 锌褉芯褋褉芯褔械薪薪褘屑懈 (褌.械. 泻芯谐写邪 懈褋褌械褔褢褌 褋褉芯泻 写械泄褋褌胁懈褟 泻褝褕懈褉芯胁邪薪薪芯谐芯 芯褌胁械褌邪).

袦芯写械谢褜 胁邪谢懈写邪褑懈懈 褉械褕邪械褌 褝褌褍 锌褉芯斜谢械屑褍. 小 械褢 锌芯屑芯褖褜褞 泻褝褕 褌邪泻卸械 锌褉芯写芯谢卸邪械褌 褋芯褏褉邪薪褟褌褜 芯褌胁械褌褘. 袪邪蟹谢懈褔懈械 蟹邪泻谢褞褔邪械褌褋褟 胁 褌芯屑, 褔褌芯 写谢褟 泻邪卸写芯谐芯 蟹邪锌褉芯褋邪, 泻褝褕 蟹邪锌褉邪褕懈胁邪械褌 锌褉懈谢芯卸械薪懈械 懈蟹屑械薪懈谢褋褟 懈谢懈 薪械褌 蟹邪锌褉邪褕懈胁邪械屑褘泄 褉械褋褍褉褋. 袝褋谢懈 泻褝褕 械褖褢 胁邪谢懈写械薪, 胁邪褕械 锌褉懈谢芯卸械薪懈械 写芯谢卸薪芯 胁械褉薪褍褌褜 褋褌邪褌褍褋 泻芯写 304 懈 薪械 胁芯蟹胁褉邪褖邪褌褜 泻芯薪褌械薪褌. 协褌芯 芯蟹薪邪褔邪械褌, 褔褌芯 泻褝褕 械褖褢 胁邪谢懈写械薪 懈 屑芯卸薪芯 胁芯蟹胁褉邪褖邪褌褜 泻褝褕懈褉芯胁邪薪薪褘泄 芯褌胁械褌.

小 褝褌芯泄 屑芯写械谢褜褞 胁褘, 锌褉械卸写械 胁褋械谐芯, 褋芯褏褉邪薪褟械褌械 锌褉芯锌褍褋泻薪褍褞 褋锌芯褋芯斜薪芯褋褌褜 胁邪褕械谐芯 懈薪褌械褉薪械褌-泻邪薪邪谢邪, 褌邪泻 泻邪泻 褋褌褉邪薪懈褑邪 褑械谢懈泻芯屑 薪械 芯褌褋褘谢邪械褌褋褟 写胁邪卸写褘 褌芯屑褍 卸械 泻谢懈械薪褌褍 (胁屑械褋褌芯 褝褌芯谐芯 斜褍写械褌 芯褌锌褉邪胁谢械薪 芯褌胁械褌 褋芯 褋褌邪褌褍褋 泻芯写芯屑 304). 袧芯, 械褋谢懈 胁褘 邪泻泻褍褉邪褌薪芯 锌褉芯械泻褌懈褉褍械褌械 胁邪褕械 锌褉懈谢芯卸械薪懈械, 屑褘 屑芯卸械褌械 锌芯谢褍褔懈褌褜 薪械芯斜褏芯写懈屑褘泄 屑懈薪懈屑褍屑 写邪薪薪褘褏, 薪械芯斜褏芯写懈屑褘褏 写谢褟 褌芯谐芯 褔褌芯斜褘 芯褌锌褉邪胁懈褌褜 褋褌邪褌褍褋 泻芯写 304 懈 褋芯褏褉邪薪懈褌褜 褌邪泻卸械 褉械褋褍褉褋褘 CPU 懈/懈谢懈 芯锌械褉邪褌懈胁薪芯泄 锌邪屑褟褌懈 (褋屑. 薪懈卸械 褉械邪谢懈蟹邪褑懈褞 褝褌芯谐芯 胁邪褉懈邪薪褌邪).

Tip

小褌邪褌褍褋 304 芯蟹薪邪褔邪械褌 "Not Modified". 协褌芯 胁邪卸薪褘泄 褋褌邪褌褍褋, 褌邪泻 泻邪泻 胁屑械褋褌械 褋 薪懈屑 薪械 芯褌锌褉邪胁谢褟械褌褋褟 蟹邪锌褉芯褕械薪薪褘泄 泻芯薪褌械薪褌. 袙屑械褋褌芯 褝褌芯谐芯, 芯褌胁械褌 褋芯褋褌芯懈褌 懈蟹 薪械斜芯谢褜褕芯谐芯 薪邪斜芯褉邪 褍泻邪蟹邪薪懈泄, 泻芯褌芯褉褘械 褋芯芯斜褖邪褞褌 泻褝褕褍, 褔褌芯 屑芯卸薪芯 懈褋锌芯谢褜蟹芯胁邪褌褜 褋芯褏褉邪薪褢薪薪褍褞 褉邪薪械械 胁械褉褋懈褞.

袣邪泻 懈 胁 褋谢褍褔邪械 褋 屑芯写械谢褜褞 芯泻芯薪褔邪薪懈褟 褋褉芯泻邪 写械泄褋褌胁懈褟, 械褋褌褜 写胁邪 HTTP 蟹邪谐芯谢芯胁泻邪, 泻芯褌芯褉褘械 屑芯谐褍褌 斜褘褌褜 懈褋锌芯谢褜蟹芯胁邪薪褘 写谢褟 褉械邪谢懈蟹邪褑懈懈 屑芯写械谢懈 胁邪谢懈写邪褑懈懈: ETagLast-Modified.

single: 袣褝褕懈褉芯胁邪薪懈械; 袟邪谐芯谢芯胁芯泻 Etag single: HTTP 蟹邪谐芯谢芯胁泻懈; Etag

袙邪谢懈写邪褑懈褟 锌褉懈 锌芯屑芯褖懈 蟹邪谐芯谢芯胁泻邪 ETag

袟邪谐芯谢芯胁芯泻 ETag - 褝褌芯 褋褌褉芯泻芯胁褘泄 蟹邪谐芯谢芯胁芯泻 (薪邪蟹褘胁邪械屑褘泄 "entity-tag"), 泻芯褌芯褉褘泄 械写懈薪褋褌胁械薪薪褘屑 芯斜褉邪蟹芯屑 懈写械薪褌懈褎懈褑懈褉褍械褌 锌褉械写褋褌邪胁谢械薪懈械 褑械谢械胁芯谐芯 褉械褋褍褉褋邪. 袨薪 谐械薪械褉懈褉褍械褌褋褟 懈 褍褋褌邪薪邪胁谢懈胁邪械褌褋褟 胁褋械褑械谢芯 胁薪褍褌褉懈 胁邪褕械谐芯 锌褉懈谢芯卸械薪懈褟, 褌邪泻 褔褌芯 胁褘 屑芯卸械褌械 锌芯薪褟褌褜, 泻 锌褉懈屑械褉褍, 褋芯芯褌胁械褌褋褌胁褍械褌 谢懈 泻褝褕懈褉芯胁邪薪薪褘泄 褉械褋褍褉褋 /about 褌芯屑褍, 泻芯褌芯褉褘泄 胁邪褕械 锌褉懈谢芯卸械薪懈械 褋芯斜懈褉邪械褌褋褟 胁械褉薪褍褌褜. 袟邪谐芯谢芯胁芯泻 ETag 锌芯褏芯卸 薪邪 芯褌锌械褔邪褌泻懈 锌邪谢褜褑械胁 懈 懈褋锌芯谢褜蟹褍械褌褋褟 写谢褟 斜褘褋褌褉芯谐芯 芯锌褉械写械谢械薪懈褟 褝泻胁懈胁邪谢械薪褌薪褘 谢懈 写胁械 胁械褉褋懈懈 褉械褋褍褉褋邪. 袣邪泻 懈 芯褌锌械褔邪褌泻懈 锌邪谢褜褑械胁, 泻邪卸写褘泄 ETag 写芯谢卸械薪 斜褘褌褜 褍薪懈泻邪谢褜薪褘屑 写谢褟 谢褞斜芯谐芯 锌褉械写褋褌邪胁谢械薪懈褟 芯写薪芯谐芯 懈 褌芯谐芯 卸械 褉械褋褍褉褋邪.

袛邪胁邪泄褌械 胁蟹谐谢褟薪械屑 薪邪 锌褉芯褋褌褍褞 褉械邪谢懈蟹邪褑懈褞, 泻芯褌芯褉邪褟 谐械薪械褉懈褉褍械褌 ETag 胁 胁懈写械 md5 褏褝褕邪 芯褌 泻芯薪褌械薪褌邪:

<?php
//...
public function indexAction()
{
    $response = $this->render('MyBundle:Main:index.html.twig');
    $response->setETag(md5($response->getContent()));
    $response->isNotModified($this->getRequest());

    return $response;
}

袦械褌芯写 Response::isNotModified() 褋褉邪胁薪懈胁邪械褌 ETag, 芯褌锌褉邪胁谢械薪薪褘泄 胁 蟹邪锌褉芯褋械 (Request) 褋 褝褌懈屑 卸械 褌邪谐芯屑 胁 芯褌胁械褌械 (Response). 袝褋谢懈 芯薪懈 褋芯胁锌邪写邪褞褌, 褝褌芯褌 屑械褌芯写 邪胁褌芯屑邪褌懈褔械褋泻懈 褍褋褌邪薪邪胁谢懈胁邪械褌 写谢褟 Response 褋褌邪褌褍褋 泻芯写 304.

协褌芯褌 邪谢谐芯褉懈褌屑 写芯褋褌邪褌芯褔薪芯 锌褉芯褋褌芯泄 懈 胁锌芯谢薪械 褌懈锌懈褔薪褘泄, 薪芯 胁邪屑 薪褍卸薪芯 褋芯蟹写邪褌褜 褝泻蟹械屑锌谢褟褉 Response 褑械谢懈泻芯屑, 锌械褉械写 褌械屑 泻邪泻 胁褘 锌芯谢褍褔懈褌械 胁芯蟹屑芯卸薪芯褋褌褜 褋褉邪胁薪懈褌褜 ETag'懈, 邪 褝褌芯 胁械褋褜屑邪 褉邪褋褌芯褔懈褌械谢褜薪芯. 袛褉褍谐懈屑懈 褋谢芯胁邪屑懈, 褝褌芯褌 锌芯写褏芯写 褋芯褏褉邪薪褟械褌 锌褉芯锌褍褋泻薪褍褞 褋锌芯褋芯斜薪芯褋褌褜, 薪芯 薪械 褉械褋褍褉褋褘 CPU.

袙 褋械泻褑懈懈 optimizing-cache-validation 屑褘 锌芯泻邪卸械屑 泻邪泻 屑芯卸薪芯 懈褋锌芯谢褜蟹芯胁邪褌褜 胁邪谢懈写邪褑懈褞 斜芯谢械械 懈薪褌械谢谢懈谐械薪褌薪芯 懈 芯锌褉械写械谢褟褌褜 胁邪谢懈写薪芯褋褌褜 泻褝褕邪 斜械蟹 懈蟹谢懈褕薪懈褏 蟹邪褌褉邪褌 褉械褋褍褉褋芯胁 褋械褉胁械褉邪.

Tip

Symfony2 褌邪泻卸械 锌芯写写械褉卸懈胁邪械褌 "褋谢邪斜褘械" ETag'懈 - 写谢褟 褝褌芯谐芯 薪邪写芯 锌械褉械写邪褌褜 true 胁 泻邪褔械褋褌胁械 胁褌芯褉芯谐芯 邪褉谐褍屑械薪褌邪 胁 屑械褌芯写 Symfony\\Component\\HttpFoundation\\Response::setETag.

single: 袣褝褕懈褉芯胁邪薪懈械; 袟邪谐芯谢芯胁芯泻 Last-Modified single: HTTP 蟹邪谐芯谢芯胁泻懈; Last-Modified

袙邪谢懈写邪褑懈褟 锌褉懈 锌芯屑芯褖懈 蟹邪谐芯谢芯胁泻邪 Last-Modified

袟邪谐芯谢芯胁芯泻 Last-Modified - 褝褌芯 胁褌芯褉芯泄 胁芯蟹屑芯卸薪褘泄 褋锌芯褋芯斜 胁邪谢懈写邪褑懈懈. 小谢械写褍褟 褋锌械褑懈褎懈泻邪褑懈懈 HTTP, "袟邪谐芯谢芯胁芯泻 Last-Modified 褋芯写械褉卸懈褌 写邪褌褍 懈 胁褉械屑褟, 泻芯谐写邪 锌褉械写褋褌邪胁谢械薪懈械 褉械褋褍褉褋邪 斜褘谢芯 懈蟹屑械薪械薪芯 胁 锌芯褋谢械写薪懈泄 褉邪蟹, 锌芯 胁械褉褋懈懈 懈褋褏芯写薪芯谐芯 褋械褉胁械褉邪". 袛褉褍谐懈屑懈 褋谢芯胁邪屑懈, 锌褉懈谢芯卸械薪懈械 锌褉懈薪懈屑邪械褌 褉械褕械薪懈械 芯 褌芯屑, 写芯谢卸械薪 谢懈 斜褘褌褜 芯斜薪芯胁谢褢薪 泻褝褕懈褉芯胁邪薪薪褘泄 泻芯薪褌械薪褌, 芯褋薪芯胁褘胁邪褟褋褜 薪邪 褌芯屑, 懈蟹屑械薪褟谢褋褟 谢懈 芯薪 褋芯 胁褉械屑械薪懈 泻褝褕懈褉芯胁邪薪懈褟.

袧邪锌褉懈屑械褉, 胁褘 屑芯卸械褌械 懈褋锌芯谢褜蟹芯胁邪褌褜 写邪褌褍 锌芯褋谢械写薪械谐芯 芯斜薪芯胁谢械薪懈褟 写谢褟 胁褋械褏 芯斜褗械泻褌芯胁, 薪械芯斜褏芯写懈屑褘褏 写谢褟 褋芯蟹写邪薪懈褟 锌褉械写褋褌邪胁谢械薪懈褟 褉械褋褍褉褋邪 胁 泻邪褔械褋褌胁械 蟹薪邪褔械薪懈褟 蟹邪谐芯谢芯胁泻邪 Last-Modified:

<?php
//...
public function showAction($articleSlug)
{
    // ...

    $articleDate = new \DateTime($article->getUpdatedAt());
    $authorDate = new \DateTime($author->getUpdatedAt());

    $date = $authorDate > $articleDate ? $authorDate : $articleDate;

    $response->setLastModified($date);
    $response->isNotModified($this->getRequest());

    return $response;
}

袦械褌芯写 Response::isNotModified() 褋褉邪胁薪懈胁邪械褌 蟹邪谐芯谢芯胁芯泻 If-Modified-Since, 芯褌锌褉邪胁谢械薪薪褘泄 胁 蟹邪锌褉芯褋械 褋 蟹邪谐芯谢芯胁泻芯屑 Last-Modified, 褍褋褌邪薪芯胁谢械薪薪芯屑 胁 芯褌胁械褌械. 袝褋谢懈 芯薪懈 懈写械薪褌懈褔薪褘, Response 斜褍写械褌 褍褋褌邪薪芯胁谢械薪 褋褌邪褌褍褋 泻芯写 304.

Note

袟邪谐芯谢芯胁芯泻 蟹邪锌褉芯褋邪 If-Modified-Since 褋芯芯褌胁械褌褋褌胁褍械褌 蟹邪谐芯谢芯胁泻褍 Last-Modified 锌芯褋谢械写薪械谐芯 芯褌胁械褌邪, 芯褌锌褉邪胁谢械薪薪芯谐芯 泻谢懈械薪褌褍 写谢褟 薪械泻芯褌芯褉芯谐芯 褉械褋褍褉褋邪. 孝邪泻懈屑 芯斜褉邪蟹芯屑, 泻谢懈械薪褌 懈 褋械褉胁械褉 芯斜褖邪褞褌褋褟 写褉褍谐 褋 写褉褍谐芯屑 懈 芯锌褉械写械谢褟褞褌 斜褘谢 谢懈 褉械褋褍褉褋 芯斜薪芯胁谢褢薪 褋 屑芯屑械薪褌邪 械谐芯 泻褝褕懈褉芯胁邪薪懈褟.

single: 袣褝褕懈褉芯胁邪薪懈械; 校褋谢芯胁薪褘泄 Get single: HTTP; 304

袨锌褌懈屑懈蟹邪褑懈褟 胁邪褕械谐芯 泻芯写邪 锌褉懈 锌芯屑芯褖懈 屑械褌芯写邪 胁邪谢懈写邪褑懈懈

袨褋薪芯胁薪邪褟 褑械谢褜 谢褞斜芯泄 褋褌褉邪褌械谐懈懈 泻褝褕懈褉芯胁邪薪懈褟 - 锌芯薪懈蟹懈褌褜 薪邪谐褉褍蟹泻褍 薪邪 锌褉懈谢芯卸械薪懈械. 袠薪褘屑懈 褋谢芯胁邪屑懈, 褔械屑 屑械薪褜褕械 写械谢邪械褌 胁邪褕械 锌褉懈谢芯卸械薪懈械 写谢褟 褌芯谐芯, 褔褌芯斜褘 胁械褉薪褍褌褜 芯褌胁械褌 304, 褌械屑 谢褍褔褕械. 袦械褌芯写 Response::isNotModified() 懈屑械薪薪芯 褝褌懈屑 懈 蟹邪薪懈屑邪械褌褋褟 锌褉懈 懈褋锌芯谢褜蟹芯胁邪薪懈懈 锌褉芯褋褌芯谐芯 懈 褝褎褎械泻褌懈胁薪芯谐芯 褕邪斜谢芯薪邪:

<?php
//...
public function showAction($articleSlug)
{
    // 袩芯谢褍褔邪械屑 屑懈薪懈屑褍屑 懈薪褎芯褉屑邪褑懈懈 写谢褟 胁褘褔懈褋谢械薪懈褟
    // 蟹薪邪褔械薪懈泄 写谢褟 蟹邪谐芯谢芯胁泻芯胁 ETag 懈谢懈 Last-Modified
    // (芯褋薪芯胁褘胁邪褟褋褜 薪邪 蟹邪锌褉芯褋械 Request, 写邪薪薪褘褏, 锌芯谢褍褔邪械屑褘褏 懈蟹 斜邪蟹褘 写邪薪薪褘褏
    // 懈谢懈 卸械 懈蟹 褏褉邪薪懈谢懈褖邪 泻谢褞褔-蟹薪邪褔械薪懈械)
    $article = // ...

    // 小芯蟹写邪褢屑 芯褌胁械褌 Response 褋 蟹邪谐芯谢芯胁泻芯屑 ETag 懈/懈谢懈 Last-Modified
    $response = new Response();
    $response->setETag($article->computeETag());
    $response->setLastModified($article->getPublishedAt());

    // 袩褉芯胁械褉褟械屑, 褔褌芯 芯褌胁械褌 薪械 屑芯写懈褎懈褑懈褉芯胁邪谢褋褟 写谢褟 褝褌芯谐芯 蟹邪锌褉芯褋邪
    if ($response->isNotModified($this->getRequest())) {
        // 胁芯蟹胁褉邪褖邪械屑 芯褌胁械褌 304
        return $response;
    } else {
        // 写械谢邪械屑 写芯锌芯谢薪懈褌械谢褜薪褘械 写械泄褋褌胁懈褟, 薪邪锌褉懈屑械褉, 锌芯谢褍褔邪械屑 写芯锌芯谢薪懈褌械谢褜薪褘械 写邪薪薪褘械
        $comments = // ...

        // 懈谢懈 芯褌芯斜褉邪卸邪械屑 褕邪斜谢芯薪 锌褉懈 锌芯屑芯褖懈 $response, 泻芯褌芯褉褘泄 斜褘谢 褋芯蟹写邪薪 褉邪薪械械
        return $this->render(
            'MyBundle:MyController:article.html.twig',
            array('article' => $article, 'comments' => $comments),
            $response
        );
    }
}

袝褋谢懈 芯褌胁械褌 Response 薪械 屑芯写懈褎懈褑懈褉芯胁邪谢褋褟, 屑械褌芯写 isNotModified() 邪胁褌芯屑邪褌懈褔械褋泻懈 褍褋褌邪薪邪胁谢懈胁邪械褌 褋褌邪褌褍褋 泻芯写 芯褌胁械褌邪 胁 304, 褍写邪谢褟械褌 泻芯薪褌械薪褌 懈 褍写邪谢褟械褌 薪械泻芯褌芯褉褘械 蟹邪谐芯谢芯胁泻懈, 泻芯褌芯褉褘械 薪械 写芯谢卸薪褘 锌褉懈褋褍褌褋褌胁芯胁邪褌褜 胁 芯褌胁械褌械 304 (褋屑. 屑械褌芯写 Symfony\\Component\\HttpFoundation\\Response::setNotModified).

single: 袣褝褕懈褉芯胁邪薪懈械; 袙邪褉懈邪褑懈懈 single: HTTP 蟹邪谐芯谢芯胁泻懈; Vary

袙邪褉懈邪褑懈懈 芯褌胁械褌邪

袪邪薪械械 胁褘 褍蟹薪邪谢懈, 褔褌芯 泻邪卸写褘泄 URI 懈屑械械褌 械写懈薪褋褌胁械薪薪芯械 锌褉械写褋褌邪胁谢械薪懈械 褑械谢械胁芯谐芯 褉械褋褍褉褋邪. 袩芯 褍屑芯谢褔邪薪懈褞, HTTP 泻褝褕懈褉芯胁邪薪懈械 胁褘锌芯谢薪褟械褌褋褟 褋 懈褋锌芯谢褜蟹芯胁邪薪懈械屑 URI 褉械褋褍褉褋邪 胁 泻邪褔械褋褌胁械 泻谢褞褔邪 泻 蟹薪邪褔械薪懈褞 泻褝褕邪. 袝褋谢懈 写胁邪 褔械谢芯胁械泻邪 蟹邪锌褉芯褋褟褌 芯写懈薪 懈 褌芯褌 卸械 URI 写谢褟 泻褝褕懈褉褍械屑芯谐芯 褉械褋褍褉褋邪, 胁褌芯褉芯泄 泻谢懈械薪褌 锌芯谢褍褔懈褌 褍卸械 泻褝褕懈褉芯胁邪薪薪褍褞 胁械褉褋懈褞.

袠薪芯谐写邪 褝褌芯谐芯 薪械 写芯褋褌邪褌芯褔薪芯 懈 褌褉械斜褍械褌褋褟 泻褝褕懈褉芯胁邪褌褜 褉邪蟹谢懈褔薪褘械 胁械褉褋懈懈 芯写薪芯谐芯 懈 褌芯谐芯 卸械 URI, 芯褋薪芯胁褘胁邪褟褋褜 薪邪 蟹薪邪褔械薪懈懈 芯写薪芯谐芯 懈谢懈 薪械褋泻芯谢褜泻懈褏 蟹邪谐芯谢芯胁泻芯胁. 袧邪锌褉懈屑械褉, 械褋谢懈 胁褘 褋卸懈屑邪械褌械 褋褌褉邪薪懈褑褘 写谢褟 泻谢懈薪械薪褌芯胁, 泻芯褌芯褉褘械 锌芯写写械褉卸懈胁邪褞褌 褋卸邪褌懈械, 谢褞斜芯泄 URI 斜褍写械褌 懈屑械褌褜 写胁邪 锌褉械写褋褌邪胁谢械薪懈褟: 芯写薪芯 写谢褟 泻谢懈械薪褌芯胁, 锌芯写写械褉卸懈胁邪褞褖懈褏 褋卸邪褌懈械, 懈 芯写薪芯 写谢褟 褌械褏 泻褌芯 薪械 锌芯写写械褉卸懈胁邪械褌. 协褌芯 芯锌褉械写械谢褟械褌褋褟 薪邪 芯褋薪芯胁械 蟹薪邪褔械薪懈褟 蟹邪谐芯谢芯胁泻邪 蟹邪锌褉芯褋邪 Accept-Encoding.

袙 褝褌芯屑 褋谢褍褔邪械, 胁邪屑 薪械芯斜褏芯写懈屑芯 褏褉邪薪懈褌褜 芯斜械 胁械褉褋懈懈 芯褌胁械褌邪 写谢褟 薪械泻芯褌芯褉芯谐芯 褉械褋褍褉褋邪 - 褋卸邪褌褍褞 懈 薪械 褋卸邪褌褍褞 懈 胁芯蟹胁褉邪褖邪褌褜 械械, 芯褋薪芯胁褘胁邪褟褋褜 薪邪 蟹薪邪褔械薪懈懈 蟹邪谐芯谢芯胁泻邪 蟹邪锌褉芯褋邪 Accept-Encoding. 协褌芯谐芯 屑芯卸薪芯 写芯褋褌懈褔褜 锌褉懈 锌芯屑芯褖懈 蟹邪谐芯谢芯胁泻邪 芯褌胁械褌邪 Vary, 泻芯褌芯褉褘泄 褟胁谢褟械褌褋褟 褋锌懈褋泻芯屑 (褉邪蟹写械谢懈褌械谢懈 - 蟹邪锌褟褌褘械) 褉邪蟹谢懈褔薪褘褏 蟹邪谐芯谢芯胁泻芯胁, 褔褜懈 蟹薪邪褔械薪懈褟 锌械褉械泻谢褞褔邪褞褌 褉邪蟹谢懈褔薪褘械 锌褉械写褋褌邪胁谢械薪懈褟 蟹邪锌褉芯褕械薪薪芯谐芯 褉械褋褍褉褋邪:

Vary: Accept-Encoding, User-Agent

Tip

袟邪谐芯谢芯胁芯泻 Vary 懈蟹 锌褉懈屑械褉邪 胁褘褕械 锌芯蟹胁芯谢褟械褌 泻褝褕懈褉芯胁邪褌褜 褉邪蟹谢懈褔薪褘械 胁械褉褋懈懈 写谢褟 泻邪卸写芯谐芯 褉械褋褍褉褋邪, 芯褋薪芯胁褘胁邪褟褋褜 薪邪 URI 懈 蟹薪邪褔械薪懈懈 蟹邪谐芯谢芯胁泻芯胁 蟹邪锌褉芯褋邪 Accept-EncodingUser-Agent.

袨斜褗械泻褌 Response 锌褉械写芯褋褌邪胁谢褟械褌 锌褉芯褋褌芯泄 懈薪褌械褉褎械泄褋 写谢褟 褍锌褉邪胁谢械薪懈褟 蟹邪谐芯谢芯胁泻芯屑 Vary:

<?php
//...
// 褍褋褌邪薪邪胁谢懈胁邪械屑 芯写懈薪 蟹邪谐芯谢芯胁芯泻 vary
$response->setVary('Accept-Encoding');

// 褍褋褌邪薪邪胁谢懈胁邪械屑 薪械褋泻芯谢褜泻芯 蟹邪谐芯谢芯胁泻芯胁 vary
$response->setVary(array('Accept-Encoding', 'User-Agent'));

袦械褌芯写 setVary() 锌褉懈薪懈屑邪械褌 胁 泻邪褔械褋褌胁械 锌邪褉邪屑械褌褉邪 懈屑褟 蟹邪谐芯谢芯胁泻邪 懈谢懈 卸械 屑邪褋褋懈胁 薪邪懈屑械薪芯胁邪薪懈泄 蟹邪谐芯谢芯胁泻芯胁, 薪邪 芯褋薪芯胁邪薪懈懈 蟹薪邪褔械薪懈泄 泻芯褌芯褉褘褏 薪械芯斜褏芯写懈屑芯 胁邪褉褜懈褉芯胁邪褌褜 芯褌胁械褌.

袨泻芯薪褔邪薪懈械 褋褉芯泻邪 写械泄褋褌胁懈褟 懈 胁邪谢懈写邪褑懈褟

袙褘 屑芯卸械褌械 懈褋锌芯谢褜蟹芯胁邪褌褜 芯泻芯薪褔邪薪懈械 褋褉芯泻邪 写械泄褋褌胁懈褟 褋芯胁屑械褋褌薪芯 褋 胁邪谢懈写邪褑懈械泄 胁 芯写薪芯屑 懈 褌芯屑 卸械 褝泻蟹械屑锌谢褟褉械 Response. 袝褋谢懈 芯泻芯薪褔邪薪懈械 褋褉芯泻邪 写械泄褋褌胁懈褟 褉邪斜芯褌邪械褌 褉邪薪褜褕械 胁邪谢懈写邪褑懈懈, 胁褘 褋屑芯卸械褌械 锌芯谢褍褔懈褌褜 谢褍褔褕懈械 锌褉械懈屑褍褖械褋褌胁邪 芯褌 芯斜械懈褏 屑芯写械谢械泄. 袛褉褍谐懈屑懈 褋谢芯胁邪屑懈, 懈褋锌芯谢褜蟹褍褟 褋芯胁屑械褋褌薪芯 屑芯写械谢懈 芯泻芯薪褔邪薪懈械 褋褉芯泻邪 写械泄褋褌胁懈褟 懈 胁邪谢懈写邪褑懈懈 胁褘 屑芯卸械褌械 锌褉芯懈薪褋褌褉褍泻褌懈褉芯胁邪褌褜 泻褝褕 褏褉邪薪懈褌褜 泻芯薪褌械薪褌 锌芯泻邪 褋 薪械泻芯褌芯褉褘屑 懈薪褌械褉胁邪谢芯屑 芯褋褍褖械褋褌胁谢褟械褌褋褟 (芯泻芯薪褔邪薪懈械 褋褉芯泻邪 写械泄褋褌胁懈褟) 锌褉芯胁械褉泻邪, 褔褌芯 泻芯薪褌械薪褌 胁褋褢 械褖褢 胁邪谢懈写械薪.

pair: 袣褝褕懈褉芯胁邪薪懈械; 袣芯薪褎懈谐褍褉邪褑懈褟

袛褉褍谐懈械 屑械褌芯写褘 泻谢邪褋褋邪 Response

袣谢邪褋褋 Response 褋芯写械褉卸懈褌 褌邪泻卸械 写褉褍谐懈械 屑械褌芯写褘 写谢褟 褉邪斜芯褌褘 褋 泻褝褕械屑. 袩褉懈屑械褉 薪懈卸械 懈谢谢褞褋褌褉懈褉褍械褌 褋邪屑褘械 褔邪褋褌芯 褍锌芯褌褉械斜谢褟械屑褘械 懈蟹 薪懈褏:

<?php
// 锌芯屑械褌懈褌褜 芯褌胁械褌 泻邪泻 "锌褉芯褋褉芯褔械薪薪褘泄"
$response->expire();

// 肖芯褉褋懈褉芯胁邪褌褜 胁芯蟹胁褉邪褌 芯褌胁械褌邪 304 斜械蟹 泻芯薪褌械薪褌邪
$response->setNotModified();

袙 写芯锌芯谢薪械薪懈械 泻 褝褌芯屑褍, 胁褋械 芯褋薪芯胁薪褘械 HTTP 芯褌薪芯褋褟褖懈械褋褟 泻 泻褝褕褍, 屑芯谐褍褌 斜褘褌褜 褍褋褌邪薪芯胁谢械薪褘 锌褉懈 锌芯屑芯褖懈 芯写薪芯谐芯 屑械褌芯写邪 setCache():

<?php
// 校褋褌邪薪芯胁懈褌褜 蟹邪谐芯谢芯胁泻懈 写谢褟 泻褝褕懈褉芯胁邪薪懈褟 芯写薪懈屑 胁褘蟹芯胁芯屑
$response->setCache(array(
    'etag'          => $etag,
    'last_modified' => $date,
    'max_age'       => 10,
    's_maxage'      => 10,
    'public'        => true,
    // 'private'    => true,
));

single: 袣褝褕懈褉芯胁邪薪懈械; ESI single: ESI

袠褋锌芯谢褜蟹芯胁邪薪懈械 ESI (Edge Side Includes)

袣褝褕懈褉褍褞褖懈械 褕谢褞蟹褘 - 褝褌芯 芯褌谢懈褔薪褘泄 褋锌芯褋芯斜 褋写械谢邪褌褜 胁邪褕 褋邪泄褌 斜芯谢械械 锌褉芯懈蟹胁芯写懈褌械谢褜薪褘屑. 袧芯 芯薪懈 褌邪泻卸械 懈屑械褞褌 懈 芯写薪芯 芯谐褉邪薪懈褔械薪懈械: 芯薪懈 屑芯谐褍褌 泻褝褕懈褉芯胁邪褌褜 谢懈褕褜 褋褌褉邪薪懈褑褘 褑械谢懈泻芯屑. 袝褋谢懈 胁褘 锌芯 泻邪泻懈屑-褌芯 锌褉懈褔懈薪邪屑 薪械 屑芯卸械褌械 泻褝褕懈褉芯胁邪褌褜 褋褌褉邪薪懈褑褘 褑械谢懈泻芯屑 懈谢懈 胁 褋谢褍褔邪械 泻芯谐写邪 褋褌褉邪薪懈褑邪 懈屑械械褌 薪械褋泻芯谢褜泻芯 写懈薪邪屑懈褔械褋泻懈褏 褔邪褋褌械泄, 胁褘 胁褘褕谢懈 懈蟹 蟹芯薪褘 褍写邪褔懈. 袣 褋褔邪褋褌褜褞, Symfony2 锌褉械写芯褋褌邪胁谢褟械褌 褉械褕械薪懈械 写谢褟 褝褌懈褏 褋谢褍褔邪械胁, 芯褋薪芯胁邪薪薪芯械 薪邪 褌械褏薪芯谢芯谐懈懈 ESI, 懈谢懈 Edge Side Includes. 袣芯屑锌邪薪懈褟 Akama茂 褋芯蟹写邪谢邪 褝褌褍 褋锌械褑懈褎懈泻邪褑懈褞 锌芯褔褌懈 10 谢械褌 薪邪蟹邪写, 懈 芯薪邪 锌芯蟹胁芯谢褟械褌 懈屑械褌褜 写谢褟 芯褌写械谢褜薪褘褏 褔邪褋褌械泄 褋褌褉邪薪懈褑褘 褉邪蟹谢懈褔薪褘械 褋褌褉邪褌械谐懈懈 泻褝褕懈褉芯胁邪薪懈褟.

小锌械褑懈褎懈泻邪褑懈褟 ESI 芯锌懈褋褘胁邪械褌 褌邪谐懈, 泻芯褌芯褉褘械 胁褘 屑芯卸械褌械 写芯斜邪胁懈褌褜 胁 胁邪褕懈 褋褌褉邪薪懈褑褘 写谢褟 芯斜褖械薪懈褟 褋 泻褝褕懈褉褍褞褖懈屑 褕谢褞蟹芯屑. 袙 Symfony2 褉械邪谢懈蟹芯胁邪薪 谢懈褕褜 芯写懈薪 褌邪谐 - include, 褌邪泻 泻邪泻 褝褌芯 薪邪懈斜芯谢械械 锌芯谢械蟹薪褘泄 褌邪谐 胁薪械 泻芯薪褌械泻褋褌邪 Akama茂:

<html>
    <body>
        Some content

        <!-- 袩芯写泻谢褞褔邪械屑 泻芯薪褌械薪褌 写褉褍谐芯泄 褋褌褉邪薪懈褑褘 -->
        <esi:include src="http://..." />

        More content
    </body>
</html>

Note

袨斜褉邪褌懈褌械 胁薪懈屑邪薪懈械, 胁 锌褉懈屑械褉械 胁褘褕械, 褔褌芯 写谢褟 ESI 褌邪谐邪 褍泻邪蟹邪薪 锌芯谢薪褘泄 URL. ESI 褌邪谐 锌褉械写褋褌邪胁谢褟械褌 褋芯斜芯泄 褎褉邪谐屑械薪褌 褋褌褉邪薪懈褑褘, 泻芯褌芯褉褘泄 屑芯卸薪芯 锌芯谢褍褔懈褌褜 锌芯 褝褌芯屑褍 URL.

袩褉懈 芯斜褉邪斜芯褌泻械 蟹邪锌褉芯褋邪, 泻褝褕懈褉褍褞褖懈泄 褕谢褞蟹 锌芯谢褍褔邪械褌 褋褌褉邪薪懈褑褍 褑械谢懈泻芯屑 懈蟹 褋胁芯械谐芯 泻褝褕邪 懈谢懈 卸械 蟹邪锌褉邪褕懈胁邪械褌 械谐芯 褍 锌褉懈谢芯卸械薪懈褟. 袝褋谢懈 芯褌胁械褌 褋芯写械褉卸懈褌 芯写懈薪 懈谢懈 斜芯谢械械 ESI 褌邪谐芯胁, 芯薪懈 芯斜褉邪斜邪褌褘胁邪褞褌褋褟 褌械屑 卸械 芯斜褉邪蟹芯屑. 袛褉褍谐懈屑懈 褋谢芯胁邪屑懈, 泻褝褕懈褉褍褖懈泄 褕谢褞蟹 锌芯谢褍褔邪械褌 胁泻谢褞褔褢薪薪褘械 褎褉邪谐屑械薪褌褘 褋褌褉邪薪懈褑 懈蟹 褋胁芯械谐芯 泻褝褕邪, 谢懈斜芯 蟹邪锌褉邪褕懈胁邪械褌 褝褌懈 褎褉邪谐屑械薪褌褘 褍 锌褉懈谢芯卸械薪懈褟. 袣芯谐写邪 胁褋械 ESI 褌邪谐懈 芯斜褉邪斜芯褌邪薪褘, 褕谢褞蟹 胁泻谢褞褔邪械褌 胁褋械 褎褉邪谐屑械薪褌褘 胁 芯褋薪芯胁薪褍褞 褋褌褉邪薪懈褑褍 懈 芯褌锌褉邪胁谢褟械褌 懈褌芯谐芯胁褘泄 泻芯薪褌械薪褌 泻谢懈械薪褌褍.

袙褋褢 褝褌芯 锌褉芯懈褋褏芯写懈褌 薪械蟹邪屑械褌薪芯 薪邪 褍褉芯胁薪械 泻褝褕懈褉褍褞褖械谐芯 褕谢褞蟹邪 (褌.械. 胁薪械 胁邪褕械谐芯 锌褉懈谢芯卸械薪懈褟). 袣邪泻 胁褘 褍胁懈写懈褌械 写邪谢械械, 械褋谢懈 胁褘 蟹邪褏芯褌懈褌械 懈褋锌芯谢褜蟹芯胁邪褌褜 锌褉械懈屑褍褖械褋褌胁邪, 泻芯褌芯褉褘械 锌褉械写芯褋褌邪胁谢褟褞褌 ESI 褌邪谐懈, Symfony2 锌芯蟹胁芯谢懈褌 胁邪屑 锌芯写泻谢褞褔邪褌褜 懈褏 薪械 锌褉懈谢邪谐邪褟 芯褋芯斜褘褏 褍褋懈谢懈泄.

袠褋锌芯谢褜蟹芯胁邪薪懈械 ESI 胁 Symfony2

袙芯-锌械褉胁褘褏, 锌械褉械写 懈褋锌芯谢褜蟹芯胁邪薪懈械屑 ESI, 褍斜械写懈褌械褋褜, 褔褌芯 胁褘 邪泻褌懈胁懈褉芯胁邪谢懈 懈褏 胁 薪邪褋褌褉芯泄泻邪褏 锌褉懈谢芯卸械薪懈褟:

# app/config/config.yml
framework:
    # ...
    esi: { enabled: true }
<!-- app/config/config.xml -->
<framework:config ...>
    <!-- ... -->
    <framework:esi enabled="true" />
</framework:config>
<?php
// app/config/config.php
$container->loadFromExtension('framework', array(
    // ...
    'esi'    => array('enabled' => true),
));

孝械锌械褉褜, 锌褉械写锌芯谢芯卸懈屑, 褔褌芯 褍 胁邪褋 械褋褌褜 褋褌褉邪薪懈褑邪, 泻芯褌芯褉邪褟 锌芯 斜芯谢褜褕械泄 褔邪褋褌懈 褋褌邪褌懈褔械褋泻邪褟, 蟹邪 懈褋泻谢褞褔械薪懈械屑 薪芯胁芯褋褌械泄, 褉邪褋锌芯谢芯卸械薪薪褘褏 锌芯写 泻芯薪褌械薪褌芯屑. 袩褉懈 锌芯屑芯褖懈 ESI 胁褘 屑芯卸械褌械 泻褝褕懈褉芯胁邪褌褜 薪芯胁芯褋褌懈 薪械蟹邪胁懈褋懈屑芯 芯褌 芯褋褌邪谢褜薪芯泄 褋褌褉邪薪懈褑褘.

<?php
// ...
public function indexAction()
{
    $response = $this->render('MyBundle:MyController:index.html.twig');
    $response->setSharedMaxAge(600);

    return $response;
}

袙 褝褌芯屑 锌褉懈屑械褉械 胁褘 褍褋褌邪薪邪胁谢懈胁邪械褌械 写谢褟 胁褋械泄 褋褌褉邪薪懈褑褘 胁褉械屑褟 卸懈蟹薪懈 泻褝褕邪 胁 10 屑懈薪褍褌. 袟邪褌械屑, 锌芯写泻谢褞褔懈褌械 薪芯胁芯褋褌懈 胁 褕邪斜谢芯薪 锌褉懈 锌芯屑芯褖懈 胁褋褌褉邪懈胁邪薪懈褟 写械泄褋褌胁懈褟. 协褌芯 屑芯卸薪芯 褋写械谢邪褌褜 锌褉懈 锌芯屑芯褖懈 褏械谢锌械褉邪 render (褋屑. templating-embedding-controller).

孝邪泻 泻邪泻 胁褋褌褉芯械薪薪褘泄 泻芯薪褌械薪褌 锌芯褋褌褍锌邪械褌 懈蟹 写褉褍谐芯泄 褋褌褉邪薪懈褑褘 (懈谢懈 泻芯薪褌褉芯谢谢械褉邪 胁 写邪薪薪芯屑 褋谢褍褔邪械), Symfony2 懈褋锌芯谢褜蟹褍械褌 褋褌邪薪写邪褉褌薪褘泄 褏褝谢锌械褉 render 写谢褟 泻芯薪褎懈谐褍褉懈褉芯胁邪薪懈褟 ESI 褌邪谐邪:

{% render '...:news' with {}, {'standalone': true} %}
<?php echo $view['actions']->render('...:news', array(), array('standalone' => true)) ?>

校泻邪蟹邪胁 锌邪褉邪屑械褌褉 standalone 褉邪胁薪褘泄 true, 胁褘 谐芯胁芯褉懈褌械 Symfony2, 褔褌芯 写械泄褋褌胁懈械 写芯谢卸薪芯 芯褌芯斜褉邪卸邪褌褜褋褟 泻邪泻 ESI 褌邪谐. 袙褘 胁芯蟹屑芯卸薪芯 褍写懈胁谢械薪褘 - 蟹邪褔械屑 懈褋锌芯谢褜蟹芯胁邪褌褜 褏械谢锌械褉, 胁屑械褋褌芯 褌芯谐芯, 褔褌芯斜褘 薪邪锌懈褋邪褌褜 ESI 褌邪谐 褋邪屑芯褋褌芯褟褌械谢褜薪芯. 协褌芯 薪械芯斜褏芯写懈屑芯 写谢褟 褌芯谐芯, 褔褌芯斜褘 胁邪褕械 锌褉懈谢芯卸械薪懈械 褉邪斜芯褌邪谢芯 写邪卸械 械褋谢懈 薪械 褍褋褌邪薪芯胁谢械薪 薪懈泻邪泻芯泄 泻褝褕懈褉褍褞褖懈泄 褕谢褞蟹. 袛邪胁邪泄褌械 褉邪蟹斜械褉褢屑, 泻邪泻 褉邪斜芯褌邪械褌 褝褌邪 泻芯薪褋褌褉褍泻褑懈褟.

袣芯谐写邪 芯锌褑懈褟 standalone 懈屑械械褌 蟹薪邪褔械薪懈械 false (锌芯 褍屑芯谢褔邪薪懈褞), Symfony2 芯斜褗械写懈薪褟械褌 泻芯薪褌械薪褌 锌芯写泻谢褞褔褢薪薪芯泄 褋褌褉邪薪懈褑褘 褋 泻芯薪褌械薪褌芯屑 芯褋薪芯胁薪芯泄 锌械褉械写 芯褌锌褉邪胁泻芯泄 芯褌胁械褌邪 薪邪 泻谢懈械薪褌. 袧芯 泻芯谐写邪 standalone 懈屑械械褌 蟹薪邪褔械薪懈械 true, 械褋谢懈 Symfony2 芯锌褉械写械谢褟械褌, 褔褌芯 泻褝褕懈褉褍褞褖懈泄 褕谢褞蟹, 褔械褉械蟹 泻芯褌芯褉褘泄 褉邪斜芯褌邪械褌 锌褉懈谢芯卸械薪懈械, 锌芯写写械褉卸懈胁邪械褌 ESI, 谐械薪械褉懈褌褋褟 ESI 褌邪谐. 袧芯 械褋谢懈 褕谢褞蟹 薪械 芯斜薪邪褉褍卸械薪 懈谢懈 卸械 芯薪 薪械 锌芯写写械褉卸懈胁邪械褌 ESI, Symfony2 斜褍写械褌 芯斜褗械写懈薪褟褌褜 泻芯薪褌械薪褌 锌芯写泻谢褞褔褢薪薪芯泄 褋褌褉邪薪懈褑褘 褋 泻芯薪褌械薪褌芯屑 芯褋薪芯胁薪芯泄 褌邪泻卸械, 泻邪泻 褝褌芯 斜褘谢芯 斜褘 胁褘锌芯谢薪械薪芯 锌褉懈 蟹薪邪褔械薪懈懈 standalone 褉邪胁薪芯屑 false.

Note

Symfony2 芯锌褉械写械谢褟械褌, 锌芯写写械褉卸懈胁邪械褌 谢懈 褕谢褞蟹 ESI, 锌褉懈 锌芯屑芯褖懈 写褉褍谐芯泄 褋锌械褑懈褎懈泻邪褑懈懈 Akama茂, 泻芯褌芯褉邪褟 锌芯写写械褉卸懈胁邪械褌褋褟 芯斜褉邪褌薪褘屑 锌褉芯泻褋懈 Symfony2 "懈蟹 泻芯褉芯斜泻懈".

孝械锌械褉褜 写谢褟 胁褋褌褉芯械薪薪芯谐芯 写械泄褋褌胁懈褟 胁褘 屑芯卸械褌械 褍泻邪蟹邪褌褜 褋芯斜褋褌胁械薪薪褘械 锌褉邪胁懈谢邪 泻褝褕懈褉芯胁邪薪懈褟, 薪械蟹邪胁懈褋懈屑芯 芯褌 谐谢邪胁薪芯泄 褋褌褉邪薪懈褑褘:

<?php
public function newsAction()
{
  // ...

  $response->setSharedMaxAge(60);
}

袩褉懈 锌芯屑芯褖懈 ESI 泻褝褕 褋褌褉邪薪懈褑褘 斜褍写械褌 胁邪谢懈写薪褘屑 胁 褌械褔械薪懈械 600 褋械泻褍薪写, 薪芯 泻芯屑锌芯薪械薪褌 薪芯胁芯褋褌械泄 斜褍写械褌 泻褝褕懈褉芯胁邪褌褜褋褟 褌芯谢褜泻芯 薪邪 60 褋械泻褍薪写.

孝褉械斜芯胁邪薪懈械屑, 锌褉懈 懈褋锌芯谢褜蟹芯胁邪薪懈懈 ESI, 褟胁谢褟械褌褋褟 褋谢械写褍褞褖械械: 胁褋褌褉芯械薪薪芯械 写械泄褋褌胁懈械 写芯谢卸薪芯 斜褘褌褜 写芯褋褌褍锌薪芯 褔械褉械蟹 薪械泻芯褌芯褉褘泄 URL, 褔褌芯斜褘 泻褝褕懈褉褍褞褖懈泄 褕谢褞蟹 屑芯谐 锌芯谢褍褔懈褌褜 械谐芯 泻芯薪褌械薪褌 薪械蟹邪胁懈褋懈屑芯 芯褌 芯褋褌邪谢褜薪芯泄 褋褌褉邪薪懈褑褘. 袣芯薪械褔薪芯, 写械泄褋褌胁懈械 薪械 屑芯卸械褌 斜褘褌褜 写芯褋褌褍锌薪褘屑 斜械蟹 屑邪褉褕褉褍褌邪, 泻芯褌芯褉褘泄 褍泻邪蟹褘胁邪械褌 薪邪 薪械谐芯. Symfony2 蟹邪斜芯褌懈褌褋褟 懈 芯斜 褝褌芯屑 锌褉懈 锌芯屑芯褖懈 斜邪蟹芯胁芯谐芯 屑邪褉褕褉褍褌邪 懈 泻芯薪褌褉芯谢谢械褉邪. 效褌芯斜褘 ESI 褌邪谐 include 褉邪斜芯褌邪谢, 胁褘 写芯谢卸薪褘 芯锌褉械写械谢懈褌褜 屑邪褉褕褉褍褌 _internal:

# app/config/routing.yml
_internal:
    resource: "@FrameworkBundle/Resources/config/routing/internal.xml"
    prefix:   /_internal
<!-- app/config/routing.xml -->
<?xml version="1.0" encoding="UTF-8" ?>

<routes xmlns="http://symfony.com/schema/routing"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://symfony.com/schema/routing http://symfony.com/schema/routing/routing-1.0.xsd">

    <import resource="@FrameworkBundle/Resources/config/routing/internal.xml" prefix="/_internal" />
</routes>
<?php
// app/config/routing.php
use Symfony\Component\Routing\RouteCollection;
use Symfony\Component\Routing\Route;

$collection->addCollection($loader->import('@FrameworkBundle/Resources/config/routing/internal.xml', '/_internal'));

return $collection;

Tip

孝邪泻 泻邪泻 屑邪褉褕褉褍褌 锌芯蟹胁芯谢褟械褌 锌芯谢褍褔懈褌褜 写芯褋褌褍锌 泻 胁邪褕械屑褍 写械泄褋褌胁懈褞 锌褉懈 锌芯屑芯褖懈 URL, 胁褘 胁芯蟹屑芯卸薪芯 蟹邪褏芯褌懈褌械 蟹邪褖懈褌懈褌褜 械谐芯 锌褉懈 锌芯屑芯褖懈 斜褉邪薪写屑邪褍褝褉邪 Symfony2 (褉邪蟹褉械褕懈胁 写芯褋褌褍锌 锌芯 IP 胁邪褕械谐芯 芯斜褉邪褌薪芯谐芯 锌褉芯泻褋懈). 小屑. 褋械泻褑懈褞 袟邪褖懈褌邪 锌芯 IP <book-security-securing-ip> 谐谢邪胁褘 袘械蟹芯锌邪褋薪芯褋褌褜 </book/security>.

小邪屑芯械 斜芯谢褜褕芯械 锌褉械懈屑褍褖械褋褌胁芯 褝褌芯泄 褋褌褉邪褌械谐懈懈 泻褝褕懈褉芯胁邪薪懈褟 蟹邪泻谢褞褔邪械褌褋褟 胁 褌芯屑, 褔褌芯 胁褘 屑芯卸械褌械 写械谢邪褌褜 胁邪褕械 锌褉懈谢芯卸械薪懈械 薪邪褋褌芯谢褜泻芯 写懈薪邪屑懈褔械褋泻懈屑, 薪邪褋泻芯谢褜泻芯 褝褌芯 胁邪屑 薪褍卸薪芯, 锌褉懈 褝褌芯屑 芯斜褉邪褖邪褟褋褜 泻 锌褉懈谢芯卸械薪懈褞 谢懈褕褜 褌芯谐写邪, 泻芯谐写邪 褝褌芯 薪械芯斜褏芯写懈屑芯.

Note

袩褉懈 懈褋锌芯谢褜蟹芯胁邪薪懈懈 ESI, 锌芯屑薪懈褌械, 褔褌芯 胁邪屑 胁褋械谐写邪 薪械芯斜褏芯写懈屑芯 懈褋锌芯谢褜蟹芯胁邪褌褜 写懈褉械泻褌懈胁褍 s-maxage 胁屑械褋褌芯 max-age. 协褌芯 薪械芯斜褏芯写懈屑芯, 褌邪泻 泻邪泻 斜褉邪褍蟹械褉 锌芯谢褍褔邪械褌 邪谐褉械谐懈褉芯胁邪薪薪褘泄 褉械褋褍褉褋, 褋谢械写芯胁邪褌械谢褜薪芯, 芯薪 薪械 蟹邪斜芯褌懈褌褋褟 芯 胁谢芯卸械薪薪褘褏 泻芯屑锌芯薪械薪褌邪褏 懈 斜褍写械褌 锌芯写褔懈薪褟褌褜褋褟 写懈褉械泻褌懈胁械 max-age 懈 泻褝褕懈褉芯胁邪褌褜 褋褌褉邪薪懈褑褍 褑械谢懈泻芯屑, 褔械谐芯 胁褘 褌芯褔薪芯 薪械 蟹邪褏芯褌懈褌械.

啸械谢锌械褉 render 锌芯写写械褉卸懈胁邪械褌 写胁械 胁邪卸薪褘褏 芯锌褑懈懈:

  • alt: 懈褋锌芯谢褜蟹褍械褌褋褟 胁 泻邪褔械褋褌胁械 邪褌褉懈斜褍褌邪 alt 褌褝谐邪 ESI, 泻芯褌芯褉褘泄 锌芯蟹胁芯谢褟械褌 褍泻邪蟹邪褌褜 邪谢褜褌械褉薪邪褌懈胁薪褘泄 URL, 泻芯褌芯褉褘泄 斜褍写械褌 懈褋锌芯谢褜蟹芯胁邪薪, 械褋谢懈 src 薪械 斜褍写械褌 薪邪泄写械薪;
  • ignore_errors: 锌褉懈 蟹薪邪褔械薪懈懈 true, 邪褌褉懈斜褍褌 onerror 斜褍写械褌 写芯斜邪胁谢械薪 泻 ESI 褌邪谐褍. 袝谐芯 蟹薪邪褔械薪懈械 斜褍写械褌 褉邪胁薪芯 continue, 褔褌芯 斜褍写械褌 芯蟹薪邪褔邪褌褜 褍写邪谢械薪懈械 ESI 褌邪谐邪 胁 褋谢褍褔邪械 芯褕懈斜泻懈 薪邪 褍褉芯胁薪械 泻褝褕懈褉褍褞褖械谐芯 褕谢褞蟹邪.

single: Cache; Invalidation

袨褔懈褋褌泻邪 (邪薪薪褍谢懈褉芯胁邪薪懈械) 泻褝褕邪

"袙 薪邪褍泻械 芯 泻芯屑锌褜褞褌械褉邪褏 械褋褌褜 谢懈褕褜 写胁械 褋谢芯卸薪褘械 胁械褖懈: 邪薪薪褍谢懈褉芯胁邪薪懈械 泻褝褕邪 懈 胁芯锌褉芯褋褘 懈屑械薪芯胁邪薪懈褟." --Phil Karlton

袙褘 薪械 写芯谢卸薪褘 蟹邪斜芯褌懈褌褜褋褟 芯斜 邪薪薪褍谢懈褉芯胁邪薪懈懈 泻褝褕邪, 褌邪泻 泻邪泻 邪薪薪褍谢懈褉芯胁邪薪懈械 褍卸械 蟹邪谢芯卸械薪芯 胁 屑芯写械谢懈 泻褝褕懈褉芯胁邪薪懈褟 HTTP. 袝褋谢懈 胁褘 懈褋锌芯谢褜蟹褍械褌械 屑芯写械谢褜 胁邪谢懈写邪褑懈懈, 胁邪屑 薪械 薪褍卸薪芯 薪懈褔械谐芯 邪薪薪褍谢懈褉芯胁邪褌褜 锌芯 芯锌褉械写械谢械薪懈褞; 械褋谢懈 胁褘 懈褋锌芯谢褜蟹褍械褌械 芯泻芯薪褔邪薪懈械 褋褉芯泻邪 写械泄褋褌胁懈褟 懈 褌褉械斜褍械褌褋褟 邪薪薪褍谢懈褉芯胁邪褌褜 褉械褋褍褉褋, 褝褌芯 芯蟹薪邪褔邪械褌, 褔褌芯 褉邪薪械械 胁褘 写谢褟 褝褌芯谐芯 褉械褋褍褉褋邪 褍褋褌邪薪芯胁懈谢懈 褋褉芯泻 芯泻芯薪褔邪薪懈褟 写邪谢械泻芯 胁 斜褍写褍褖械械.

Note

孝邪泻 泻邪泻 邪薪薪褍谢懈褉芯胁邪薪懈械 泻褝褕邪 - 褝褌芯 褌械屑邪, 褋锌械褑懈褎懈褔薪邪褟 写谢褟 泻邪卸写芯谐芯 泻芯薪泻褉械褌薪芯谐芯 芯斜褉邪褌薪芯谐芯 锌褉芯泻褋懈, 械褋谢懈 胁褘 褋锌械褑懈邪谢褜薪芯 薪械 锌芯斜械褋锌芯泻芯懈谢懈褋褜 芯斜 褝褌芯屑 - 褌芯 褋 谢褢谐泻芯褋褌褜褞 褋屑芯卸械褌械 锌械褉械泻谢褞褔邪褌褜褋褟 屑械卸写褍 褉邪蟹谢懈褔薪褘屑懈 锌褉芯泻褋懈 薪懈褔械谐芯 薪械 屑械薪褟褟 胁 泻芯写械 胁邪褕械谐芯 锌褉懈谢芯卸械薪懈褟.

袧邪 褋邪屑芯屑 卸械 写械谢械, 谢褞斜芯泄 芯斜褉邪褌薪褘泄 锌褉芯泻褋懈 锌褉械写芯褋褌邪胁谢褟械褌 褋锌芯褋芯斜 写谢褟 芯褔懈褋褌泻懈 泻褝褕邪, 薪芯 胁褘 写芯谢卸薪褘 褋褌邪褉邪褌褜褋褟 懈蟹斜械谐邪褌褜 褝褌芯谐芯, 薪邪褋泻芯谢褜泻芯 胁芯蟹屑芯卸薪芯. 袧邪懈斜芯谢械械 褌懈锌懈褔薪褘泄 锌褍褌褜 写谢褟 芯褔懈褋褌泻懈 泻褝褕邪 写谢褟 薪械泻芯褌芯褉芯谐芯 URL - 蟹邪锌褉芯褋懈褌褜 褔械谐芯 锌褉懈 锌芯屑芯褖懈 褋锌械褑懈邪谢褜薪芯谐芯 HTTP 屑械褌芯写邪 PURGE.

袧懈卸械 胁褘 褍胁懈写懈褌械 泻邪泻 薪邪褋褌褉芯懈褌褜 芯斜褉邪褌薪褘泄 锌褉芯泻褋懈 Symfony2 写谢褟 锌芯写写械褉卸泻懈 HTTP 屑械褌芯写邪 PURGE:

<?php
// app/AppCache.php
class AppCache extends Cache
{
    protected function invalidate(Request $request)
    {
        if ('PURGE' !== $request->getMethod()) {
            return parent::invalidate($request);
        }

        $response = new Response();
        if (!$this->getStore()->purge($request->getUri())) {
            $response->setStatusCode(404, 'Not purged');
        } else {
            $response->setStatusCode(200, 'Purged');
        }

        return $response;
    }
}

Caution

袙褘 写芯谢卸薪褘 蟹邪褖懈褌懈褌褜 屑械褌芯写 PURGE 泻邪泻懈屑-谢懈斜芯 芯斜褉邪蟹芯屑, 褔褌芯斜褘 薪械 写芯锌褍褋泻邪褌褜 胁芯蟹屑芯卸薪芯褋褌懈 芯褔懈褋褌泻懈 泻褝褕邪 褋谢褍褔邪泄薪褘屑懈 谢褞写褜屑懈.

Summary

Symfony2 褋芯蟹写邪薪 褌邪泻懈屑 芯斜褉邪蟹芯屑, 褔褌芯斜褘 褋谢械写芯胁邪褌褜 锌褉芯胁械褉械薪薪褘屑 锌褉邪胁懈谢邪屑 "写胁懈卸械薪懈褟" 锌芯 写芯褉芯谐邪屑 HTTP. 袣褝褕懈褉芯胁邪薪懈械 - 薪械 懈褋泻谢褞褔械薪懈械. 袧邪褋褌褉芯泄泻邪 褋懈褋褌械屑褘 泻褝褕懈褉芯胁邪薪懈褟 Symfony2 锌芯写褉邪蟹褍屑械胁邪械褌 斜谢懈蟹泻芯械 蟹薪邪泻芯屑褋褌胁芯 褋 屑芯写械谢褜褞 泻褝褕懈褉芯胁邪薪懈褟 HTTP 懈 械褢 褝褎褎械泻褌懈胁薪芯械 懈褋锌芯谢褜蟹芯胁邪薪懈械. 协褌芯 芯蟹薪邪褔邪械褌, 褔褌芯 胁屑械褋褌芯 褌芯谐芯, 褔褌芯斜褘 锌芯谢邪谐邪褌褜褋褟 褌芯谢褜泻芯 薪邪 写芯泻褍屑械薪褌邪褑懈褞 Symfony2 懈 锌褉懈屑械褉褘 泻芯写邪, 胁褘 锌芯谢褍褔邪械褌械 写芯褋褌褍锌 泻 褑械谢芯屑褍 屑懈褉褍 蟹薪邪薪懈泄, 芯褌薪芯褋褟褖懈褏褋褟 泻 泻褝褕懈褉芯胁邪薪懈褞 胁 HTTP 懈 泻褝褕懈褉褍褞褖懈屑 褕谢褞蟹邪屑, 褌邪泻懈屑 泻邪泻 Varnish.

袛芯锌芯谢薪懈褌械谢褜薪邪褟 懈薪褎芯褉屑邪褑懈褟 胁 泻薪懈谐械 褉械褑械锌褌芯胁: ------------------------------------------

  • /cookbook/cache/varnish

Translation source: 2011-10-10 5a77337 Corrected from: 2011-10-16 a52c4c1 Corrected from: 2011-10-29 379482a Corrected from: 2011-10-28 cab2926