Hi,

First, some background. I have a client code working with remote server. Client 
is based on HttpClient. I have access to its code, but I cannot change it. 
Remote server is also out of my control. This server provides standard "100 
Continue" feature. First, client sends only POST request header. Then server 
decides whether to accept it and then sends either "100 Continue" or an error 
response back to the client. In case client receives "100 Continue", it submits 
request body to the server. Nothing special.

What I need is to mimic this server behavior using Jetty and some custom logic 
so that client do not see any difference between my server and the real server. 
Jetty version is 9.0.3 v20130506. 

Here is how I handle request rejection on the server side:

resp.setStatus(403);
resp.setHeader("header", "value");
ServletOutputStream os = resp.getOutputStream();
os.println("Error text.");
os.close();

And at first glance this works fine: client expects 100 code, but recieves 
someting else, do not send request body and returns error code.

However, if I change my code as follows:

Thread.sleep(2000); // Think about it as a some long-running server-side logic.
resp.setStatus(403);
resp.setHeader("header", "value");
ServletOutputStream os = resp.getOutputStream();
os.println("Error text.");
os.close();

... client got stuck trying to write request body data to the socket.

Then I injected TCPMon between the client and my server and saw the following 
picture:
1) Client sends request header to the server WITHOUT body
2) Then it waits for a while (about a second) ...
3) ... and then starts writing request body data to server even if 100 Continue 
was not sent by the server! 

The problem could be on either side:
1) May be HttpClient breaks 100 Continue contract and start pushing request 
data before getting 100 Continue.
2) May be some background Jetty threads start reading request body before 
actually sending 100 Continue.

Anyway, client code cannot be changed and it works normally with the real 
server even if I simulate extremly slow connection through proxy. So I assume 
that it is something on Jetty side - may be some additional configuration is 
required, may be this is a bug. may be something else.

Could you please help me with this issue?

Thanks in advance.

Vladimir Ozerov.
 
_______________________________________________
jetty-users mailing list
[email protected]
https://dev.eclipse.org/mailman/listinfo/jetty-users

Reply via email to