【发布时间】:2015-07-30 21:24:11
【问题描述】:
如何检测用户是如何到达页面的?在 chrome 中链接、重新加载(是否清除缓存?)?
我正在使用角度。我的响应标头包含:
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) 如果我通过链接访问该网页,它会从缓存中加载文件,前提是这些文件在
Status Code:200 OK (from cache)
我使用 ng-include src="''" 加载的 html 文件除外
它们总是从缓存中获取。我必须删除整个浏览器的缓存才能重新获取它们。即使 ctrl+shift+r 也不起作用。在开发人员工具中禁用缓存就像它停止缓存一样工作。
所以我在我的 Angular 应用配置中添加了一些东西。
$httpProvider.defaults.headers.get['Cache-Control'] = 'no-cache';
$httpProvider.defaults.headers.get['Pragma'] = 'no-cache';
在此之后,总是新获取 html 模板。我注意到 chrome 还使用了以下两个请求标头
Cache-Control: 'no-cache'
Pragma: 'no-cache'
这些文件遵守缓存规则,除了 .html 模板。为什么?
如果我将以上几行更改为
$httpProvider.defaults.headers.get['Cache-Control'] = 'max-age=x';
然后它按预期工作,从缓存中获取直到过期,然后检查服务器上是否没有从缓存中修改。但是这样它就不会服从 chrome 发送的 ctrl+r 重新加载
Cache-Control:max-age=0
那么如何检测用户是如何到达 chrome/firefox/etc. 中的网页的呢?
另一种选择是让 angular $http 在获取文件时始终使用与 chrome 相同的标头?正确的?那总是模仿浏览器的 http 调用
检查document.referrer 有多简单?
【问题讨论】:
-
您想将此信息用于什么目的?使用情况统计信息,还是其他?
标签: javascript html angularjs http caching