Tôi có một ứng dụng web cho phép bộ nhớ cache của trình duyệt yêu cầu AJAX kết quả trong một thời gian dài. Tôi đã tìm hiểu cách thực hiện yêu cầu bỏ qua toàn bộ bộ nhớ cache, khi phát hiện sửa đổi có thể xảy ra. Nhưng tôi muốn cho phép người dùng kích hoạt làm mới dữ liệu.Buộc yêu cầu AJAX để xác thực lại bộ nhớ cache với máy chủ, mà không cần tải lại hoàn toàn
Trong trường hợp này, tôi muốn trình duyệt kiểm tra với máy chủ nếu bộ nhớ cache bị ngừng nhưng sử dụng nó nếu nó không phải là (tức là nếu máy chủ phản hồi bằng mã 304). Mục đích là để dành thời gian tải vì dữ liệu rất lớn.
Các máy chủ bao gồm các tiêu đề sau đây trong tất cả các phản ứng:
Cache-Control: private, max-age=604800
Last-Modified: ... # actual last modification date
tôi quản lý để bật các đối tượng được lưu trữ hoàn toàn trong Chrome (không kiểm tra các trình duyệt khác chưa) bằng cách sử dụng các tiêu đề HTTP sau trong yêu cầu:
Cache-Control: max-age=0
If-Last-Modified: Tue, 01 Jan 1970 01:00:00 +0100
Dòng If-Last-Modified
là dòng thực sự có hiệu lực. Chrome có vẻ bỏ qua tiêu đề Cache-Control
trong yêu cầu.
Tôi cũng thấy rằng việc sử dụng Cache-Control: must-revalidate
trong phản hồi của máy chủ sẽ buộc trình duyệt xác thực bộ nhớ cache của máy chủ với yêu cầu mỗi yêu cầu.
Nhưng có cách nào để xác thực lại chỉ một yêu cầu chính xác, được quyết định ở phía máy khách không?
Lưu ý rằng tôi không được gắn đặc biệt để thực hiện điều này với tiêu đề HTTP, vì vậy bất kỳ phương pháp nào khác mà tôi không biết là được hoan nghênh!
Vì vậy, chỉ cần sử dụng 'If-Last-Modified' với tiêu đề phản hồi' Last-Modified' cuối cùng. –
Tôi đã thử điều đó và tôi nhận được 304 từ máy chủ, nhưng trình duyệt không sử dụng bộ nhớ cache để điền vào phản hồi, vì vậy nó trống trong mã ... Tôi cho rằng trình duyệt không hiển thị sự quan tâm trong tiêu đề 'If-Last-Modified' mà nó chưa tự thêm vào. – rixo
Sau đó, giả sử bạn tự lưu trữ phản hồi cuối cùng, bạn phải thực hiện việc này theo cách thủ công, tức là nếu phản hồi là 200, ghi đè bộ nhớ cache của bạn và nếu câu trả lời là 304, hãy sử dụng bản sao cũ. Nó có thể dễ dàng trừu tượng hóa. –