2013-03-08 113 views
2

在Chrome中看到一些奇怪的行爲,並且不確定在使用appcache時是否會發生預期的行爲,或者只是Chrome。在Chrome中受限制的appcache網絡中的SSL路徑

這是一個由我們的RestAPI支持的單頁應用程序,它在HTTP下請求RestAPI時工作正常,但是一旦我們將url更改爲HTTPS版本,它就會停止工作。 Chrome控制檯中沒有很多(即任何)信息,因此它決定停止工作。

我們已經成功地縮小它在應用程序緩存文件NETWORK部分,我們可以得到它的工作的唯一方法是使用通配符*,這是我們不希望這樣做,因爲繞過整個appcache的重點,並降低安全性(從我理解閱讀文檔等)。

我們已經嘗試過任何和所有的API url變體(例如它與各種相關位置中的通配符的組合),但似乎沒有任何作用(即使https://*也不允許成功請求)。

任何有經驗的人都知道發生了什麼?

感謝

+0

你能張貼您的清單文件? 當您使用HTTPS時,清單HTTPS中的所有項目,包括清單和引用它的頁面?如果沒有,什麼使用HTTPS,什麼不使用? – 2013-03-08 17:49:51

+0

@JaffaTheCake HTTPS清單文件(實際上是整個應用程序)中唯一的部分是其餘的API,它位於不同的域中,應用程序上的所有其他資源都位於應用程序的域中,請求在HTTP下 – Psytronic 2013-03-09 14:28:02

回答

6

需要一點澄清(見我的意見),但在此期間:

清單的NETWORK行爲是真的要動手,根據規範,使「的測試離線應用程序更簡單「,通過減少在線和離線行爲之間的差異。事實上,它只是增加了另一個問題。

默認情況下,清單中未明確列出的任何內容(列在清單文件中),隱式緩存的一部分(指向清單的訪問頁面)或由前綴覆蓋的內容將無法加載,即使您在線,除非網址列在NETWORK部分或NETWORK部分列表*

通配符在NETWORK部分沒有特殊含義,如果列出http://whatever.com/*它將允許對該URL的請求,因爲星號是url中的有效字符。唯一的特殊情況是單個*,這意味着「允許頁面爲不在緩存中的任何資源發出網絡請求」。

基本上,使用*NETWORK不是一個安全風險,實際上它可能是你想要做的,我建立的每個AppCache站點都使用它。

我畫這個流程圖,試圖解釋如何應用程序緩存加載頁面和資源:

Appcache flow chart

+0

感謝流程圖。只是想告訴你網絡有點困惑我。我想'NETWORK中的URL「是指詢問URL是否可以遠程訪問。現在我知道它意味着清單文件中的'NETWORK'字段。 – batman 2014-08-09 08:15:36