如何使客户端浏览器忽略 cache-control 而读取缓存? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zlldeta
V2EX    浏览器

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

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

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

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


    接下来划重点:
    这个网站不是楼主的,所以楼主不能直接修改网站的后端代码,不能主动给网站配置 CDN 服务。
    所以楼上期望从网站后端角度修改的朋友们可能要失望了。
    also24
        9
    also24  
       2020-07-19 22:24:32 +08:00
    然后是我认为比较简单的方法:
    在内网 / 外网套一层 nginx 反代就好了,反代的过程中修改下缓存控制的 header 即可。
    反正浏览器在楼主手里,直接改 hosts,把要访问的那个域名指向反代就好。
    zlldeta
        10
    zlldeta  
    OP
       2020-07-19 22:26:44 +08:00
    @also24 对的对的,我再研究一下
    ThirdFlame
        11
    ThirdFlame  
       2020-07-19 22:27:41 +08:00
    对 自己给他套一层反代。
    Juszoe
        12
    Juszoe  
       2020-07-19 22:37:59 +08:00
    除了反代,还有个办法,但是只能针对 http
    部署一个 lancache 或者 squid,可以缓存 http 的资源
    autoxbc
        13
    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
        14
    zlldeta  
    OP
       2020-07-20 21:52:19 +08:00
    @also24
    @ThirdFlame
    @autoxbc
    @Juszoe
    谢谢各位大佬!最后用反代做了,这个方案给别人用也方便。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1097 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 23:15 PVG 07:15 LAX 15:15 JFK 18:15
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86