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

CFL*_*eff 7 proxy web-services http transparentproxy

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

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

http://webservicedomain.com/poll/?randomNumber=384389
Run Code Online (Sandbox Code Playgroud)

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

joh*_*tok 14

您应该使用HTTP的Cache-Control标头来实现此目的.

在回复中你应该发送:

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

您还应该为旧版HTTP/1.0中间服务器发送一个Pragma标头:

Pragma: no-cache
Run Code Online (Sandbox Code Playgroud)

相关阅读: