[ 
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]

Reply via email to