网络服务 – 使用我的网络服务的客户如何绕过其ISP的透明代理缓存,以确保他们的请求到达我的服务器?

我编写了一个RESTful Web服务,只能由设备使用,而不是浏览器.设备通过所有者现有的家用路由器访问互联网,并通过路由器每隔30秒发送一次HTTP请求与Web服务进行通信.这些请求主要是“轮询”请求,以查看Web服务是否具有该设备的任何新信息.

我想阻止任何ISP透明代理拦截请求并返回缓存的响应.我已经读过,这样做的一种方法是在请求的URL末尾附加一个随机查询字符串,以欺骗代理,使其认为它是一个唯一的请求.例如:

http://webservicedomain.com/poll/?randomNumber=384389

我有能力做到这一点,但这是最好的方法吗?有点似乎是一个黑客.

最佳答案
您应该使用HTTP’s Cache-Control header来实现此目的.

在回复中你应该发送:

Cache-Control: private, must-revalidate, max-age=0

> private – 表示响应消息的全部或部分用于单个用户,并且不得由共享高速缓存进行高速缓存.
> max-age = 0 – 表示客户端愿意接受年龄不大于0秒的响应.即回复立即陈旧.
> must-revalidate – 当存在于缓存接收的响应中时,该缓存必须在该条目变为陈旧以响应后续请求而不首先使用源服务器重新验证它之后才使用该条目.

你也应该为遗留的HTTP / 1.0中介服务器发送Pragma header

Pragma: no-cache

相关阅读:

> caching chapter of the HTTP spec;
> Mark Nottingham’s HTTP caching tutorial.

转载注明原文:网络服务 – 使用我的网络服务的客户如何绕过其ISP的透明代理缓存,以确保他们的请求到达我的服务器? - 代码日志