[ https://issues.apache.org/jira/browse/HTTPCORE-481?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16118535#comment-16118535 ]
Gary Gregory commented on HTTPCORE-481: --------------------------------------- Than you for your report. Can you provide a failing unit test patch? Thank you, Gary > Early response suspends output even when response status is not error > --------------------------------------------------------------------- > > Key: HTTPCORE-481 > URL: https://issues.apache.org/jira/browse/HTTPCORE-481 > Project: HttpComponents HttpCore > Issue Type: Bug > Components: HttpCore NIO > Affects Versions: 4.4.5 > Reporter: Tuomas Kiviaho > > I have a {{text/event-stream}} response where status code 200 is sent > immediately back even when there is still request body streaming in process. > This works well with Jetty client but for some reason I could only receive > the first full buffer at server side when switching over to HttpAsyncClient. > The only visible notion that something went wrong was Jetty doing an idle > timeout cleanup. Luckily there is a notion of connection state which got > invalidated when response was received but only when request body streaming > was still in progress. > I found out via this link > https://stackoverflow.com/questions/14250991/is-it-acceptable-for-a-server-to-send-a-http-response-before-the-entire-request > that probably the reason behind the behavior is to prevent flooding the > server in case of an error. > {quote} > An HTTP/1.1 (or later) client sending a message-body SHOULD monitor the > network connection for an error status while it is transmitting the request. > If the client sees an error status, it SHOULD immediately cease transmitting > the body. > {quote} > Below is a patch that currently functions as a work-a-round for me. I'd still > prefer the current behavior in case of unauthorized authentication etc. > because the request body can be quite large. > {code:title=org/apache/http/nio/protocol/HttpAsyncRequestExecutor.java:295} > } else if (state.getRequestState() == MessageState.BODY_STREAM) { > // Early response > + if (statusCode >= 400) { > conn.resetOutput(); > conn.suspendOutput(); > state.setRequestState(MessageState.COMPLETED); > state.invalidate(); > + } > } > {code} -- This message was sent by Atlassian JIRA (v6.4.14#64029) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@hc.apache.org For additional commands, e-mail: dev-h...@hc.apache.org