如何防止文本/事件流被急切的 Web 代理缓冲?

如何防止文本/事件流被急切的 Web 代理缓冲?

我正在编写一个使用的应用程序服务器发送事件将更新推送到浏览器。这在大多数情况下都很好用,除非客户端位于“Web 加速器”代理后面,该代理会非常积极地缓存来自 Web 服务器的输出,即使标头cache-controlno-cache。我需要发送大量数据,然后代理才会决定给我任何东西,这意味着更新会延迟很长时间。

我认为这个代理不符合 HTTP 标准,但我无法改变它们存在的事实。因此,我需要一种方法来解决这个问题。

是否有一些技巧(也许是一些神奇的标题?)可以用来确保我的事件及时传递?

答案1

除了标头之外,您还有更多选项,no-cache包括Cache-Control针对访问者浏览器以及任何中间缓存代理服务器的缓存指令:

  • private或者public;私人回应特定于用户并且不应被缓存,但公共回应可能会被缓存。
  • no-cache基本上就是字面意思,是一条指令,要求对每个后续请求重新验证资源。尽管验证后证明资源仍然有效,但仍然可以提供缓存的响应。
  • no-store明确的指示是,响应必须被视为机密,根本不可存储,比上面的无缓存选项更强一些。
  • max-age以秒为单位覆盖 Expires 标头并指示资产何时过期并应从缓存中清除。
  • s-maxage以秒为单位,与上面相同,但适用于内容传送网络等共享缓存。

你可以尝试将它们结合起来是否会取得更好的效果。

当然,简单的替代方法可能是启用 TLS,这样 Web 加速器就无法再读取访问者和 Web 服务器之间的数据。

相关内容