Динамически генерируемый HTML5 appcache не хочет играть

В стеке LAMP у нас есть статический manifest.appcache файл, который работает нормально. Но теперь нам нужно динамически генерировать этот appcache. К сожалению, Chrome и FF отказываются принять manifest.appcache когда генерируется динамически.

Вот HTTP-ответ для статически сгенерированного appcache (я получаю это из Chrome >> about-appcache-internals >> View Entries >> Нажмите на example.com/manifest.appcache):

http://www.openbook.pub/manifest.appcache
HTTP/1.1 200 OK
Date: Tue, 07 Apr 2015 06:43:53 GMT
Server: Apache
Last-Modified: Tue, 07 Apr 2015 06:34:13 GMT
ETag: "207-5131c9a591f11"Accept-Ranges: bytes
Content-Length: 519
Cache-Control: no-cache, private
Expires: Tue, 07 Apr 2015 06:43:53 GMT
Content-Type: text/cache-manifest
Showing 519 of 519 bytes

00000000: 43 41 43 48 45 20 4d 41 4e 49 46 45 53 54 0a 23  CACHE MANIFEST.#
00000010: 31 34 32 38 33 34 36 33 38 35 0a 0a 43 41 43 48  1428346385..CACH
00000020: 45 3a 0a 2f 61 73 73 65 74 73 2f 62 64 62 66 30  E:./assets/bdbf0
00000030: 38 38 2f 63 73 73 2f 6f 70 65 6e 62 6f 6f 6b 2e  88/css/openbook.
00000040: 63 73 73 0a 2f 61 73 73 65 74 73 2f 62 64 62 66  css./assets/bdbf
00000050: 30 38 38 2f 66 6f 6e 74 65 6c 6c 6f 2f 63 73 73  088/fontello/css
00000060: 2f 66 6f 6e 74 65 6c 6c 6f 2e 63 73 73 0a 2f 61  /fontello.css./a
00000070: 73 73 65 74 73 2f 62 64 62 66 30 38 38 2f 6a 73  ssets/bdbf088/js
00000080: 2f 67 6c 6f 62 61 6c 2e 65 76 65 6e 74 73 2e 6a  /global.events.j
00000090: 73 0a 2f 61 73 73 65 74 73 2f 62 64 62 66 30 38  s./assets/bdbf08
000000a0: 38 2f 6a 73 2f 6a 71 75 65 72 79 2e 6d 6f 75 73  8/js/jquery.mous
000000b0: 65 77 68 65 65 6c 2e 6a 73 0a 2f 61 73 73 65 74  ewheel.js./asset
000000c0: 73 2f 62 64 62 66 30 38 38 2f 6a 73 2f 70 6c 75  s/bdbf088/js/plu
000000d0: 67 2e 64 72 6f 70 2e 6d 65 73 73 61 67 65 2e 6a  g.drop.message.j
000000e0: 73 0a 2f 61 73 73 65 74 73 2f 62 64 62 66 30 38  s./assets/bdbf08
000000f0: 38 2f 6a 73 2f 70 6c 75 67 2e 69 6e 74 65 72 70  8/js/plug.interp
00000100: 72 65 74 2e 6a 73 0a 2f 61 73 73 65 74 73 2f 62  ret.js./assets/b
00000110: 64 62 66 30 38 38 2f 6a 73 2f 70 6c 75 67 2e 74  dbf088/js/plug.t
00000120: 6f 6f 6c 2e 6a 73 0a 2f 61 73 73 65 74 73 2f 62  ool.js./assets/b
00000130: 64 62 66 30 38 38 2f 6a 73 2f 70 6c 75 67 2e 6f  dbf088/js/plug.o
00000140: 70 65 6e 62 6f 6f 6b 2e 6a 73 0a 2f 62 6f 6f 6b  penbook.js./book
00000150: 73 2f 54 72 75 74 68 2b 61 6e 64 2b 50 6f 77 65  s/Truth+and+Powe
00000160: 72 0a 2f 62 6f 6f 6b 73 2f 54 72 75 74 68 2b 61  r./books/Truth+a
00000170: 6e 64 2b 50 6f 77 65 72 2f 70 6f 73 74 6d 6f 64  nd+Power/postmod
00000180: 65 72 6e 2b 6d 61 6e 2b 70 65 72 73 6f 6e 0a 2f  ern+man+person./
00000190: 62 6f 6f 6b 73 2f 54 72 75 74 68 2b 61 6e 64 2b  books/Truth+and+
000001a0: 50 6f 77 65 72 2f 77 68 61 74 2b 69 73 2b 68 69  Power/what+is+hi
000001b0: 73 74 6f 72 79 25 33 46 0a 2f 62 6f 6f 6b 73 2f  story%3F./books/
000001c0: 54 72 75 74 68 2b 61 6e 64 2b 50 6f 77 65 72 2f  Truth+and+Power/
000001d0: 73 6f 75 72 63 65 73 2b 6f 66 2b 74 72 75 74 68  sources+of+truth
000001e0: 0a 0a 46 41 4c 4c 42 41 43 4b 3a 0a 2f 20 2f 73  ..FALLBACK:./ /s
000001f0: 69 74 65 2f 6f 66 66 6c 69 6e 65 0a 0a 4e 45 54  ite/offline..NET
00000200: 57 4f 52 4b 3a 0a 2a                             WORK:.*

Все идет нормально. Теперь я использую PHP / Yii2 для динамического генерирования идентичного ответа HHTP. Вот код:

$manifest = $this->assembleManifest();
$etag = md5('openbook' . $timestamp);
header('Last-Modified: '.gmdate('D, d M Y H:i:s \G\M\T', time()-3600));
header("ETag: \"2e2-51312d1828aa4\"");
header('Accept-Ranges: bytes');
header("Content-length: ". strlen($manifest));
header('Cache-Control: no-cache, private');
header('Expires: '.gmdate('D, d M Y H:i:s \G\M\T', time()));
header('Content-Type: text/cache-manifest');
echo $manifest;

Как уже было сказано, и Chrome, и FF не распознают этот HTTP-ответ как appcache, В Fiddler я могу проверить ответ и не вижу существенных различий со статически сгенерированным ответом. Вот заголовки:

HTTP/1.1 200 OK
Date: Tue, 07 Apr 2015 07:04:18 GMT
Server: Apache
ETag: "2e2-51312d1828aa4"Accept-Ranges: bytes
Cache-Control: no-cache, private
Expires: Tue, 07 Apr 2015 07:04:18 GMT
Last-Modified: Tue, 07 Apr 2015 06:04:18 GMT
Content-length: 519
Keep-Alive: timeout=2, max=98
Connection: Keep-Alive
Content-Type: text/cache-manifest

Браузеры просто не могут распознать это как appcache. Например, в FF-консоли команда appcache validate получает ответ «Указанная страница не имеет манифеста.»

Я также попытался установить заголовок, как предложено в этот урок

header('Cache-Control: max-age=0, no-cache, no-store, must-revalidate');
header('Pragma: no-cache');
header('Expires: Wed, 11 Jan 1984 05:00:00 GMT');
header('Content-Type: text/cache-manifest');

Тоже не работает

Что может быть не так?

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]