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
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>