2014-07-16 19 views
6

Tôi mới hợp lý để lưu vào bộ nhớ cache của trình duyệt. Tôi đang cố gắng để Chrome lưu trữ vĩnh viễn bất kỳ tệp tĩnh nào có tham số truy vấn (cho các mục đích tạo bộ nhớ cache). Tôi đã đặt Cache-Control và Hết hạn tiêu đề trong tương lai, điều này sẽ đủ để nói "cache this forever". Các tiêu đề phản hồi kết quả:Chrome từ chối bộ nhớ cache Javascript

 
HTTP/1.1 200 OK 
Cache-Control: public, max-age=315360000 
Connection: keep-alive 
Content-Encoding: gzip 
Content-Type: application/x-javascript 
Date: Wed, 16 Jul 2014 09:29:54 GMT 
Last-Modified: Wed, 16 Jul 2014 03:44:14 GMT 
Server: nginx/1.6.0 
Transfer-Encoding: chunked 
Vary: Accept-Encoding 

Firefox và Safari dường như tôn trọng điều này đối với tất cả các tệp truy vấn bộ nhớ cache (? V = truy vấn). Chrome chủ yếu tuân theo các chỉ thị, ngoại trừ Javascript. Hầu hết thời gian nó yêu cầu với tiêu đề If-Modified-Since thay vì tải từ bộ nhớ cache. Đôi khi một trong số họ sẽ tải từ bộ nhớ cache và khác sẽ mang lại một yêu cầu dẫn đến 304. Thông thường khi tải trang từ một tab mới, nó sẽ tải từ bộ nhớ cache, nhưng không nếu bạn nhấn nhập vào thanh địa chỉ.

Debugger

Tôi đã quan sát các trang web khác sử dụng những gì tôi nghĩ là các tiêu đề chính xác giống nhau, và các tập tin được luôn nạp từ bộ nhớ cache. Một số người trong số họ tải từ bộ nhớ cache ngay cả khi bạn làm một làm mới.

Tôi hiểu hành vi bộ nhớ cache có phần không thể đoán trước, nhưng tôi muốn chắc chắn rằng tôi không giám sát cái gì đó làm cho Chrome làm điều đó?

Trả lời

1

tôi đã cùng một vấn đề với chrome và sau một vài giờ thử và sai tôi figuered ra, chrome mà dường như có một vấn đề với tiêu đề Vary

Tôi đã có đoạn mã này trong Apache của tôi/.htaccess cấu hình và ngay sau khi tôi nhận xét dòng "header append Vary Accept-Encoding" Chrome khởi động bộ nhớ đệm .js và các tập tin .css

<FilesMatch "(\.js\.gz|\.css\.gz)$"> 
    # Serve correct encoding type. 
    Header set Content-Encoding gzip 
    # Force proxies to cache gzipped & non-gzipped css/js files separately. 
    #Header append Vary Accept-Encoding 
</FilesMatch> 

nó vẫn không hoạt động trong khi chạy theo yêu cầu thông qua máy chủ nignx của chúng tôi, bởi vì nó là thêm tiêu đề Vary: Accept-Encoding, khi phân phối gzip được nén.

Cho đến nay tôi có thể đoán đây là sự cố chỉ xảy ra với Chrome và giải pháp thay thế cấu hình để chỉ thêm tiêu đề nếu chrome (chưa được chọn cho safari) không phải là khách hàng cho đến khi có sửa chữa tốt hơn:

<FilesMatch "(\.js\.gz|\.css\.gz)$"> 
    # Serve correct encoding type. 
    Header set Content-Encoding gzip 
    # Force proxies to cache gzipped & non-gzipped css/js files separately. 
    BrowserMatch "Chrome" ChromeFound 
    Header append Vary Accept-Encoding env=!ChromeFound 
</FilesMatch> 
Các vấn đề liên quan