Commit Graph

164 Commits

Author SHA1 Message Date
Jonathan Moore 8e914ae112 Add missing Apache License header.
git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1059097 13f79535-47bb-0310-9956-ffa450edef68
2011-01-14 18:25:06 +00:00
Jonathan Moore 17aa988f41 Fix for protocol recommendation:
"304 Not Modified ... If the conditional GET used a strong cache
validator (see section 13.3.3), the response SHOULD NOT include
other entity-headers."

http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.5


git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1058762 13f79535-47bb-0310-9956-ffa450edef68
2011-01-13 22:07:50 +00:00
Jonathan Moore bdf4174033 Capture acceptance tests for only-if-cached (implementation
already passes these).

"To do this, the client may include the only-if-cached directive
in a request. If it receives this directive, a cache SHOULD
either respond using a cached entry that is consistent with the
other constraints of the request, or respond with a 504 (Gateway
Timeout) status."

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.4


git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1058661 13f79535-47bb-0310-9956-ffa450edef68
2011-01-13 17:00:30 +00:00
Jonathan Moore b4d6dee028 Support the following protocol recommendation:
"If a request includes the no-cache directive, it SHOULD NOT
include min-fresh, max-stale, or max-age."

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.4

We address this by looking for no-cache and then filtering the
above directives out if present.


git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1058280 13f79535-47bb-0310-9956-ffa450edef68
2011-01-12 19:14:37 +00:00
Jonathan Moore 7b6ffc39b3 Implementation fix and acceptance tests for protocol recommendation:
"Many HTTP/1.0 cache implementations will treat an Expires value that
is less than or equal to the response Date value as being equivalent
to the Cache-Control response directive "no-cache". If an HTTP/1.1
cache receives such a response, and the response does not include a
Cache-Control header field, it SHOULD consider the response to be non-
cacheable in order to retain compatibility with HTTP/1.0 servers."

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.3

Also had to update a few other test cases that incidentally ran afoul
of this recommendation.


git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1058247 13f79535-47bb-0310-9956-ffa450edef68
2011-01-12 17:35:29 +00:00
Jonathan Moore 7b141fd52d Document acceptance test (implementation already passes):
"If a new cacheable...response is received from a resource while any
existing responses for the same resource are cached, the cache SHOULD
use the new response to reply to the current request."

http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13.12


git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1058232 13f79535-47bb-0310-9956-ffa450edef68
2011-01-12 16:57:14 +00:00
Jonathan Moore 759fe0a755 Added unit tests to document protocol recommendation:
"A cache that passes through requests for methods it does not understand
SHOULD invalidate any entities referred to by the Request-URI."

http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13.10

(Current implementation already does this, but always good to have that
captured in an automated acceptance test).



git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1058224 13f79535-47bb-0310-9956-ffa450edef68
2011-01-12 16:38:28 +00:00
Jonathan Moore bac69b368f Removed deprecated HttpCacheEntry#getVariantURIs and associated
constructors and fields. Also removed code in surrounding classes
that was providing backwards compatibility for the deprecated
Set-based variant data structure. Made a note in the ChangeLog
about the change to the public API between 4.1-beta and 4.1.


git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1058153 13f79535-47bb-0310-9956-ffa450edef68
2011-01-12 14:21:32 +00:00
Jonathan Moore 3c0bc58a30 On the off chance someone wrote a custom serializer for use with the
4.1-beta version of HttpCacheEntry, we want to make sure things still
work properly. The current implementation of HttpCacheEntry already
throws an UnsupportedOperationException if you try to get at the variant
map but the old set-based data structure is there; now we handle this
exception, log a warning, and then use the old structure. This is a bit
less efficient but still demonstrably works (I added a unit test to the
Ehcache suite, where you can submit a custom serializer, that shows that
the implementation still conforms to all the MUST/MUST NOTs).


git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1057745 13f79535-47bb-0310-9956-ffa450edef68
2011-01-11 17:28:20 +00:00
Jonathan Moore e95a80b7a2 Responses from HTTP/1.0 origins to requests containing query parameters
SHOULD NOT be taken from a cache.

http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13.9


git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1057715 13f79535-47bb-0310-9956-ffa450edef68
2011-01-11 16:31:06 +00:00
Jonathan Moore 6e1d7a0ad3 Javadoc for Ehcache and memcached cache storage backends. I think we're in
good shape for Javadocs on the caching module now.


git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1057287 13f79535-47bb-0310-9956-ffa450edef68
2011-01-10 17:09:56 +00:00
Jonathan Moore 4b29dae09d Javadocs for CachingHttpClient itself.
git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1057265 13f79535-47bb-0310-9956-ffa450edef68
2011-01-10 16:33:51 +00:00
Jonathan Moore 6b723dd61e Added more Javadocs, including, most significantly so far, detailed
docs for CacheConfig talking about all the available configuration
options for the caching module.


