新手问题 HTTP 请求会被浏览器和服务器之外的其他地方缓存吗?

early · 2017年07月21日 · 最后由 h_minghe 回复于 2017年07月26日 · 2819 次阅读

先吐个槽,话题节点里面是不是可以增加一个“HTTP/HTTPS” ?

言归正传,我是个一个网络通信上的新手,一直以来都听到一个令我很困惑又很质疑的说法:

“HTTP 中的 GET 请求可能会被××路由器(或其他服务)缓存,如要保证某个 http 请求会到达服务器,要使用 POST。”

在此想请教此观点在“正常情况下”,即网络正常同时 http 请求没有被恶意篡改的情况下,对该观点及其延伸的探讨。

  1. 也就是说,http 请求可能会被浏览器和服务器之外的服务缓存?对此我深感焦躁和质疑,在 google 等地方也没有搜索出确切的答案。
  2. 观察很多服务的接口,一般都会在请求后面加上一个值每次都会变化的时间戳参数,这只是防止浏览器缓存,还是真的还要防止××服务缓存 http 请求?
  3. 鉴于复杂的网络和极度复杂的国内状况,新手还是想再此请教一下高手。

我的思考:

  1. http 是应用层协议,传输过程是底层的协议,底层协议应该不可能去缓存上层应用数据。
  2. 即使有请求中转的地方,比如信息审查,也只是审查而已,应该不会去缓存请求吧?
  3. 正确地缓存 http get 请求,代价不小,似乎也没有必要,大多数情况下也不应该。

说 https 会被缓存的已经被我怼回去了,先不理他们。上面这个议题,还请多多指教。

你和服务器之间并没有直接连接的一根线,这些数据包要通过很多路由器网关网桥网 xx 才能抵达服务器。

HTTP 是明文的,中间的路由器上完全可以将你的请求一层层还原出来,然后修改你的请求或者伪造一个响应。

对 HTTP 不论是 POST 还是 GET 都可以给你注入一段电信的联通的广告,或者缓存结果,或者怎么改都可以. 你当然可以在 HTTP 上加一些请求校验机制 (例如 Oauth 1 的请求摘要计算), 但是会搞得很复杂而且他们还是有办法搞你,这时直接用 HTTPS 即可。

你听到的是狭隘经验主义的说法,有些网络提供商会选择缓存一些热门资源的 GET 来提速或者实现其他目的,但不代表他们不能搞你的 POST/PATCH/DELETE/OPTION/HEAD/... 请求

luikore 回复

TCP 是建立在 UDP 上的

第一次看到这种说法,这个不是啊。ip 协议头都不一样。

flowerwrong 回复

你对我帖子中的说法怎么看?

luikore 回复

谢谢你的回答。明白你的意思,POST 和 GET 只是 header 里面的方法名不一样,要搞的话肯定都可以,没有差别。只是想请教在“正常情况”(没有被乱搞)下的状况。我更新下帖子的说法,之前的措辞不够准确。

你的观点应该是确认 HTTP GET 请求可能会被运营商缓存的,但具体缓存机制不得而知。

某些民营宽带供应商,为了降低与电信或联通等主干通讯的开销,可能会缓存一些静态资源。像长城宽带有一套非常复杂的缓存机制,但有时依然会误判缓存上了不该缓存的东西,很多后端开发都有过大受其害的经历吧。

我想到了 varnish / squid / nginx cache,也有可能会缓存你的请求。使其无法到达应用服务器。

对啊,CDN 不就是例子吗?

flowerwrong 回复

我错了...

hbin 回复

CDN 应该是缓存了资源,而不是缓存了请求吧。

搜一下IDC/ISP信息安全管理系统,而且 https 可以被缓存,只不过代价较大

zhangsm 回复

varnish 这种算是服务器缓存吧,服务器缓存在我们自己的控制范围内。帖子没有讨论这种状况。

dsh0416 回复

对对对,帖子就是想请教这种“灰色”的状况。

early 回复

算不上“灰色”,都是明目张胆的“留存”全网的信息。国内的任子行等企业都在做这一块,主要是现在做 IDC 机房的,不上这么一套系统根本拿不下来执照

每每看到网络的问题,我都想情不自禁的想 @kgen 哈哈。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号