如何使客户端浏览器忽略 cache-control 而读取缓存?

2020-07-19 20:49:36 +08:00
 zlldeta
1906 次点击
所在节点    浏览器
14 条回复
yuzo555
2020-07-19 20:51:05 +08:00
最好的方案还是修改 Cache-Control
实在不行你可以自己客户端做缓存
zlldeta
2020-07-19 20:55:25 +08:00
服务端管不了啊,而且他的 css 、js 什么的每次都要重新下载,人一多就十分缓慢,就想让他读取缓存就行了;或者是有什么办法,让这些引用转移到公用 cdn 。感激不尽!
@yuzo555
yuzo555
2020-07-19 20:58:24 +08:00
github + jsdelivr
zlldeta
2020-07-19 21:07:47 +08:00
@yuzo555 能详细说说吗? github 在这里是做什么的?
ChanKc
2020-07-19 21:08:24 +08:00
service worker+cache API
imn1
2020-07-19 22:06:35 +08:00
浏览器刷新有三种方式
1.全部请求
2.根据缓存的时间请求部分
3.只请求变化的部分
浏览一般只提供前两种,Ctrl-F5 和 F5

第三种发出的请求数量最少,刷新最快(F12 可以观察到),客户端实现的方式
1.在地址栏原来的 url 直接回车
2.js 发送 location 为当前地址
其他我就不知道了,超出我的知识范围
服务端如何做也不知道
yukiww233
2020-07-19 22:09:25 +08:00
manifest 里可以指定部分缓存
also24
2020-07-19 22:22:33 +08:00
看了半天 2 楼,我尝试着理解一下楼主想要做什么:

楼主想要访问的某个网站,下载速度本来就不怎么样,服务器配置的缓存有效期还比较短。
这导致楼主在访问这个网站的时候,往往会比较缓慢,人多的时候就更痛苦了。
所以楼主希望能够自己强制浏览器直接读缓存,不要每次都从缓慢的服务器上下载了。


接下来划重点:
这个网站不是楼主的,所以楼主不能直接修改网站的后端代码,不能主动给网站配置 CDN 服务。
所以楼上期望从网站后端角度修改的朋友们可能要失望了。
also24
2020-07-19 22:24:32 +08:00
然后是我认为比较简单的方法:
在内网 / 外网套一层 nginx 反代就好了,反代的过程中修改下缓存控制的 header 即可。
反正浏览器在楼主手里,直接改 hosts,把要访问的那个域名指向反代就好。
zlldeta
2020-07-19 22:26:44 +08:00
@also24 对的对的,我再研究一下
ThirdFlame
2020-07-19 22:27:41 +08:00
对 自己给他套一层反代。
Juszoe
2020-07-19 22:37:59 +08:00
除了反代,还有个办法,但是只能针对 http
部署一个 lancache 或者 squid,可以缓存 http 的资源
autoxbc
2020-07-20 00:26:52 +08:00
纯前端的做法:

1. 把网站的前端资源(CSS & js)下载到本地
2. 写个油猴脚本载入这些资源
3. 用广告过滤工具屏蔽官方的资源地址

稍微麻烦的是第 2 条
1. 载入 JS 可以用 require 方法
2. 载入 CSS 可以用 link 标签

link 形式的 CSS 有时会遇到 CSP 策略问题
1. 可以用 resource 和 GM_getResourceText 读取文本
2. 得到文本后用 GM_addStyle 载入
zlldeta
2020-07-20 21:52:19 +08:00
@also24
@ThirdFlame
@autoxbc
@Juszoe
谢谢各位大佬!最后用反代做了,这个方案给别人用也方便。

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

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

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

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

© 2021 V2EX