Файлы не реагируют на обновления кеша приложений через https, но делают это для http.

У нас есть веб-приложение, которое настроено на использование манифеста кеша html для кэширования всех наших файлов и работы в автономном режиме. Наше приложение работает в основном через Google Chrome.

До недавнего времени нам не нужно было работать через https, и все работало, как и ожидалось, через http. Тем не менее, он кэширует все изображения через https (и, возможно, другие файлы, но изображения являются важным битом) и ОТКАЗЫВАЕТСЯ отпускать их.

Наш процесс выпуска выглядит следующим образом:

  1. Разместите новые файлы изображений в нужном месте на сервере (папка IIS inetpub/wwwroot/.../images).
  2. Обновите номер версии с комментариями в конце манифеста кэша, чтобы принудительно выполнить обновление.
  3. Веб-приложение будет автоматически обновляться при следующем обновлении (что оно и делает)

Мы ожидаем, что новое изображение начнет появляться немедленно, но этого не происходит. Даже при непосредственном посещении через https://CLIENTDOMAIN/relpath/image.png изображение загружается как исходное кешированное изображение. Если изображение загружается через http по тому же пути, оно правильно отображает новое изображение!

Если изображение загружено через https в браузере, который никогда его не загружал (скажем, Firefox или Opera), неправильное старое кешированное изображение ВСЕ ЕЩЕ появится на https, но будет отображаться как новое изображение поверх http. Перезапуск IIS не имеет никакого эффекта, равно как и удаление всех конкретных данных веб-сайта через настройки Chrome (Settings->Advanced Settings->Content Settings->All Cookies and Site Data->Specific Domain)

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

IIS Settings

Our webapp runs off Default Website

Output Caching: disabled completely
Bindings: *:80 and *:443
SSL Settings: Not Required, ignore client certs
Everything else is likely standard.

Манифест кэша: я заменил домен на CLIENTDOMAIN и имя нашего программного обеспечения на OURBRAND или BRAND для краткой версии, просто на всякий случай.

CACHE MANIFEST

#html
index.html
BRAND.html
#favicon.ico

