2012-03-16 36 views
15

Tôi đang sử dụng google chrome và tôi nhận thấy rằng mỗi khi tôi làm một yêu cầu XHR tôi nhận được các tiêu đề sau đặt theo yêu cầu:jQuery XMLHttpRequest Cache-Control bị bỏ qua

Cache-Control: no-cache 
Pragma: no-cache 

Nếu bạn đọc spec tại http://www.w3.org/TR/XMLHttpRequest/ nó nói như sau

Nếu user agent thực hiện một bộ nhớ cache HTTP nó nên tôn trọng tiêu đề cache-Control trong tiêu đề yêu cầu tác giả (ví dụ cache-Control: no-cache bỏ qua bộ nhớ cache). Nó không được tự động gửi các tiêu đề yêu cầu Cache-Control hoặc Pragma trừ khi người dùng cuối yêu cầu rõ ràng hành vi như vậy (ví dụ: bằng cách tải lại trang).

Vâng, tôi đang cố gắng như sau:

$.ajax(myUrl, { 
    type: 'get', 
    dataType: 'json' 
    cache: true, 
    headers: { 
     'Cache-Control': 'max-age=200' 
    } 
    }) 

Như bạn có thể thấy tôi đang thiết lập một cách rõ ràng tiêu đề Cache-Control với hy vọng nhận được một bản sao lưu trữ tài nguyên của tôi. Vâng, Chrome dường như bỏ qua tiêu đề Cache-Control.

Có thể gửi tiêu đề Cache-Control: no-cache khi thực hiện yêu cầu XHR không?

Trả lời

46

Đây là một sai lầm ngớ ngẩn. Tôi đã đặt Công cụ dành cho nhà phát triển thành "Tắt bộ nhớ cache". Đó là lý do tại sao nó luôn luôn thêm tiêu đề kiểm soát bộ nhớ cache. Nếu điều này xảy ra với bạn, hãy đảm bảo rằng bạn không chọn hộp đó.

Raul

+1

Có, lưu ý rằng Firebug cũng có "Disable Browser Cache" trong menu "Net". Tôi cũng bị cắn bởi cái này. – harpo

+0

Tôi đã cố gắng tìm ra lý do tại sao tìm nạp gốc() không trả về dữ liệu từ bộ nhớ cache, ngay cả khi các tiêu đề Bộ nhớ cache-Kiểm soát được đặt chính xác bởi máy chủ. Cảm ơn bạn đã giúp sửa lại sự giám sát này, điều đó khiến tôi phát điên. –

+0

Tôi đã dành quá nhiều thời gian để theo dõi điều này. Cảm ơn bạn! –

3

Tôi vừa kiểm tra và mã của bạn hoạt động tốt, ngoại trừ dấu phẩy bị thiếu.

mở tab mạng, sau đó thử này trong giao diện điều khiển trên trang này:

$.ajax('http://stackoverflow.com/', { 
    type: 'get', 
    dataType: 'json', 
    cache: true, 
    headers: { 
     'Cache-Control': 'max-age=123' 
    } 
}) 

Kiểm tra tab mạng một lần nữa, nhấp vào yêu cầu bạn chỉ cần thực hiện, và nhấp vào "tiêu đề" tab. Bạn sẽ thấy rằng yêu cầu được gửi với tiêu đề Cache-Control mà bạn đã cung cấp.

+0

Vâng, xin lỗi. Đó là lỗi của riêng tôi. Tôi nên đã kiểm tra các công cụ phát triển để đảm bảo rằng tôi không có bộ nhớ đệm bị vô hiệu hóa. – HaxElit