Можно ли включать внешние файлы в кэш-манифест?

Я создаю автономное веб-приложение и хочу использовать кэш-манифест. В настоящее время мой кэш-манифест выглядит следующим образом:

CACHE MANIFEST
# Change the version number below each time we update a resource.
# Rev 1
index.html
photo.html
js/photo.js
css/photo.css
http://code.jquery.com/jquery-1.6.1.min.js
http://code.jquery.com/mobile/1.0b1/jquery.mobile-1.0b1.min.js
http://code.jquery.com/mobile/1.0a4.1/jquery.mobile-1.0a4.1.min.css
http://maps.google.com/maps/api/js?sensor=false&region=GB

Есть ли какая-нибудь причина не включать внешние, jQuery, размещенные на CDN, файлы jQuery Mobile и Google Maps в манифест кеша?

Я не могу думать об одном, но я думал, что попрошу таких мудрее, чем я:)

Ответы

Ответ 1

Вы не можете. Cache Manifest будет работать только для файлов из одного домена. Вам потребуется прокси-сервер из вашего домена, если вы хотите использовать белый список для междоменных ресурсов.

Ответ 2

Да. Фактически, вы должны включать внешние изображения в манифест, или некоторые браузеры не будут загружать их вообще, даже если доступно сетевое соединение! (Если вы не предоставляете раздел NETWORK, который может вызвать выборки изображений каждый раз, минуя обычный кеш браузера.)

Изображения будут кэшироваться (по крайней мере, Firefox, не проверял Chrome).

spec явно говорит:

В манифесте автономного приложения можно использовать абсолютные пути или даже абсолютные URL

http://manifest-validator.com/ также сообщает манифест с внешними URL-адресами как OK.

Я не уверен на 100%, что это также относится к скриптам, но быстрый тест с Firefox выглядел так, как будто script кэшируется, как ожидалось.

Ответ 3

MobileSafari имеет правило, что в SSL все пути в applicationCache должны соответствовать политике одного происхождения. ПриложениеCache успешно кэширует пути с иностранным происхождением, но вы не увидите эти ресурсы, перечисленные в таблице Web Inspector- > Storage- > ApplicationCache, и они не будут доступны в автономном режиме.

Это поведение не описано в документации Apple, но все еще очевидно в iOS 10.2: https://developer.apple.com/library/content/documentation/iPhone/Conceptual/SafariJSDatabaseGuide/OfflineApplicationCache/OfflineApplicationCache.html