Mam przedmiotów Amazon S3, a dla każdego obiektu, mam ustawioneDlaczego wciąż Przeglądarka wysyła żądanie publiczności Cache-Control z max-age?
Cache-Control: public, max-age=3600000
czyli około 41 dni.
I mam Amazon CloudFront dystrybucji przedstawionym przy minimalnym TTL również 3600000.
jest to pierwszy wniosek po wyczyszczeniu pamięci podręcznej.
GET /1.0.8/web-atoms.js HTTP/1.1
Host: d3bhjcyci8s9i2.cloudfront.net
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
i odpowiedź jest
HTTP/1.1 200 OK
Content-Type: application/x-javascript
Content-Length: 226802
Connection: keep-alive
Date: Wed, 28 Aug 2013 10:37:38 GMT
Cache-Control: public, max-age=3600000
Last-Modified: Wed, 28 Aug 2013 10:36:42 GMT
ETag: "124752e0d85461a16e76fbdef2e84fb9"
Accept-Ranges: bytes
Server: AmazonS3
Age: 342557
Via: 1.0 6eb330235ca3971f6142a5f789cbc988.cloudfront.net (CloudFront)
X-Cache: Hit from cloudfront
X-Amz-Cf-Id: 92Q2uDA4KizhPk4TludKpwP6Q6uEaKRV0ls9P_TIr11c8GQpTuSfhw==
Nawet podczas Amazon wyraźnie wysyła Cache-Control, Chrome nadal sprawia, że drugie żądanie zamiast czytać je z pamięci podręcznej.
GET /1.0.8/web-atoms.js HTTP/1.1
Host: d3bhjcyci8s9i2.cloudfront.net
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
If-None-Match: "124752e0d85461a16e76fbdef2e84fb9"
If-Modified-Since: Wed, 28 Aug 2013 10:36:42 GMT
Pytanie: Dlaczego chrom sprawia drugie żądanie?
Wygasa To zachowanie zmienia się, gdy umieszczam wyraźny atrybut Expires w nagłówkach. Przeglądarka nie wyśle kolejnego żądania dotyczącego nagłówka Expires, ale dla publiczności sterującej pamięcią podręczną wyśle ją. Moje wszystkie obiekty S3 nigdy się nie zmienią, są niezmienne, gdy zmieniamy plik, umieszczamy go jako nowy obiekt z nowym adresem URL.
Odsyłacz do skryptu strony Chrome czasami wysyła kolejne zapytania. Wykonałem ten test, wpisując adres URL w przeglądarce. Gdy skrypt jest określany przez strony HTML, przez kilka kolejnych żądań chrom ładunki buforowane skrypty, ale ponownie po jakimś czasie, raz na jakiś czas to będzie wysyłać żądania do serwera. Nie ma tutaj problemu z dyskiem, Chrome ma wystarczającą ilość pamięci podręcznej.
Problem polega na tym, że się opłata za każdy wniosek, i chcę obiekty S3 mają być buforowane na zawsze i powinny być ładowane z pamięci podręcznej i nigdy nie powinny łączyć się z serwerem z powrotem.
Dzięki, ale to jest zły projekt, nie powinien on ignorować ETag, podczas gdy Max Age i public cache jest określony. S3 automatycznie dodaje ETag, czy muszę go usunąć lub czy mogę zmienić nagłówki, aby obsługiwać oczekiwane zachowanie? Nie wiem, czy istnieje sposób na usunięcie ETag w S3. –
W Chrome stwierdziłem, że usunięcie wpisu jest jedynym sposobem, aby utrudnić warunkowe żądanie http. IE wykonuje o wiele lepszą pracę w tym IMHO. – woolagaroo
Czy to błąd w Chrome, czy też jest poprawny zgodnie z protokołem HTTP 1.1? –