2011-09-06 13 views
17

Tôi có hình ảnh (PNG) được tạo động và sẽ được nhúng vào các trang web và diễn đàn. Khi một hình ảnh được đăng trên một trang rất bận rộn, có rất nhiều kết nối để phục vụ cho một cái gì đó mà không thay đổi thường xuyên. Tôi muốn cho trình duyệt biết thời gian lưu vào bộ nhớ cache.Tiêu đề cho đầu ra hình ảnh PNG để đảm bảo nó được lưu trong trình duyệt?

Vì vậy, tôi cần những tiêu đề nào? Hiện tại, tôi có:

Cache-Control: max-age=86400 
Content-Type: image/png 

Dường như trình duyệt không lưu vào bộ nhớ cache hình ảnh (khoảng 20-30kb). Điều gì khác sẽ là cần thiết?

Edit: Đây là một hình ảnh ví dụ, tôi đã có một URL với .png mở rộng: https://images.carspending.com/sigimg/5734/user/honda-accord-2-4i-executive-tourer_medium.png

+1

Nó chắc chắn sẽ làm cho trình duyệt dễ dàng hơn nếu bạn có URL thực sự trông giống như hình ảnh (ví dụ: 'http: // www.example.com/images/myimage.png' thay vì' http: // www.example.com/my_script.php? image = 93895') – NullUserException

+0

Tôi đã làm điều đó, đã chỉnh sửa bài đăng. – ddinchev

Trả lời

28

Điều cuối cùng mà làm việc là:

header('Pragma: public'); 
header('Cache-Control: max-age=86400'); 
header('Expires: '. gmdate('D, d M Y H:i:s \G\M\T', time() + 86400)); 
header('Content-Type: image/png'); 

Bây giờ trình duyệt không đưa ra yêu cầu cho hình ảnh khi tải một trang có một embeded.

+0

Bạn có thể giải thích tại sao điều này trả lời câu hỏi? – Todd

+0

Vào thời điểm nó được trả lời (6 năm trước) nó đã giải quyết được vấn đề. Nếu một tài nguyên png với tất cả các tiêu đề này được tải trên một trang bên ngoài, nó sẽ được lưu trữ đúng cách. Nó có hiệu quả với bạn không? – ddinchev

7

Hãy chắc chắn rằng bạn cũng có thêm công như vậy:

header('Cache-Control: max-age=86400, public'); 

Read this also, là rất hữu ích.

+2

Chính xác là: tiêu đề ('Pragma: public'); tiêu đề ('Cache-Control: max-age = 86400'); Mua bạn đã cho tôi ý tưởng – ddinchev

+0

@Veseliq: Tôi rất vui. Tôi không có nhà phát triển PHP vì vậy tôi đã đoán WILD;) Và tốt là bạn đặt ngày Hết hạn theo định dạng GMT; nếu không, nó sẽ không có tác dụng. – Icarus

2

Tiêu đề Expires sẽ giúp ích.

header('Expires: '. gmdate('D, d M Y H:i:s \G\M\T', time() + 86400)); 
+0

Điều này cùng với Pragma và Cache-Control giải quyết nó. – ddinchev

Các vấn đề liên quan