[
https://issues.apache.org/jira/browse/HTTPCLIENT-2411?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18048762#comment-18048762
]
ASF subversion and git services commented on HTTPCLIENT-2411:
-------------------------------------------------------------
Commit d07ff4d2fbc094582b342bcc7edb9d69f18fb30f in httpcomponents-client's
branch refs/heads/master from Arturo Bernal
[ https://gitbox.apache.org/repos/asf?p=httpcomponents-client.git;h=d07ff4d2f ]
HTTPCLIENT-2411: Use standard HTTP-date format for synthesized Date header
(#775)
Add regression test for cache conformance Date formatting
> Invalid "Date" header generated by ResponseCacheConformance
> -----------------------------------------------------------
>
> Key: HTTPCLIENT-2411
> URL: https://issues.apache.org/jira/browse/HTTPCLIENT-2411
> Project: HttpComponents HttpClient
> Issue Type: Bug
> Affects Versions: 5.5.1, 5.5.2, 5.6.1
> Reporter: Tomasz Kanafa
> Priority: Minor
> Time Spent: 20m
> Remaining Estimate: 0h
>
> I think there is a bug in the httpclient5 handling missing {{Date}} header in
> the response when using cached client.
> {code:java}
> org.apache.hc.client5.http.impl.cache.ResponseCacheConformance#process
> @Override
> public void process(final HttpResponse response,
> final EntityDetails entity,
> final HttpContext context) throws HttpException,
> IOException {
> if (response.getCode() == HttpStatus.SC_NOT_MODIFIED) {
> for (final String headerName : DISALLOWED_ENTITY_HEADERS) {
> response.removeHeaders(headerName);
> }
> }
> if (!response.containsHeader(HttpHeaders.DATE)) {
> response.addHeader(new BasicHeader(HttpHeaders.DATE, Instant.now()));
> <--- toString on instant
> }
> }
> other place
> org.apache.hc.client5.http.cache.HttpCacheEntryFactory#ensureDate
> static void ensureDate(final HeaderGroup headers, final Instant instant) {
> if (!headers.containsHeader(HttpHeaders.DATE)) {
> headers.addHeader(new BasicHeader(HttpHeaders.DATE,
> DateUtils.formatStandardDate(instant))); <--- formatted here
> }
> }
> parsing the header
> org.apache.hc.client5.http.cache.HttpCacheEntry#getInstant(java.util.concurrent.atomic.AtomicReference<java.time.Instant>,
> java.lang.String)
> uses
> org.apache.hc.client5.http.utils.DateUtils#parseStandardDate(org.apache.hc.core5.http.MessageHeaders,
> java.lang.String)
> /**
> * Standard date formatters: {@link #FORMATTER_RFC1123}, {@link
> #FORMATTER_RFC1036}, {@link #FORMATTER_ASCTIME}.
> *
> * @since 5.2
> */
> public static final DateTimeFormatter[] STANDARD_PATTERNS = new
> DateTimeFormatter[] {
> FORMATTER_RFC1123, - "EEE, dd MMM yyyy HH:mm:ss zzz"
> FORMATTER_RFC1036, - "EEE, dd-MMM-yy HH:mm:ss zzz"
> FORMATTER_ASCTIME - "EEE MMM d HH:mm:ss yyyy"
> }; {code}
> the "Date" in invalid format causes problems in some specific situations eg.
> when using
> {code:java}
> org.apache.hc.client5.http.cache.HttpCacheEntry#getInstant()
> ...
> private Instant getInstant(final AtomicReference<Instant> ref, final String
> headerName) {
> Instant instant = ref.get();
> if (instant == null) {
> instant = DateUtils.parseStandardDate(this, headerName);
> if (instant == null) {
> instant = NON_VALUE;
> }
> if (!ref.compareAndSet(null, instant)) {
> instant = ref.get();
> }
> }
> return instant != null && instant != NON_VALUE ? instant : null;
> }{code}
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]