2014-03-02 49 views
1

我想通過緩存靜態內容(如圖像(jpg,png,gif)和字體)來改善我對互聯網的體驗。因爲總是在觀看具有大量圖像的網頁時發生,然後使用F5進行刷新時,會再次下載相同的內容。強制鑲邊以緩存靜態內容,如圖像

我知道這是因爲響應頭可能不包含緩存o max-age 0,甚至有時會在響應中沒有緩存或max-age時發生。

但是,如果圖片或字體永遠不會改變,那麼max-age 0就沒用了。所以我想知道是否有一種方法可以覆蓋響應標題並將它們設置爲max-age 1年。也許用擴展名爲Chrome?

+0

如何從動態圖像客戶端告訴靜態圖像。如果這沒有問題,鉻將已經這樣做。 – user1937198

+0

我不明白。對不起我是西班牙語揚聲器 – jscripter

回答

0

是的,你可以使用Chrome擴展程序來做到這一點。看到這個Change HTTP Headers鉻擴展已經做到了。

針對您的特殊情況下,你只需要做到這一點:

  • 添加事件監聽器每當接收的頭應該被調用。
  • 讀取頭的細節
  • 檢查響應內容類型爲圖像
  • 添加/更新所需的標題,以標題

要做到這一點,你可以使用webRequest Headers Received事件。的onHeadersReceived

onHeadersReceived(任選地同步) 文檔:觸發每個的HTTP(S)的響應報頭被接收到的時間。由於重定向和身份驗證請求,每個請求可能會發生多次。此事件旨在允許擴展添加,修改和刪除響應頭,例如傳入的Set-Cookie頭。

您的代碼將是這個樣子

chrome.webRequest.onHeadersReceived.addListener(function(details){ 
    for(var i = 0; i < details.responseHeaders.length; i++) { 
     // If response is of image, add the cache-control header 
    } 
    return {responseHeaders: details.responseHeaders}; 
}, 
{urls: ['https://*/*'], types: ['image'] }, 
['blocking', 'responseHeaders']); 

PS:我還沒有運行,測試的代碼,所以請原諒錯別字。

EDIT(@RobW評論後)

不,這是不可能的,因爲現在(2014年3月22日)。添加Cache-control對緩存行爲沒有影響。查看this answer瞭解更多詳情。

+0

我做到了,並在權限我把這個: 「*://*/*.jpg」,「*://*/*.png」,「*:// */* .gif「,」webRequest「,」webRequestBlocking「 該函數被調用,因爲在控制檯中,我看到添加了頭部,但是在圖像的響應頭部(在它們的網絡選項卡中)沒有出現。並且我在extraInfoSpec參數中添加了'blocking'以使其同步 – jscripter

+0

好吧,因爲沒有其他答案,並且理論是正確的,所以推測 – jscripter

+0

但是順便提一下,我提出了另一個問題來解釋這個問題: http://堆棧溢出。com/questions/22209359/cache-all-images-with-onheadersreceived – jscripter