git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1057242 13f79535-47bb-0310-9956-ffa450edef68
2011-01-10 15:35:37 +00:00
Jonathan Moore ca41afb97e Provided lots of missing Javadoc.
git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1056530 13f79535-47bb-0310-9956-ffa450edef68
2011-01-07 22:01:54 +00:00
Jonathan Moore f9c0e8cac9 Added Javadoc package.html for org.apache.http.client.cache.
git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1056504 13f79535-47bb-0310-9956-ffa450edef68
2011-01-07 21:01:16 +00:00
Sebastian Bazley 4fd34899f0 Unnecessary casts
git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1055732 13f79535-47bb-0310-9956-ffa450edef68
2011-01-06 03:24:49 +00:00
Sebastian Bazley 868e46fd5b Unthrown Exceptions and @Overrides
git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1055731 13f79535-47bb-0310-9956-ffa450edef68
2011-01-06 03:23:34 +00:00
Sebastian Bazley 4b2dccf239 Exception not thrown
git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1055730 13f79535-47bb-0310-9956-ffa450edef68
2011-01-06 03:13:13 +00:00
Sebastian Bazley 32e1cc24bb Exception not thrown
git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1055729 13f79535-47bb-0310-9956-ffa450edef68
2011-01-06 03:11:38 +00:00
Sebastian Bazley 75dd0ae7dd DOcument thread-safety
git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1055728 13f79535-47bb-0310-9956-ffa450edef68
2011-01-06 03:10:21 +00:00
Sebastian Bazley 7550a6edf6 Make private immutable fields final
git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1055727 13f79535-47bb-0310-9956-ffa450edef68
2011-01-06 03:06:51 +00:00
Sebastian Bazley d9090f3d37 Not @Immutable, but it is @ThreadSafe
git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1055726 13f79535-47bb-0310-9956-ffa450edef68
2011-01-06 03:05:55 +00:00
Sebastian Bazley 4896d1752c Tab police
git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1055725 13f79535-47bb-0310-9956-ffa450edef68
2011-01-06 03:02:16 +00:00
Sebastian Bazley 3b4b68fe68 Javadoc fixes
git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1055723 13f79535-47bb-0310-9956-ffa450edef68
2011-01-06 02:57:48 +00:00
Sebastian Bazley 5e95645f07 Missing @Overrides
git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1055722 13f79535-47bb-0310-9956-ffa450edef68
2011-01-06 02:57:27 +00:00
Sebastian Bazley 37e01683fa Exception not thrown
git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1055721 13f79535-47bb-0310-9956-ffa450edef68
2011-01-06 02:56:23 +00:00
Sebastian Bazley 6a970590c0 Unnecessary cast
git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1055720 13f79535-47bb-0310-9956-ffa450edef68
2011-01-06 02:54:42 +00:00
Jonathan Moore 4a63d6a0da Fixed compiler warnings (unused imports, unused private methods).
git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1053060 13f79535-47bb-0310-9956-ffa450edef68
2010-12-27 12:55:32 +00:00
Jonathan Moore 856c1c28ad HTTPCLIENT-1035: committed validating acceptance test and wired in new
cache invalidation call. Also cleaned up some unit tests in
TestCachingHttpClient: static imports of EasyMock methods, as well as
removing unit tests that exercised some protected methods, especially
where they are already covered by acceptance tests against a public
interface (unit testing protected methods leads to brittle tests). Also
rewrite some of the unit tests in TestCachingHttpClient to depend on
fewer mocks (often, just a mock backend HttpClient and mock cache
storage).


git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1052894 13f79535-47bb-0310-9956-ffa450edef68
2010-12-26 15:10:39 +00:00
Jonathan Moore 7b99aca6ab HTTPCLIENT-1035: finished cache-flushing logic for updated
entries mentioned by Content-Location in responses. Still
not hooked in to main request handling flow yet.



git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1052234 13f79535-47bb-0310-9956-ffa450edef68
2010-12-23 12:02:37 +00:00
Jonathan Moore 68ed95699e HTTPCLIENT-1035: begin adding functionality for flushing updated
entries mentioned by Content-Location in responses. Not yet hooked
in to be used.


git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1051865 13f79535-47bb-0310-9956-ffa450edef68
2010-12-22 11:59:23 +00:00
Jonathan Moore 52f311f5de HTTPCLIENT-975: stale-while-revalidate also yields to must-revalidate,
proxy-revalidate on a shared cache, and requests with explicit
freshness constraints.


git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1051235 13f79535-47bb-0310-9956-ffa450edef68
2010-12-20 18:30:46 +00:00
Jonathan Moore df577a7e8f HTTPCLIENT-975: stale-if-error now yields to higher-priority
directives, like must-revalidate, proxy-revalidate, and requests
with explicit freshness constraints.


git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1051206 13f79535-47bb-0310-9956-ffa450edef68
2010-12-20 16:55:03 +00:00
Jonathan Moore 7573bf8284 HTTPCLIENT-975: more method extraction; the body for
CachingHttpClient#execute now at least fits on one screen. :)


