nginx 缓存 no-cache问题

proxy_cache_path创建了一个缓存,然后在客户端通过curl -H "Cache-Control: no-cache" http://10.234.70.103:2048/index.html来模拟请求。

结果发现nginx每次还是使用缓存数据发给客户端。我的理解是在http请求头部加入Cache-Control: no-cache是要告诉代理服务器不要用缓存数据,为什么nginx还是会使用缓存数据来响应客户端呢?

邀请回答
提问于 2021-01-04 21:04
796 次浏览
共1个回答

发表评论
  • 陶辉
    2021-01-05 08:34

    no-cache在请求头部时,是告诉代理服务器,不能直接使用已有缓存作为响应返回,除非带着缓存条件到上游服务端得到 304 验证返回码才可使用现有缓存。cache-control在请求头部中的意义有点反直觉,你可以看下我的这一节视频课:https://time.geekbang.org/course/detail/175-99534

    0
    回复
    举报
    • Rockets 2021-01-05 09:19

      多谢陶老师。 我又在nginx服务器上抓包看了一下。 Nginx还是直接把本地的缓存发给了客户端,并没有先去上游服务器确认再发送。是我哪个地方配置不对吗?


      多谢!

      0
      回复
      举报
    • 陶辉 回复 Rockets 2021-01-05 10:45

      我刚看了下1.19.6的源代码,Nginx目前无视HTTP请求中的Cache-Control头部,只会处理上游发来的响应cache-control头部。所以,如果你想实现RFC规范中的语义,要用_bypass指令通过变量来实现是否使用缓存了。

      0
      回复
      举报
    • Rockets 回复 陶辉 2021-01-05 13:11

      感谢陶老师

      0
      回复
      举报
提问者

Rockets

暂无个人介绍

  • 0

    文章

  • 1

    粉丝

  • 3

    被赞

Rockets
按Enter键发送
您已邀请位用户
Copyright 公安部网络安全保卫局 All Rights Reserved
京公网安备 11010502047880号    京ICP备05070602号