【问题标题】:cachingHttpclient cannot ignore header "Cache-Control: no-cache"cachingHttpclient 不能忽略标头“Cache-Control: no-cache”
【发布时间】:2013-02-13 04:11:09
【问题描述】:

我正在使用 Apache cachingHttpClient 从 java 代码中查询 REST API。

尽管收到“Cache-Control: no-cache”标头,但我想缓存一些 http 响应,这会导致cachingHttpClient 不缓存文件。

使用独立的 http 代理,例如 squid、mod_cache...,我可以调整配置以忽略这些标头并覆盖默认行为。

我宁愿不使用独立的 http 代理,而是使用 100% java 代码。

  1. 还有其他 http 客户端可以提供更多的缓存控制吗?
  2. 我可以实现一个中间层/代理来重写标头吗?
  3. 我可以通过继承修补缓存HttpClient 吗?

【问题讨论】:

    标签: java caching cache-control apache-httpclient-4.x


    【解决方案1】:

    请求被CachedResponseSuitabilityCheckercanCachedResponseBeUsed 方法中拒绝。如果你需要不同的行为,那就是实现你自己版本的类,然后使用cachingHttpClient的长构造函数

    CachingHttpClient(HttpClient backend, 
         CacheValidityPolicy validityPolicy,
         ResponseCachingPolicy responseCachingPolicy,
         HttpCache responseCache,
         CachedHttpResponseGenerator responseGenerator,
         CacheableRequestPolicy cacheableRequestPolicy,
         CachedResponseSuitabilityChecker suitabilityChecker, 
         ConditionalRequestBuilder conditionalRequestBuilder, 
         ResponseProtocolCompliance responseCompliance, 
         RequestProtocolCompliance requestCompliance) 
    

    【讨论】:

    • 拒绝点应该来自CacheableRequestPolicy。子类无法继承长构造函数。因此,您必须将整个源代码复制到您的包中。这将使错误修复补丁变得困难。
    猜你喜欢
    • 2015-04-13
    • 2022-11-17
    • 1970-01-01
    • 2022-12-09
    • 1970-01-01
    • 2019-03-16
    • 2021-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多