git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1051133 13f79535-47bb-0310-9956-ffa450edef68
2010-12-20 14:42:34 +00:00
Jonathan Moore 65cb252c9b HTTPCLIENT-975: more method extraction from the body of
CachingHttpClient#execute()


git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1051087 13f79535-47bb-0310-9956-ffa450edef68
2010-12-20 12:51:26 +00:00
Jonathan Moore cd263f39e3 HTTPCLIENT-975: more refactoring/method-extraction
git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1051076 13f79535-47bb-0310-9956-ffa450edef68
2010-12-20 12:12:55 +00:00
Jonathan Moore 791bb497e2 HTTPCLIENT-975: more refactoring. Handled ProtocolExceptions from
RequestWrapper instantiations further down in the call stack.


git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1051074 13f79535-47bb-0310-9956-ffa450edef68
2010-12-20 11:58:53 +00:00
Jonathan Moore 93603e5f19 HTTPCLIENT-975: refactoring primary execute method in
CachingHttpClient (mostly method extraction).



git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1050878 13f79535-47bb-0310-9956-ffa450edef68
2010-12-19 15:25:04 +00:00
Jonathan Moore a6c38788c0 HTTPCLIENT-975: Javadoc and formatting cleanup.
git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1050624 13f79535-47bb-0310-9956-ffa450edef68
2010-12-18 12:06:28 +00:00
Jonathan Moore 1d4465bdb5 HTTPCLIENT-975: Javadoc and import cleanup.
git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1050622 13f79535-47bb-0310-9956-ffa450edef68
2010-12-18 11:58:37 +00:00
Jonathan Moore 155a9c61c3 HTTPCLIENT-975: Make AsynchronousValidator class package-private.
git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1050620 13f79535-47bb-0310-9956-ffa450edef68
2010-12-18 11:55:09 +00:00
Jonathan Moore 83efe306fd HTTPCLIENT-975: added CacheConfig settings to provide more detailed
control over the background revalidation thread pool, and enabled
the stale-while-revalidate feature by default with a single worker
thread and a max queue size of 100 pending revalidations, which
should be a pretty safe setting.


git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1050360 13f79535-47bb-0310-9956-ffa450edef68
2010-12-17 12:15:50 +00:00
Jonathan Moore 5f88f05627 HTTPCLIENT-975: committed patch for stale-while-revalidate from
Michajlo Matijkiw (michajlo_matijkiw at comcast dot com).
Stale-while-revalidate functionality is currently off by default
until we can add bounding to the revalidation queue (or make it
configurable).

git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1049941 13f79535-47bb-0310-9956-ffa450edef68
2010-12-16 11:54:30 +00:00
Jonathan Moore 3c0cef4586 Added additional acceptance test for variant negotiation:
"If any of the existing cache entries contains only partial content
for the associated entity, its entity-tag SHOULD NOT be included in
the If-None-Match header field unless the request is for a range
that would be fully satisfied by that entry." 
(http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13.6)


git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1049287 13f79535-47bb-0310-9956-ffa450edef68
2010-12-14 21:37:31 +00:00
Jonathan Moore d60c36c40c Renamed URIExtractor to CacheKeyGenerator, which is more descriptive
of what we actually use it for.


git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1049278 13f79535-47bb-0310-9956-ffa450edef68
2010-12-14 21:18:06 +00:00
Jonathan Moore a91847b57c HTTPCLIENT-975: committed patch to support stale-if-error from
RFC5861, with thanks to Mohammed Azeem Uddin
(mohammedazeem_uddin at comcast dot com).


git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1049179 13f79535-47bb-0310-9956-ffa450edef68
2010-12-14 17:18:06 +00:00
Jonathan Moore 70e7ee17d5 HTTPCLIENT-1034: committed patch to update documentation to list
httpclient-cache as a module of the HttpClient component, plus
adding a link to the external benchmarking writeup done by
Comcast Interactive Media. With thanks to Matthew Hawthorne
(matthew_hawthorne -at- comcast.com).


git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1049124 13f79535-47bb-0310-9956-ffa450edef68
2010-12-14 15:27:35 +00:00
Jonathan Moore 6eaaac8251 Added ASF header to Variant.java.
git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1049099 13f79535-47bb-0310-9956-ffa450edef68
2010-12-14 14:16:47 +00:00
Jonathan Moore 0ae68981c8 HTTPCLIENT-1032: during variant negotiation, when the origin specifies
reuse of an existing variant, we no longer cache another copy of the
variant, but rather update the variantMap in the parent entry to
reflect the variant's reuse for requests whose varying headers match
those of the current request.

git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1049051 13f79535-47bb-0310-9956-ffa450edef68
2010-12-14 11:48:34 +00:00
Jonathan Moore e16a59b38c HTTPCLIENT-1032: added a method to HttpCache to allow updating a specific
variant cache entry if its cache key is known. Committed patch with the
additional acceptance test, which now passes. We are still caching extra
copies of the re-used variant, though, so the issue is not yet closed.

git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1049048 13f79535-47bb-0310-9956-ffa450edef68
2010-12-14 11:30:10 +00:00