7

Tôi có một trang web trả về header sau khi tôi truy cập vào tài liệu:Override các giá trị "Cache-control" trong một phản ứng HTTP

HTTP/1.1 200 OK 
Date: Sat, 29 Jun 2013 15:57:25 GMT 
Server: Apache 
Content-Length: 2247515 
Cache-Control: no-cache, no-store, must-revalidate, max-age=-1 
Pragma: no-cache, no-store 
Expires: -1 
Connection: close 

Sử dụng một phần mở rộng chrome, tôi muốn thay đổi response header này để tài liệu thực sự được lưu trữ thay vì lãng phí băng thông.

Tôi có đoạn code mẫu sau:

chrome.webRequest.onHeadersReceived.addListener(function(details) 
    { 
     // Delete the required elements 
     removeHeader(details.responseHeaders, 'pragma'); 
     removeHeader(details.responseHeaders, 'expires'); 

     // Modify cache-control 
     updateHeader(details.responseHeaders, 'cache-control', 'max-age=3600;') 

     console.log(details.url); 
     console.log(details.responseHeaders); 

     return{responseHeaders: details.responseHeaders}; 
    }, 
    {urls: ["<all_urls>"]}, ['blocking', 'responseHeaders'] 
); 

nào sẽ thay đổi một cách chính xác tiêu đề để một cái gì đó như thế này (dựa trên console.log() đầu ra):

HTTP/1.1 200 OK 
Date: Sat, 29 Jun 2013 15:57:25 GMT 
Server: Apache 
Content-Length: 2247515 
Cache-Control: max-age=3600 
Connection: close 

Nhưng dựa trên tất cả mọi thứ Tôi đã cố kiểm tra điều này, tôi không thể thấy bất kỳ bằng chứng nào cho thấy điều này đã thực sự xảy ra:

  1. cache không chứa mục nhập nào cho tệp này
  2. Tab Network trong Developer Console cho thấy không có thay đổi nào đối với phản hồi HTTP (Tôi đã thử thay đổi nó thành sửa đổi nhỏ gọn chỉ để đảm bảo rằng nó không phải là lỗi, nhưng vẫn không có thay đổi).

Các gợi ý thực duy nhất tôi có thể tìm được đó gợi ý rằng cách tiếp cận của tôi vẫn hoạt động và khoản này trên webRequest API documentation điều này gợi ý rằng điều này sẽ không hoạt động (nhưng không giải thích lý do tại sao tôi không thể nhận được bất kỳ sự thay đổi bất kỳ điều gì):

Lưu ý rằng API yêu cầu web trình bày sự trừu tượng của mạng ngăn xếp đến phần mở rộng. Bên trong, một yêu cầu URL có thể được chia thành một số yêu cầu HTTP (ví dụ để tìm nạp các dải byte riêng lẻ từ một tệp lớn) hoặc có thể được xử lý bởi ngăn xếp mạng mà không cần liên lạc với mạng. Vì lý do này, API không cung cấp tiêu đề HTTP cuối cùng được gửi tới mạng. Đối với ví dụ , tất cả tiêu đề có liên quan đến bộ nhớ đệm đều ẩn với tiện ích mở rộng .

Không có gì hoạt động (tôi không thể sửa đổi HTTP response header) vì vậy tôi nghĩ đó là mối quan tâm đầu tiên của tôi.

Bất kỳ đề xuất nào tại nơi tôi có thể gặp sự cố hoặc làm thế nào để tìm kiếm những gì đang xảy ra ở đây?

Nếu không thể, có cách nào khác để đạt được những gì tôi đang cố đạt được không?

Trả lời

5

Gần đây tôi đã dành một số giờ để cố gắng lưu trữ tệp và phát hiện ra rằng chrome.webRequestchrome.declarativeWebRequest APIs không thể lực lượng được lưu vào bộ nhớ cache. Không còn cách nào khác.

Các tiêu đề phản hồi Cache-Control (và khác) có thể được thay đổi, nhưng nó sẽ chỉ hiển thị trong phương thức getResponseHeader. Không có trong hành vi lưu vào bộ nhớ cache.

+0

Thật không may những gì tôi mong đợi ... Bạn có biết cách nào khác để buộc các tệp này vào bộ nhớ cache không?Tôi đã tìm thấy các máy chủ proxy giống như 'mực 'nhưng chúng có vẻ như rất khó sử dụng với mạng trên hệ thống của tôi chỉ để lưu các tệp từ một trang web cụ thể –

+0

@BT Chọn proxy yêu thích của bạn để thêm tiêu đề phù hợp và sử dụng [chrome] .proxy'] (https://developer.chrome.com/extensions/proxy.html) API để định tuyến trang web cụ thể đó thông qua proxy của bạn. –

+0

Thực sự xấu hổ rằng bạn không thể sửa đổi bộ nhớ đệm từ tiện ích mở rộng. Sẽ làm cho nó hữu ích hơn nhiều nếu bạn có thể. –

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