Mam a Rails app, który używa Cloudfront jako swojego CDN i kół zębatych do kompresowania zasobów i ustawiania długich nagłówków Cache-Control
.konfiguracja Cloudfront, aby nigdy nie pobierać zasobów
Pierwsza prośba do aktywów daje mi nagłówki odpowiedzi tak:
Cache-Control:public, max-age=31536000 Connection:close Content-Encoding:gzip Content-Type:application/javascript Etag:"892a3afb514e3c84646835f9ef101026" Last-Modified:Tue, 17 Jan 2012 16:05:17 GMT Server:thin 1.2.11 codename Bat-Shit Crazy Vary:Accept-Encoding Via:1.0 c662f4e5a3bc7b224ce1bbecb0a23d82.cloudfront.net:11180 (CloudFront), 1.0 fc4797024fafe16fcc03e892c23f078d.cloudfront.net:11180 (CloudFront) X-Amz-Cf-Id:bd2a89fb81bba2513f30d6940347693ef483defb4783da06d81b002af23545c39b9176b2c7cb144f,VF69FYlYU8ezzHQp7QkU2GvEQ8NmDqEwRX-wu7H63yNqE1ZlTaAq3g== X-Cache:Miss from cloudfront X-Runtime:0.012413 X-Ua-Compatible:IE=Edge,chrome=1
Perfect. Brakowało pamięci podręcznej z Cloudfront, pobrałem ją z mojej aplikacji, więc teraz powinien ją załadować.
... gdybym teraz odświeżyć stronę otrzymuję te nagłówki odpowiedzi:
Connection:keep-alive Server:thin 1.2.11 codename Bat-Shit Crazy Via:1.0 86123d99569c9296c8605243e9a10621.cloudfront.net:11180 (CloudFront), 1.0 de9fc23d505dae3d19973a98bfa1eba0.cloudfront.net:11180 (CloudFront) X-Amz-Cf-Id:a7bf6ffb30c43d306835190d210aeb8ec794c1ff619ad7aaecbad220c1822fe165bda624ae8382e1,bcij_88KOAvLPSqEKDRSvOBjEj7atiKBCAjSbqc2cfdb-BHOTi--LA== X-Cache:RefreshHit from cloudfront X-Runtime:0.006909 X-Ua-Compatible:IE=Edge,chrome=1
Wygląda na to hit CloudFront. Dostaję 304 not modified
. Wydaje się więc, że nie pobieram pliku ponownie. JEDNAK, widzę, że to żądanie jest również wysyłane do mojego serwera źródłowego.
Dlaczego tak się dzieje? Czy Cloudfront nie powinien zawsze buforować moich zasobów? Zajmuję się wersjonowaniem moich zasobów, więc naprawdę NIGDY nie chcę, aby to było pobierane z serwera, z wyjątkiem pierwszego żądania. Czy jest jakiś sposób, aby zmusić tego rodzaju zachowanie?