#images
https://CLIENTDOMAIN/images/accept.png
https://CLIENTDOMAIN/images/add.png
https://CLIENTDOMAIN/images/watermark.png
https://CLIENTDOMAIN/images/BRAND_Icon_Round32x32.png
https://CLIENTDOMAIN/images/BRAND_Icon_Square57x57.png
https://CLIENTDOMAIN/images/break.png
https://CLIENTDOMAIN/images/calendar.png
https://CLIENTDOMAIN/images/clock.png
https://CLIENTDOMAIN/images/clock1.png
https://CLIENTDOMAIN/images/delete.png
https://CLIENTDOMAIN/images/display.png
https://CLIENTDOMAIN/images/downArrow.png
https://CLIENTDOMAIN/images/editgroup.png
https://CLIENTDOMAIN/images/filter.png
https://CLIENTDOMAIN/images/group.png
https://CLIENTDOMAIN/images/graph.png
https://CLIENTDOMAIN/images/hours.png
https://CLIENTDOMAIN/images/information.png
https://CLIENTDOMAIN/images/left.png
https://CLIENTDOMAIN/images/lock.png
https://CLIENTDOMAIN/images/loginInformation.png
https://CLIENTDOMAIN/images/minus.png
https://CLIENTDOMAIN/images/more.png
https://CLIENTDOMAIN/images/notes.png
https://CLIENTDOMAIN/images/notes1.png
https://CLIENTDOMAIN/images/person.png
https://CLIENTDOMAIN/images/person1.png
https://CLIENTDOMAIN/images/plus.png
https://CLIENTDOMAIN/images/Remove.png
https://CLIENTDOMAIN/images/right.png
https://CLIENTDOMAIN/images/search.png
https://CLIENTDOMAIN/images/text.png
https://CLIENTDOMAIN/images/time.png
https://CLIENTDOMAIN/images/timesheet.png
https://CLIENTDOMAIN/images/upArrow.png
https://CLIENTDOMAIN/images/user.png
https://CLIENTDOMAIN/images/usercheckSelected.png
https://CLIENTDOMAIN/images/weekly.png
https://CLIENTDOMAIN/images/daily.png
https://CLIENTDOMAIN/images/weekly1.png
https://CLIENTDOMAIN/images/daily1.png
https://CLIENTDOMAIN/images/checkOut.png
https://CLIENTDOMAIN/images/checkIn.png
https://CLIENTDOMAIN/images/check.png
https://CLIENTDOMAIN/images/telephone.png
https://CLIENTDOMAIN/images/ajax-loader.gif
https://CLIENTDOMAIN/images/expandArrow.png
https://CLIENTDOMAIN/images/collapseArrow.png
https://CLIENTDOMAIN/images/sign.png
https://CLIENTDOMAIN/images/signedIcon.png
https://CLIENTDOMAIN/images/unsign.png
https://CLIENTDOMAIN/images/addsign.png
https://CLIENTDOMAIN/images/sideArrow.png
https://CLIENTDOMAIN/images/downArrow.png
https://CLIENTDOMAIN/images/sideArrow2.png
https://CLIENTDOMAIN/images/qty.png
https://CLIENTDOMAIN/images/qty1.png
https://CLIENTDOMAIN/images/extra.png
https://CLIENTDOMAIN/images/extra1.png
https://CLIENTDOMAIN/images/noHours.png
https://CLIENTDOMAIN/images/sigCheckYes.png
https://CLIENTDOMAIN/images/sigCheckNo.png
https://CLIENTDOMAIN/images/userSigYes.png
https://CLIENTDOMAIN/images/userSigNo.png
https://CLIENTDOMAIN/images/bothSigYes.png
https://CLIENTDOMAIN/images/empSigYes.png
https://CLIENTDOMAIN/images/empSigNo.png
https://CLIENTDOMAIN/images/deleteArrow.png
https://CLIENTDOMAIN/images/target.png
https://CLIENTDOMAIN/images/graph1.png
https://CLIENTDOMAIN/images/transferHours.png
https://CLIENTDOMAIN/images/percentCalc.png
https://CLIENTDOMAIN/images/defaults.png
https://CLIENTDOMAIN/images/workOrder.png
https://CLIENTDOMAIN/images/workOrder1.png
https://CLIENTDOMAIN/images/footerRight.png
https://CLIENTDOMAIN/images/footerLeft.png
https://CLIENTDOMAIN/images/equipCheck.png
https://CLIENTDOMAIN/images/equipCheck1.png
https://CLIENTDOMAIN/images/activeTab.png
https://CLIENTDOMAIN/images/inactiveTab.png
https://CLIENTDOMAIN/images/prefs.png
https://CLIENTDOMAIN/images/ServiceDetail.png
https://CLIENTDOMAIN/images/Rehab.png
https://CLIENTDOMAIN/images/detailReportClient.png
https://CLIENTDOMAIN/images/detailReportDate.png
https://CLIENTDOMAIN/images/detailReportTime.png
https://CLIENTDOMAIN/images/memoUp.png
https://CLIENTDOMAIN/images/memoDown.png
https://CLIENTDOMAIN/images/rehabUp.png
https://CLIENTDOMAIN/images/rehabDown.png
#Branding Images
images/AppIcon.png
images/AppIconTransparent.png

https://CLIENTDOMAIN/js/jQuery/images/ajax-loader.png
https://CLIENTDOMAIN/js/jQuery/images/form-check-off.png
https://CLIENTDOMAIN/js/jQuery/images/form-check-on.png
https://CLIENTDOMAIN/js/jQuery/images/form-radio-off.png
https://CLIENTDOMAIN/js/jQuery/images/form-radio-on.png
https://CLIENTDOMAIN/js/jQuery/images/icons-18-white.png
https://CLIENTDOMAIN/js/jQuery/images/icons-36-white.png
https://CLIENTDOMAIN/js/jQuery/images/icon-search-black.png

#javascript
#https://CLIENTDOMAIN/js/ALDB/ALDB-min.js 
https://CLIENTDOMAIN/js/ALDB/ALDB.js 
https://CLIENTDOMAIN/js/ALDB/wsproxy.js
config.js

https://CLIENTDOMAIN/js/jQuery/jquery.mobile-1.0.min.js
https://CLIENTDOMAIN/js/jQuery/jquery-1.7.1.min.js

https://CLIENTDOMAIN/js/utilities/mdetect.js
https://CLIENTDOMAIN/js/utilities/jquery.crypt.js
https://CLIENTDOMAIN/js/utilities/jquery.xml2json.pack.js

https://CLIENTDOMAIN/js/simpleWeather/jquery.simpleWeather.js
https://CLIENTDOMAIN/js/exif.js

# UNCOMMENT NEXT FOUR LINES TO RELEASE
https://CLIENTDOMAIN/js/ALUI/UXCore.js
https://CLIENTDOMAIN/js/ALUI/UXTime.js
https://CLIENTDOMAIN/js/ALUI/UXProd.js
https://CLIENTDOMAIN/js/ALUI/UXMed.js

https://CLIENTDOMAIN/js/sigpad/jquery.signaturepad.min.js
https://CLIENTDOMAIN/js/sigpad/json2.min.js
https://CLIENTDOMAIN/js/sigpad/excanvas-r3.min.js
https://CLIENTDOMAIN/js/sigpad/excanvas-r71.min.js

