代理缓存服务器的限制?

代理缓存服务器的限制?

我有一些关于代理缓存服务器的比较笼统的问题。

假设一下,我一直在考虑在家里安装代理缓存服务器,以减少流经路由器的流量(ISP 对可以使用的数据总量有上限)。服务器将位于路由器内部,因此路由器不会知道某些数据被存储

在这种情况下,代理缓存服务器的效果如何?(此外,我还可以采用哪些其他方法来减少路由器上的网络流量)

代理服务器可以缓存网站上的单张图片吗?例如,论坛经常更新内容,但网站上显示的图片不会改变。网站的一些信息可以保存吗?还是由于网页的动态容量,必须再次请求整个网页?

我对代理服务器的功能还比较陌生,如果我能找到足够的信息,我最终会把它带到我的 IT 工作中。

答案1

代理服务器可以缓存网站上的单张图片吗?

是的。

由于网页容量动态变化,是否需要重新请求整个网页?

必须重新获取动态部分,代理应该通过检查页面中每个单独获取的元素中的代理控制标头来处理这个问题。


以下是 Wireshark 捕获的 Chrome 从超级用户获取网页的简短(经过编辑)示例

客户请求

GET /questions/419790/confused-by-cpu-model HTTP/1.1
Host: superuser.com
Connection: keep-alive
User-Agent: …Chrome…
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Referer: http://superuser.com/questions
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: …

服务器响应

HTTP/1.1 200 OK
Cache-Control: public, max-age=60
Content-Type: text/html; charset=utf-8
Content-Encoding: gzip
Expires: Wed, 02 May 2012 19:41:23 GMT
Last-Modified: Wed, 02 May 2012 19:40:23 GMT
Vary: *
Date: Wed, 02 May 2012 19:40:23 GMT
Content-Length: 9831

请注意Cache-Control: public, max-age=60,这Expires: Wed, 02 May 2012 19:41:23 GMT就是服务器尝试控制每部分内容如何缓存的方式。超级用户问题页面可能有数十或数百个这样的单独获取的元素。

阅读内容W3C 关于 Cache-control 的说法

Cache-Control 通用标头字段用于指定请求/响应链中所有缓存机制必须遵守的指令。这些指令指定旨在防止缓存对请求或响应产生不利干扰的行为。这些指令通常会覆盖默认的缓存算法。缓存指令是单向的,因为请求中存在指令并不意味着响应中也存在相同的指令。

之后

民众
表示响应可能被任何缓存缓存,即使它通常不可缓存或只能在非共享缓存中缓存。(另请参阅授权,第 14.8 节,了解更多详细信息。)

私人的
表示响应消息的全部或部分内容仅供单个用户使用,不得由共享缓存缓存。这允许源服务器声明响应的指定部分仅供一个用户使用,并且不是其他用户请求的有效响应。私有(非共享)缓存可以缓存响应。注意:此处使用“私有”一词仅控制响应的缓存位置,不能确保消息内容的隐私性。

无缓存
如果 no-cache 指令未指定字段名称,则缓存不得使用响应来满足后续请求,除非源服务器重新验证成功。这允许源服务器阻止缓存,即使已配置为向客户端请求返回过时响应的缓存也是如此。

等等——这是一个很大的主题领域。

相关内容