On Wed, 2023-02-22 at 16:18 +0530, sreenivas somavarapu wrote:
> Hi Oleg,
> 
> Thank you for the Content-Length query which helped in determining
> the
> actual cause of the issue. The problem was with sample code which is
> adding
> entity object to request builder for all methods.


Could you please give the link to that sample code?

>  Once added a hardcoded
> check to create and add entity (i.e., instance of
> *AbstractClassicEntityProducer*) only for POST, PATCH and PUT methods
> the
> issue disappeared and we are able to get the response and now even
> Content-Length header is not being sent in the request.
> 

The problem was not so much the Content-Length header, as the custom
message exchange handler terminating the request message body
incorrectly.


> In 5.x sync implementation it seems all methods extend the
> *HttpUriRequestBase* class and there is no way to avoid adding an
> entity to
> a request object.

Of course, there is. An entity can simply be null.


>  In 4.5.x we have all entity available methods extending
> *HttpEntityEnclosingRequestBase* and based on this we could determine
> whether to add an entity to a request object or not. Is there
> anything
> similar methodology available for Async implementation or 5.x
> httpclient
> implementation as well through which we can determine for which
> request
> method instances we need to add entity objects to requestbuilder
> instead of
> the current hardcoded check for few methods?
> 

Unlike HC 4.x, HC 5.x conforms to RFC 7230 that makes it technically
valid for all HTTP methods to have a message body (except TRACE. Oh
well). This however does not force one to use request bodies with GET
and DELETE requests where a message body makes no sense.

Oleg

> Regards,
> Sreenivas
> 
> On Wed, Feb 22, 2023 at 2:38 AM Oleg Kalnichevski <ol...@apache.org>
> wrote:
> 
> > On Wed, 2023-02-22 at 01:27 +0530, sreenivas somavarapu wrote:
> > > Hi Team,
> > > 
> > > 
> > > I have a perl script deployed on IIS server. When accessing this
> > > perl
> > > script we are getting *Connection closed* error (see below for
> > > stack
> > > trace)
> > > from Async HTTPClient 5.2.x future callback. When further
> > > debugged
> > > found
> > > that IIS is sending “Connection: Close” header after the response
> > > is
> > > sent
> > > due to which http client is throwing the said error even after
> > > reading /
> > > processing the response. This is resulting in response lost what
> > > IIS
> > > has
> > > sent. When I access the same resource using browser it is able to
> > > display
> > > the content. Is there any mechanism to handle these kind of
> > > responses?
> > > 
> > > 
> > 
> > HttpClient by itself handles 'Connection: Close' correctly but your
> > custom message exchange handling logic appears wrong. What I see
> > from
> > the exception stack trace is the client is still busy sending the
> > request body when the server sends back the response and drops the
> > connection on it, and the entire message exchange fails with the
> > ConnectionClosedException as a result.
> > 
> > And why on earth are you sending 'Content-Length: 0' with a GET
> > request? Basically your request producing logic appears wrong.
> > 
> > Oleg
> > 
> > 
> > > 
> > > *Async HTTPClient Code*
> > > 
> > > Future<Message<HttpResponse, String>> responseHandler =
> > > httpAsyncClient.execute(reqBuilder.build(),
> > > 
> > >                     new BasicResponseConsumer<>(new
> > > AbstractClassicEntityConsumer<String>(){…}, null, clientContext,
> > > null);
> > > 
> > > *Message<HttpResponse, String> response = responseHandler.get();*
> > > 
> > >  retCode = response.getHead().getCode();
> > > 
> > > 
> > > 
> > > *Stack Trace / Exception stack*
> > > 
> > > org.apache.hc.core5.http.ConnectionClosedException: Connection is
> > > closed
> > > 
> > >                at
> > > org.apache.hc.core5.http.impl.nio.ClientHttp1StreamDuplexer.disco
> > > nnec
> > > ted(ClientHttp1StreamDuplexer.java:212)
> > > 
> > >                at
> > > org.apache.hc.core5.http.impl.nio.AbstractHttp1StreamDuplexer.onD
> > > isco
> > > nnect(AbstractHttp1StreamDuplexer.java:409)
> > > 
> > >                at
> > > org.apache.hc.core5.http.impl.nio.AbstractHttp1IOEventHandler.dis
> > > conn
> > > ected(AbstractHttp1IOEventHandler.java:95)
> > > 
> > >                at
> > > org.apache.hc.core5.http.impl.nio.ClientHttp1IOEventHandler.disco
> > > nnec
> > > ted(ClientHttp1IOEventHandler.java:41)
> > > 
> > >                at
> > > org.apache.hc.client5.http.impl.async.LoggingIOSession$1.disconne
> > > cted
> > > (LoggingIOSession.java:258)
> > > 
> > >                at
> > > org.apache.hc.core5.reactor.InternalDataChannel.disconnected(Inte
> > > rnal
> > > DataChannel.java:204)
> > > 
> > >                at
> > > org.apache.hc.core5.reactor.SingleCoreIOReactor.processClosedSess
> > > ions
> > > (SingleCoreIOReactor.java:231)
> > > 
> > >                at
> > > org.apache.hc.core5.reactor.SingleCoreIOReactor.doExecute(SingleC
> > > oreI
> > > OReactor.java:133)
> > > 
> > >                at
> > > org.apache.hc.core5.reactor.AbstractSingleCoreIOReactor.execute(A
> > > bstr
> > > actSingleCoreIOReactor.java:86)
> > > 
> > >                at
> > > org.apache.hc.core5.reactor.IOReactorWorker.run(IOReactorWorker.j
> > > ava:
> > > 44)
> > > 
> > >                at java.lang.Thread.run(Thread.java:748)
> > > 
> > > 
> > > 
> > > 
> > > 
> > > *HTTPClient log extract*
> > > 
> > > 2023-02-21 15:37:59,600 DEBUG
> > > [org.apache.hc.client5.http.impl.async.HttpAsyncMainClientExec]
> > > ex-0000000003 send request GET /sample/ldapUD/16239/printenv.pl
> > > HTTP/1.1,
> > > entity len 0
> > > 
> > > 2023-02-21 15:37:59,600 DEBUG
> > > [org.apache.hc.client5.http.headers]
> > > c-0000000002 >> GET /printenv.pl HTTP/1.1
> > > 
> > > 2023-02-21 15:37:59,600 DEBUG
> > > [org.apache.hc.client5.http.headers]
> > > c-0000000002 >> Accept-Encoding: gzip, deflate
> > > 
> > > 2023-02-21 15:37:59,600 DEBUG
> > > [org.apache.hc.client5.http.headers]
> > > c-0000000002 >> SMSDOMAIN: .abc.net
> > > 
> > > 2023-02-21 15:37:59,600 DEBUG
> > > [org.apache.hc.client5.http.headers]
> > > c-0000000002 >> accept:
> > > text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,
> > > imag
> > > e/webp,image/apng,*/*;q=0.8,application/signed-
> > > exchange;v=b3;q=0.7
> > > 
> > > 2023-02-21 15:37:59,600 DEBUG
> > > [org.apache.hc.client5.http.headers]
> > > c-0000000002 >> Cache-Control: max-age=0
> > > 
> > > 2023-02-21 15:37:59,600 DEBUG
> > > [org.apache.hc.client5.http.headers]
> > > c-0000000002 >> Upgrade-Insecure-Requests: 1
> > > 
> > > 2023-02-21 15:37:59,600 DEBUG
> > > [org.apache.hc.client5.http.headers]
> > > c-0000000002 >> *connection: keep-alive*
> > > 
> > > 2023-02-21 15:37:59,600 DEBUG
> > > [org.apache.hc.client5.http.headers]
> > > c-0000000002 >> Accept-Language: en-US,en;q=0.9
> > > 
> > > 2023-02-21 15:37:59,600 DEBUG
> > > [org.apache.hc.client5.http.headers]
> > > c-0000000002 >> user-agent: Mozilla/5.0 (Windows NT 10.0; Win64;
> > > x64)
> > > AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0
> > > Safari/537.36
> > > 
> > > 2023-02-21 15:37:59,600 DEBUG
> > > [org.apache.hc.client5.http.headers]
> > > c-0000000002 >> Content-Length: 0
> > > 
> > > 2023-02-21 15:37:59,600 DEBUG
> > > [org.apache.hc.client5.http.headers]
> > > c-0000000002 >> Host: iisserver
> > > 
> > > 2023-02-21 15:37:59,600 DEBUG
> > > [org.apache.hc.client5.http.impl.async.HttpAsyncMainClientExec]
> > > ex-0000000003: produce request data
> > > 
> > > ….
> > > 
> > > ….
> > > 
> > > ….
> > > 
> > > 2023-02-21 15:37:59,647 DEBUG [org.apache.hc.client5.http.wire]
> > > c-0000000002[ACTIVE][r:r] << 7N. .s..c...      37 4e fe 1f e3 73
> > > 1b
> > > a9 63
> > > 10 00 00
> > > 
> > > 2023-02-21 15:37:59,647 DEBUG
> > > [org.apache.hc.client5.http.headers]
> > > c-0000000002 << HTTP/1.1 200 OK
> > > 
> > > 2023-02-21 15:37:59,647 DEBUG
> > > [org.apache.hc.client5.http.headers]
> > > c-0000000002 << Content-Type: text/plain; charset=iso-8859-1
> > > 
> > > 2023-02-21 15:37:59,647 DEBUG
> > > [org.apache.hc.client5.http.headers]
> > > c-0000000002 << Content-Encoding: gzip
> > > 
> > > 2023-02-21 15:37:59,647 DEBUG
> > > [org.apache.hc.client5.http.headers]
> > > c-0000000002 << Vary: Accept-Encoding
> > > 
> > > 2023-02-21 15:37:59,647 DEBUG
> > > [org.apache.hc.client5.http.headers]
> > > c-0000000002 << Server: Microsoft-IIS/10.0
> > > 
> > > 2023-02-21 15:37:59,647 DEBUG
> > > [org.apache.hc.client5.http.headers]
> > > c-0000000002 << set-cookie: APPSESSION=abcd;Domain=.test.com;
> > > Path=/default/xyz
> > > 
> > > 2023-02-21 15:37:59,647 DEBUG
> > > [org.apache.hc.client5.http.headers]
> > > c-0000000002 << X-Powered-By: ASP.NET
> > > 
> > > 2023-02-21 15:37:59,647 DEBUG
> > > [org.apache.hc.client5.http.headers]
> > > c-0000000002 << Date: Tue, 28 Feb 2023 03:41:23 GMT
> > > 
> > > 2023-02-21 15:37:59,647 DEBUG
> > > [org.apache.hc.client5.http.headers]
> > > c-0000000002 << *Connection: close*
> > > 
> > > 2023-02-21 15:37:59,647 DEBUG
> > > [org.apache.hc.client5.http.headers]
> > > c-0000000002 << Content-Length: 2170
> > > 
> > > 2023-02-21 15:37:59,647 DEBUG
> > > [org.apache.hc.client5.http.impl.async.HttpAsyncMainClientExec]
> > > ex-0000000003: consume response HTTP/1.1 200 OK, entity len 2170
> > > 
> > > 2023-02-21 15:37:59,647 DEBUG
> > > [org.apache.hc.client5.http.impl.async.HttpAsyncMainClientExec]
> > > ex-0000000003: consume response data, len 2170 bytes
> > > 
> > > 2023-02-21 15:37:59,647 DEBUG
> > > [org.apache.hc.client5.http.impl.async.HttpAsyncMainClientExec]
> > > ex-0000000003: end of response data
> > > 
> > > 2023-02-21 15:37:59,647 DEBUG
> > > [org.apache.hc.client5.http.impl.async.InternalHttpAsyncClient]
> > > c-0000000002 Connection is not kept alive
> > > 
> > > 2023-02-21 15:37:59,647 DEBUG
> > > [org.apache.hc.client5.http.impl.async.HttpAsyncMainClientExec]
> > > ex-0000000003: execution failed: Connection is closed
> > > 
> > > 2023-02-21 15:37:59,647 DEBUG
> > > [org.apache.hc.client5.http.impl.async.InternalAbstractHttpAsyncC
> > > lien
> > > t]
> > > ex-0000000003 request failed: Connection is closed
> > > 
> > > 2023-02-21 15:37:59,647 DEBUG
> > > [org.apache.hc.client5.http.impl.nio.PoolingAsyncClientConnection
> > > Mana
> > > ger]
> > > ep-0000000003 close IMMEDIATE
> > > 
> > > 2023-02-21 15:37:59,647 DEBUG
> > > [org.apache.hc.client5.http.impl.nio.DefaultManagedAsyncClientCon
> > > nect
> > > ion]
> > > c-0000000002 Shutdown connection IMMEDIATE
> > > 
> > > 2023-02-21 15:37:59,647 DEBUG
> > > [org.apache.hc.client5.http.impl.async.InternalHttpAsyncClient]
> > > ep-0000000003 endpoint closed
> > > 
> > > 2023-02-21 15:37:59,647 DEBUG
> > > [org.apache.hc.client5.http.impl.async.InternalHttpAsyncClient]
> > > ep-0000000003 discarding endpoint
> > > 
> > > 2023-02-21 15:37:59,647 DEBUG
> > > [org.apache.hc.client5.http.impl.nio.PoolingAsyncClientConnection
> > > Mana
> > > ger]
> > > ep-0000000003 releasing endpoint
> > > 
> > > 
> > 
> > 
> > -------------------------------------------------------------------
> > --
> > To unsubscribe, e-mail: httpclient-users-unsubscr...@hc.apache.org
> > For additional commands, e-mail:
> > httpclient-users-h...@hc.apache.org
> > 
> > 
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: httpclient-users-unsubscr...@hc.apache.org
For additional commands, e-mail: httpclient-users-h...@hc.apache.org

Reply via email to