https://CLIENTDOMAIN/js/iscroll/src/iscroll.js
https://CLIENTDOMAIN/js/iscroll/add2home.js

https://CLIENTDOMAIN/js/jQuery/jQuery.ui.datepicker.js
https://CLIENTDOMAIN/js/jQuery/jquery.ui.datepicker.mobile.js

#css
# UNCOMMENT NEXT LINE TO RELEASE
https://CLIENTDOMAIN/css/ALUX.css
https://CLIENTDOMAIN/css/add2home.css
#https://CLIENTDOMAIN/js/jQuery/jquery.mobile-1.0a4.1.min.css
https://CLIENTDOMAIN/js/jQuery/jquery.mobile-1.0.min.css

https://CLIENTDOMAIN/js/sigpad/jquery.signaturepad.css

https://CLIENTDOMAIN/js/jQuery/jquery.mobile.datepicker.css

NETWORK:
https://CLIENTDOMAIN:443/OURBRAND/WebSyncProvider.asmx
cache.manifest
http://maps.gstatic.com/
http://csi.gstatic.com/
http://maps.google.com/
http://maps.googleapis.com/
http://query.yahooapis.com/
http://l.yimg.com/
# COMMENT NEXT LINE TO RELEASE
#*
#v635421628124296068

HTML загружает манифест кеша и все заголовки веб-приложений:

<html lang="en" manifest="cache.manifest">
    <head>
        <title>BRAND</title>
        <!-- Enable the homescreen app on mobile devices -->
        <meta name="apple-mobile-web-app-capable" content="yes" />
        <meta name="mobile-web-app-capable" content="yes" />

        <!-- Enable the App Icon -->
        <link rel="icon" type="image/png" sizes="196x196" href="images/AppIcon.png">
        <link rel="apple-touch-icon" href="images/AppIcon.png">
        <link rel="apple-touch-startup-image" href="https://CLIENTDOMAIN/OURBRAND/images/iPhoneStartup.png">

        <meta name="apple-mobile-web-app-status-bar-style" content="black" />
        <meta name="viewport" content="width=device-width" />
        <meta name="viewport" content="initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no, height=device-height, width=device-width" />

        <meta http-equiv="content-language" content="en">

        ...

Я в растерянности, а кеш приложения достаточно сложно отлаживать как есть, без всех этих странных проблем. Пожалуйста, дайте мне знать, если я могу предоставить больше информации, чтобы помочь кому-то указать мне правильное направление!


person DSurguy    schedule 29.07.2014    source источник
comment
Попробуйте в настройках сервера полностью отключить стандартный кеш для файлов, которые будут обслуживаться через appcache, так как иногда браузер при обновлении appcache все равно будет загружать обновленные файлы из кеша. Это случилось со мной. Установите заголовки с прошедшей датой истечения срока действия и т. Д., Затем попробуйте   -  person markasoftware    schedule 11.08.2014
comment
@Markasoftware К сожалению, он уже настроен так, кеш отключен, срок действия всего истекает немедленно. Я проверю все настройки и отчитаюсь.   -  person DSurguy    schedule 12.08.2014


Ответы (1)


При определении путей ресурсов в манифесте для https используйте только относительные пути, чтобы соблюдать одну и ту же политику происхождения:

«При использовании SSL все ресурсы в манифесте должны соблюдать политику одного и того же источника. То есть все пути должны быть относительными или указывать на ресурсы на том же хосте и порту, что и текущая страница.

Исключением является Google Chrome, который не соответствует спецификации в этом отношении. Через SSL Chrome будет загружать ресурсы из разных источников, если они по-прежнему обслуживаются через SSL».

Кроме того, убедитесь, что ваши сертификаты действительны.

http://appcache.offline.technology/

person ILoveCode    schedule 06.04.2016
comment
Думаю, я облажался с ответом, который опубликовал на этот вопрос в 2014 году, поэтому удалил его. Но это, по сути, то, к чему это сводится. Мы убрали протоколы со всего, используя // вместо http:// или https://, и убедились, что все загружается с того же домена и машины, что и файлы html и манифеста. У нас также были некоторые проблемы с недействительными сертификатами, которые на 100% вызывали проблемы с Safari, если не с Chrome. Спасибо, что обновили этот вопрос, чтобы я мог ответить и закрыть его! - person DSurguy; 08.04.2016
comment
Для меня было бы чрезвычайно полезно получить репутацию, если бы вы могли одобрить мой ответ или проголосовать за него. :-) Рад, что вы смогли это понять! Иногда опыт может быть болезненным учителем, но это также, как правило, хорошо усвоенные уроки. Ваше здоровье! - person ILoveCode; 09.04.2016