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

标签 web-services http proxy transparentproxy

我编写了一个 RESTful 网络服务,它只被设备使用,从不被浏览器使用。这些设备通过所有者现有的家用路由器访问互联网,并通过每隔 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 - 表示全部或部分响应消息供单个用户使用,不得由共享缓存缓存。
  • ma​​x-age=0 - 表示客户端愿意接受年龄不大于 0 秒的响应。 IE。响应立即过时。
  • must-revalidate - 当出现在缓存接收到的响应中时,该缓存在它变得陈旧后不得使用该条目来响应后续请求,而无需首先与源服务器重新验证它。

您还应该发送 Pragma header对于遗留的 HTTP/1.0 中间服务器:

Pragma: no-cache

相关阅读:

关于web-services - 使用我的网络服务的客户如何绕过他们的 ISP 的透明代理缓存以确保他们的请求到达我的服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11314777/

相关文章:

Javascript 请求到 SSL 请求

javascript - 在建立TLS连接时,如何传递其他信息?

ios - webservice的输出没有使用alamofire快速提供所需的json

java - (Java) 在运行时动态创建新的 REST Web 服务

java - 如何在 SOAP 请求中设置字符编码

http - 拦截和操纵 HTTP POST 请求

python - 附加 Django HTTP 代理 URL

node.js - Nodejs代理到另一个端口

css - Vue 元素在生产中缺少样式

java - 用户异常 Tomcat OK -> Websphere NOK