htaccess cache

  • Khi trình duyệt đọc file HTML, thì sẽ load những nội dung như: image, css, javascript, video, pdf, ..., thao tác load này sẽ cần thời gian, tùy vào nội dung các file này mà quá trình load nhanh hay chậm.
  • Mỗi khi load lại file HTML thì quá trình trên sẽ tiến hành lại từ đầu, tức là load từng file cho tới khi tất cả các file được load xong, việc này sẽ gây khó chịu cho người dùng, vì phải chờ đợi.
  • Cache ra đời nhằm giải quyết tình trạng này, giúp trình duyệt có thể lưu trữ lại thông tin các file sau khi người dùng lần đầu tiên truy cập trang, giúp cho các file này không cần phải load lại lần nữa khi người dùng truy cập cho những lần sau.
  • Cách thực hiện cach file với .htaccess như sau:
<filesmatch "\.(file1|file2|...|fileN)$">
Header set Cache-Control "max-age=thời_gian_theo_giây, public, proxy-revalidate"
</filesmatch>
  • file1, ..., fileN là định dạng file bất kỳ mà bạn muốn sử dụng cache.
  • Header set Cache-Control gọi header xử lý cache.
  • max-age=thời_gian_theo_giây tùy theo bạn muốn cache file trong thời gian bao lâu (thời gian tồn tại cache), theo phút, giờ, ngày, hay năm mà quy ra sử dụng giây tương ứng.
    • Giây: 1
    • Phút: 60
    • Giờ: 3600
    • Ngày: 86400
    • Tháng: 2592000
    • Năm: 31536000
    Ví dụ bạn cần 2 tháng, thì thời gian sẽ là: 2592000 x 2 = 5184000.
  • Xét quyền riêng tư, có 2 giá trị:
    • private nội dung chỉ được lưu trữ ở client.
    • public ngoài việc lưu trữ ở client, dữ liệu cũng được lưu trữ bởi các proxy (đây là dạng lưu trữ cache server, mục đích phục vụ nhiều người dùng truy xuất cùng một nội dung).
  • proxy-revalidate giá trị tùy chọn, không bắt buộc, khi sử dụng có nghĩa là bắt buộc dữ liệu phải được xác thực từ phía server, tránh trường hợp mạng yếu, dữ liệu không gửi được tới server.

Ví dụ htaccess cache

<filesmatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
Header set Cache-Control "max-age=31536000, public"
</filesmatch>
  • Nội dung trên là cache tất cả các file ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf trong vòng 1 năm.
  • Hoặc ta có thể kết hợp proxy-revalidate để bắt buộc dữ liệu cache phải được xác thực từ phía server, ta viết như sau:
<filesmatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
Header set Cache-Control "max-age=31536000, public, proxy-revalidate"
</filesmatch>