Как определить, как пользователь достиг страницы? Ссылка, перезагрузка (с прозрачным кэшем или нет?) В хроме?
Я использую angular. Мой заголовок ответа содержит:
Cache-Control:max-age=3600
Last-Modified:Tue, 19 May 2015 06:19:02 GMT
1) Это ведет себя так, как ожидалось, когда я перезагружаю (ctrl + r), запрос для всех файлов содержит
Cache-Control:max-age=0
If-Modified-Since:Tue, 19 May 2015 06:19:02 GMT
Если файл не изменен, я получаю
Status Code:304 Not Modified
2) Если я перезагружаюсь с помощью (ctrl + shift + r) или добираюсь до веб-сайта в первый раз, я получаю
Cache-Control:no-cache
Pragma:no-cache
и файл будет загружен заново.
3) Если я перейду на веб-страницу по ссылке, она загрузит файлы из кеша, если они были выбраны и еще 3600 секунд до этого.
Status Code:200 OK (from cache)
EXCEPT html файлы, которые я загружаю с помощью ng-include src= "''"
Они всегда извлекаются из кеша. Я должен удалить кеш всего браузера, чтобы они были извлечены заново. Даже ctrl + shift + r не работает. Отключить кеш в инструментах разработчика, так как в нем останавливается кеширование.
Итак, я добавил кое-что в конфигурацию приложения angular.
$httpProvider.defaults.headers.get['Cache-Control'] = 'no-cache';
$httpProvider.defaults.headers.get['Pragma'] = 'no-cache';
После этого только новые html-шаблоны всегда извлекаются заново. Я заметил, что хром также использует ниже двух заголовков запросов
Cache-Control: 'no-cache'
Pragma: 'no-cache'
и такие файлы подчиняются правилам кэша, кроме шаблонов .html. Почему?
Если я изменил приведенные выше строки на
$httpProvider.defaults.headers.get['Cache-Control'] = 'max-age=x';
то он работает так, как ожидалось, выборка из кэша до истечения срока действия, а затем проверить, не изменился ли он на сервере из кеша. Но таким образом он не будет подчиняться перезагрузке ctrl + r, где chrome отправляет
Cache-Control:max-age=0
Итак, как я могу определить, как пользователь достиг веб-страницы в chrome/firefox/etc.?
Другая альтернатива заключается в том, чтобы сделать angular $http всегда использовать те же заголовки, что и хром, когда он извлекает файл? правильно? Это всегда имитирует HTTP-запросы браузера
Как проверяется проверка ошибок document.referrer
?