1
jarlyyn 2017-02-27 16:07:36 +08:00
一般不都是链接后面加个时间戳吗?
|
2
jarlyyn 2017-02-27 16:08:04 +08:00
如果是要通知 cdn 清缓存。
应该是调用 api |
4
peesefoo OP 并不提供 api
|
6
batnss 2017-02-27 16:13:25 +08:00 via Android
模拟登入 输入链接 刷 手工版 api
|
7
oott123 2017-02-27 16:14:52 +08:00
浏览器按 Ctrl+F5 本质上就是发 HTTP 请求
所以你把那个 HTTP 请求抓出来自己用 php 发就好了 |
9
peesefoo OP @jarlyyn 目的是通知 cdn ,源站内容已更新,请速来抓取最新内容,替换 cdn 服务器上旧的内容。访客访问到的是缓存在 cdn 上的内容。加时间戳的是不缓存的,失去 cdn 的作用。
|
10
humxman 2017-02-27 16:34:53 +08:00 via Android
Ctrl+F5 这个是无缓存重新请求, Curl 按标准 http 请求带上有效登录 cookie 就行。
|
13
yangweijie 2017-02-27 17:00:54 +08:00
location.reload(true)
|
14
anyforever 2017-02-27 17:11:53 +08:00
你要更新的是整个页面,还是单个图片或者 JS 文件?
整个页面最好走 CDN 的接口通知更新缓存 单个图片或者 JS ,直接在文件名后变换尾巴就好了。 |
15
binux 2017-02-27 17:15:08 +08:00 via Android
CTRL-F5 怎么可能能刷新 CDN 缓存?难道每个新用户访问都会导致 CDN 重新缓存吗,那要他何用?
|
16
langmoe 2017-02-27 17:16:05 +08:00
等等, ctrl+F5 能把 cdn 的缓存也刷了?那要是有个用户按着 ctrl+F5 不撒手你家 cdn 的缓存功能不直接失效了
|
17
jianzhiyao020 2017-02-27 17:31:57 +08:00
可以用 console ?直接执行脚本
|
18
Zzzzzzzzz 2017-02-27 17:35:28 +08:00
ctrl+F5
|
19
wenzichel 2017-02-27 17:35:46 +08:00
1. 在你修改完上传到 cdn 后,修改页面中引用该静态资源后面的时间戳,只在你修改文件时才改时间戳
2. 将上传的每个静态资源都进行 hash 命名,然后替换页面中的静态资源路径 |
20
Zzzzzzzzz 2017-02-27 17:36:13 +08:00
(自动回了, 接上)清的是本地浏览器缓存, 正规点的 CDN 服务应该有 purge 的 API 吧
|
21
xialdj 2017-02-27 17:36:49 +08:00 via iPhone
输入链接提交的时候 把请求抓下来 然后自己模拟这个请求
|
22
GoBeyond 2017-02-27 18:16:51 +08:00 via Android
我觉得你的解决思路有问题
你的意思是,前面的 CDN 缓存了后端渲染的 html ? 这样的话我感觉真的思路有问题 页面 html 缓存的实现,按照我的理解,应该在后端进行而不是交给前面的 cdn ,不然肯定一堆麻烦 当页面发生更新之后,通知在后端的缓存逻辑清除缓存,当有新的请求时载入页面至缓存,这样或许比较好吧 我也是新萌,如果哪里说的有问题希望其他大牛不吝赐教 |
23
smallpath 2017-02-27 18:21:45 +08:00
缓存资源名中包含 hash (不能是链接后缀形式,必须是文件名中),改了 hash 自己就刷新了。
|
24
lhbc 2017-02-27 18:27:17 +08:00 via iPhone
CDN 一般会忽略请求头的 no-cache
正确方法是改变 arg |
25
zhoushiya 2017-02-27 18:57:54 +08:00 via Android
我觉得楼主的意思是他把静态页存到了 cdn ,然后更新内容了。需要刷新 cdn 的缓存…
|
26
zhidian 2017-02-27 19:20:32 +08:00
"一个是登录他们的后台,输入链接提交刷新;一个是在浏览器中打开页面,然后按 CTRL + F5 来刷新缓存" 这两个不一样啊……前面那个确实刷新了(延后生效),后面那个……就啥也没干。
|
27
peesefoo OP @zhidian 实际上这个 cdn 支持 ctrl +f5 来刷新 cdn 服务器上的缓存
|
28
xieranmaya 2017-02-27 23:03:24 +08:00
|
29
dangyuluo 2017-02-27 23:11:18 +08:00
我以前的解决办法是,加截取后三位的时间戳, math.round(timestamp/1000)*1000
|
30
dangyuluo 2017-02-27 23:14:18 +08:00
你也可以这么做(丧心病狂一点),以野狗为例,每个文章页面都发起一个 websocket 到野狗惟一对应的文档。你在后台更新文档后,用 php sdk 向野狗的该文档发送一个时间戳。然后所有前台浏览中的页面会收到这个 ws 消息,然后用 HTML5 API 刷新带时间戳的页面就可以。因为你有新的时间戳了, CDN 也默认回源。
当其他用户打开这个页面的时候,发现时间戳和最新版本是匹配的,就不用再刷新了。 |
31
lecher 2017-02-27 23:34:50 +08:00 via Android 1
这个问题更像是管理缓存机制的策略。
最优策略肯定是利用 CDN 自带的刷新缓存服务去通知各地 CDN 缓存服务器刷新,这才是百分百有效的刷新缓存页面机制。 联系 CDN 服务商,要求开有鉴权主动刷新缓存的 API ,避免验证码这种诡异的请求数量限制。 如果 CDN 节点不支持主动刷新缓存,最好是改缓存策略,只用 CDN 缓存带 hash 标注的静态文件和几乎不会再修改的 HTML 页面。需要更新的 HTML 界面的请求带宽由服务器来抗。只传输 HTML 界面的代码带宽消耗已经很小了,可以通过多开服务器分摊流量负载。至于页面数据解析和请求数据库的负载,可以考虑用 Redis 按 URL 整体打包缓存。 在后台模拟强制刷新网页的请求属于歪门邪道,那样顶天了只能刷新服务器所在地区的缓存。 |