2012-02-15 203 views
22

UPDATE:我的HTML5應用程序緩存清單是緩存一切

**我張貼了這個問題,當這個功能真的很新的,我現在這個功能不應該用這樣的方式,除非它是通過JavaScript用來實現。但對於大多數初學者來說,這種攻擊似乎是一個很好的解決方案,他們犯了同樣的錯誤和濫用此功能。如果你希望緩存除了你的HTML的一切,應與JS做或者你可以使用下面的解決方案**

我想我的問題歸結爲: 如果文件參考使用的清單屬性清單HTML標籤屬於MASTER CACHE ENTRIES,你怎麼能有一個動態頁面使用清單。

我的文件是這樣的:

CACHE MANIFEST 

CACHE: 
# IMAGES: 
/stylesheets/bg.jpg 
/stylesheets/cont_bg.png 
#and so forth.. 

#EXTERNAL 
http://chat.mydomain.com/themes/images/panel_bg.png 
http://chat.mydomain.com/themes/images/images_core.png 

#################################### 
#STYLE SHEETS: 
/stylesheets/min.css 
/stylesheets/css_night.aspx 

##################################### 
#JAVASCRIPT: 
/JAVASCRIPT/header_javascript.js 

#EXTERNAL: 
http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.9/jquery-ui.min.js 
http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js 

FALLBACK: 
//offline.php 

NETWORK: 
* 

現在的問題是,一旦我瀏覽一個頁面在清單中不是,我的實際動態的PHP文件一樣的index.php,當我第一次看到的頁面,並在那裏沒有緩存的鍍鉻進:

Adding master entry to Application Cache with manifest http://208.109.248.197/manifest.appcache 

Application Cache Downloading event 
Application Cache Progress event (0 of 28) 
... 
Application Cache Progress event (28 of 28) 
Application Cache NoUpdate event 

到目前爲止好,直到我真正加載頁面,鉻雲:

Application Cache UpdateReady event 
Adding master entry to Application Cache with manifest http://mydomain.com/manifest.appcache 

現在,你可以把它添加的index.php到我的應用程序緩存的最後一行看到,我已經轉到URL驗證了這一點:chrome://appcache-internals/

它說:

Flags URL Size (headers and data) 
Explicit, http://mydomain/JAVASCRIPT/header_javascript.js 57.5 kB 
Master, http://mydomain/home.php 51.2 kB 
Master, http://mydomain/index.php 53.5 kB 
Master, Fallback, http://mydomain/offline.php 49.4 kB 

那裏的東西像的index.php並且home.php不應該被緩存。我想告訴它不要緩存任何html擴展如果可能的話。但這裏是我從各種RFC中學到的東西,我相信: 一個在線白名單通配符標誌,它可以是打開的或是阻止的。

The open state indicates that any URL not listed as cached is to be implicitly treated as being in the online whitelist namespaces; the blocking state indicates that URLs not listed explicitly in the manifest are to be treated as unavailable. 

好,我想用這些在線白名單通配符的標誌之一,它設成阻塞,但我不能進一步找到任何解釋或實例。 我也讀:

zero or more URLs that form the online whitelist namespaces. 

These are used as prefix match patterns, and declare URLs for which the user agent will ignore the application cache, instead fetching them normally (i.e. from the network or locale HTTP cache as appropriate). 

我也想用這樣的一些模式,但後來我又找不到任何文檔。爲什麼沒有appcache清單文檔的標誌,也沒有其他網站我一直在使用它,因爲我的chrome appcache目錄顯示沒有!?!?

謝謝你的時間!

回答

26

這是一個黑客,我發現通過玩耍:

我還沒有找到最終的答案,但是從我學到的東西似乎清單並不意味着要在每個頁面上設置。我再次不確定,但這是我遇到的黑客。我有一個頁面,例如具有

<html manifest="manifest.appcache"> 

我才知道,這沒有這個頁面不會被添加到緩存但是他們仍然會繼續使用應用程序緩存,如果在同一個域manifest.html。因此,如果你包括清單。的HTML有這樣的iframe上everypage它不會緩存像Chrome瀏覽器頁面一個普通的HTML頁面將不再輸出:

Adding master entry to Application Cache with manifest 

但如果你去到網絡選項卡,你會看到它是使用緩存

temporary_manifest_hack.html的
<iframe id='manifest_iframe_hack' 
    style='display: none;' 
    src='temporary_manifest_hack.html'> 
</iframe> 

內容:

<!DOCTYPE HTML> 
<html lang="en" class="no-js" manifest="manifest.appcache"> 
    <head> 
     <meta charset="utf-8"> 
     <title>Hack 4 Manifest</title> 
    </head> 
    <body></body> 
</html> 
+0

這對我很好。謝謝張貼。 – 2012-03-14 20:11:14

+1

我的理解是,我的觀點是:你如何使用應用程序緩存並將其引入瀏覽器,而不包括主HTML頁面本身......如果這是有道理的。 – Neo 2012-08-13 21:28:39

+1

@Neo您可以使用「無存儲」緩存指令爲主頁提供您不想緩存的主頁。 – oberhamsi 2012-10-16 14:35:16

10

的應用程序緩存總是包含包含HTML標記的清單屬性頁。

如果您希望該頁面本身是動態的,則必須使用對NETWORK部分中的服務的ajax調用來加載內容。

+1

+1這是一個更好的方法。當我寫這個問題時,應用程序緩存是新的,包括我自己在內的很多人都用它來創建一個快速緩存解決方案,而不必處理HTTP頭,我仍然認爲如果完全理解它,可以將其用作黑客,您建議的是使用這種技術的正確方法,我的答案是如何將它用作緩存靜態內容的黑客,在動態頁面上進行緩存,這個頁面是完全禁用的。 – Neo 2013-05-28 23:14:24

+0

@Joeri它仍然會將該頁保存在appcache中,所以如果你有很多路由(例如domain.com/userId),它將不起作用。 – themihai 2013-12-25 10:24:35

3

我想Iframe的解決方法不起作用。如果您認爲這些文件來自Appcache:不。他們來自瀏覽器緩存。

禁用devtools-settings中的browsercache並查看「network」。你可以看到,所有的元素都將通過網絡加載,而不是來自frome(app)緩存。

+0

然後,您必須沒有在您的appcache清單中指定文件。你看到init日誌了嗎? – Neo 2013-08-26 20:50:23

+0

是的。我將'no-cache'設置爲js和css,然後發現它們全部來自服務器'200',而不是來自緩存**。 – Turtle 2017-01-27 07:37:40

+0

@Neo我讓他們在清單中,但沒用。 – Turtle 2017-01-27 07:38:23