【发布时间】:2014-08-11 09:31:17
【问题描述】:
我正在使用 Apache HTTPClient 进行远程 API 调用。此过程通过 cron 运行。 由于某种原因,API 响应被缓存。当我从其他客户端进行相同的 API 调用时,它会显示最新数据。但是,当进程(由 cron 唤醒)进行此调用时,它正在获取缓存响应(不是最新数据)。
这里会发生什么?
【问题讨论】:
标签: java caching cron httpclient
我正在使用 Apache HTTPClient 进行远程 API 调用。此过程通过 cron 运行。 由于某种原因,API 响应被缓存。当我从其他客户端进行相同的 API 调用时,它会显示最新数据。但是,当进程(由 cron 唤醒)进行此调用时,它正在获取缓存响应(不是最新数据)。
这里会发生什么?
【问题讨论】:
标签: java caching cron httpclient
httpclient 中没有缓存。因为你总是通过 cron 运行一个新的 Java VM,所以一切都是新鲜的。
请检查您没有将任何可能导致问题的中间代理与 httpclient 一起使用。可以通过 -Dhttp.proxyHost=... 和 -Dhttp.proxyPort=.... 配置代理。
其次,由于您发送的请求不同,您可能会得到另一个结果。不是 URL 本身可能不同,而是标题不同!
尝试设置可能触发不同行为的标题,例如:
HttpGet g = ....
g.setHeader("Cache-Control", "no-cache"); // HTTP 1.1
g.setHeader("Pragma", "no-cache"); // HTTP 1.0
g.setHeader("X-Requested-With", "XMLHttpRequest"); // mimics a browser REST request
还尝试启用 org.apache.http.headers 日志记录目标,并比较 REST 客户端和 apache http 客户端库发送的标头。
【讨论】: