PHP 或 js 能否在后台实现自动 CTRL+F5 刷新

2017-02-27 16:05:20 +08:00
 peesefoo
网站用了 cdn 服务,要刷新指定链接的缓存,有两种方式,一个是登录他们的后台,输入链接提交刷新;一个是在浏览器中打开页面,然后按 CTRL + F5 来刷新缓存。
这两种方式不管怎么说都要手动,想知道是否可以通过 php 或什么方式自动执行 js 来自动刷新缓存,在发布文章等操作后自动刷新页面缓存。
由于cdn网站登录框使用了验证码,php直接登录后台提交链接的方式不可行。
4507 次点击
所在节点    PHP
31 条回复
xialdj
2017-02-27 17:36:49 +08:00
输入链接提交的时候 把请求抓下来 然后自己模拟这个请求
GoBeyond
2017-02-27 18:16:51 +08:00
我觉得你的解决思路有问题
你的意思是,前面的 CDN 缓存了后端渲染的 html ?
这样的话我感觉真的思路有问题
页面 html 缓存的实现,按照我的理解,应该在后端进行而不是交给前面的 cdn ,不然肯定一堆麻烦
当页面发生更新之后,通知在后端的缓存逻辑清除缓存,当有新的请求时载入页面至缓存,这样或许比较好吧

我也是新萌,如果哪里说的有问题希望其他大牛不吝赐教
smallpath
2017-02-27 18:21:45 +08:00
缓存资源名中包含 hash (不能是链接后缀形式,必须是文件名中),改了 hash 自己就刷新了。
lhbc
2017-02-27 18:27:17 +08:00
CDN 一般会忽略请求头的 no-cache
正确方法是改变 arg
zhoushiya
2017-02-27 18:57:54 +08:00
我觉得楼主的意思是他把静态页存到了 cdn ,然后更新内容了。需要刷新 cdn 的缓存…
zhidian
2017-02-27 19:20:32 +08:00
"一个是登录他们的后台,输入链接提交刷新;一个是在浏览器中打开页面,然后按 CTRL + F5 来刷新缓存" 这两个不一样啊……前面那个确实刷新了(延后生效),后面那个……就啥也没干。
peesefoo
2017-02-27 19:26:07 +08:00
@zhidian 实际上这个 cdn 支持 ctrl +f5 来刷新 cdn 服务器上的缓存
xieranmaya
2017-02-27 23:03:24 +08:00
dangyuluo
2017-02-27 23:11:18 +08:00
我以前的解决办法是,加截取后三位的时间戳, math.round(timestamp/1000)*1000
dangyuluo
2017-02-27 23:14:18 +08:00
你也可以这么做(丧心病狂一点),以野狗为例,每个文章页面都发起一个 websocket 到野狗惟一对应的文档。你在后台更新文档后,用 php sdk 向野狗的该文档发送一个时间戳。然后所有前台浏览中的页面会收到这个 ws 消息,然后用 HTML5 API 刷新带时间戳的页面就可以。因为你有新的时间戳了, CDN 也默认回源。
当其他用户打开这个页面的时候,发现时间戳和最新版本是匹配的,就不用再刷新了。
lecher
2017-02-27 23:34:50 +08:00
这个问题更像是管理缓存机制的策略。
最优策略肯定是利用 CDN 自带的刷新缓存服务去通知各地 CDN 缓存服务器刷新,这才是百分百有效的刷新缓存页面机制。
联系 CDN 服务商,要求开有鉴权主动刷新缓存的 API ,避免验证码这种诡异的请求数量限制。
如果 CDN 节点不支持主动刷新缓存,最好是改缓存策略,只用 CDN 缓存带 hash 标注的静态文件和几乎不会再修改的 HTML 页面。需要更新的 HTML 界面的请求带宽由服务器来抗。只传输 HTML 界面的代码带宽消耗已经很小了,可以通过多开服务器分摊流量负载。至于页面数据解析和请求数据库的负载,可以考虑用 Redis 按 URL 整体打包缓存。

在后台模拟强制刷新网页的请求属于歪门邪道,那样顶天了只能刷新服务器所在地区的缓存。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/343559

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX