Hi David and Stefan,

Thanks for your responses. When the client sends the POST request, we are
sending the Content-Length to the correct value. Since the client is using
a duplex channel to write/read data, why would the server sending 201 cause
any issues with client writing all the data? Shouldn't the client make sure
that it is writing all the data corresponding to Content-Length? Is the
async client aborting request explicitly?

I would like to add that the same server can successfully talk to a browser
without any issues with similar request payload. We also made sure that we
were successful in communicating with the server using a python client
applications.

We have verified using wireshark that when browser (javascript) or python
sends the request, we receive the 201 while client is still in the middle
of sending the request payload. After receiving 201, thew browser and
python still continue with sending the data and successfully send all the
data.

I looked at the RFC : https://www.ietf.org/rfc/rfc2616.txt. The section for
201 says it should be returned when "The request has been fulfilled" and we
have fulfilled the request by creating our resource and by sending the
resource uri as part of Location header.


Thanks once again,
Sachin




On Fri, Aug 19, 2016 at 11:01 AM, David Motes <davidmo...@gmail.com> wrote:

>  The response code should be sent back after the entire request has been
> processed. You cannot send a 201 created back after the headers and then
> discover something is wrong with the body and change the response code to
> some kind of error, it is too late.
>
>  Your server needs to be changed to send that response code upon completion
> of the request.
>
> On Fri, Aug 19, 2016 at 10:47 AM, Sachin Nikumbh <saniku...@gmail.com>
> wrote:
>
> > Hi all,
> >
> > I realized that in my previous post, I did not do a good job of
> explaining
> > the problem that I am facing. My sincere apologies for that.
> >
> > We have a custom server that my client Java application is communicating
> > with using the async client. To be specific we are using an instance of
> > CloseableHttpAsyncClient from the client application. The client sends a
> > POST request with few kilo bytes of data. The server reads the headers,
> > sends a 201 back to the client acknowledging the receipt of request and
> > continues reading with the request body. What I see using wireshark on
> the
> > client side is that the client receives 201 when it is still in the
> middle
> > of sending the data. But then the client sends a FIN even before it has
> > sent all the data. This results in server not receiving all the data.
> >
> > Now, if we remove the server 201 response, everything works fine. I.e
> > client sends all the data to the server. We also don't see this behavior
> if
> > the client sends small amount of data < 3 kb.
> >
> > Is this a known issue? Are there any client side hooks that I can use to
> > fix/debug this issue?
> >
> > Any help would be greatly appreciated.
> >
> > Thanks
> > Sachin
> >
>

Reply via email to