[
https://issues.apache.org/jira/browse/HTTPCORE-475?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16072217#comment-16072217
]
M.S. Dousti commented on HTTPCORE-475:
--------------------------------------
Dear Oleg,
Thanks for your response.
I actually think (but maybe I'm wrong) that you didn't apply step 1 in
reproducing the error, i.e., changing {{ElementalReverseProxy}} to run
{{printStackTrace()}} and {{System.exit(-1)}}. I guess this because in your
output log, you received {{I/O error: Connection reset}} without any stack
trace, and without the proxy server being killed.
I also see the lines {{Outgoing connection to www.bing.com/204.79.197.200}} and
{{Outgoing connection to www.bing.com/13.107.21.200}} in your logs. This is
odd, as the corresponding lines in my logs are {{Outgoing connection to
/204.79.197.200}}. Maybe your {{hosts}} file is different than mine, and
perhaps your Java code differs from mine (as my logs have the format {{Outgoing
connection to /IP}} rather than {{Outgoing connection to hostname/IP}}).
I'm also almost sure that the issue does not have to do with network problems,
as I tried the whole process with and without the proxy a dozen times, and
watched the Chrome's DevTools output to make sure that it works properly when
no proxy is involved.
Anyway, as I said in my previous post, the whole issue can be reproduced by
using a simple backend server rather than Bing. I wrote an HTML file, and a PHP
file, put them in the {{htdocs}} folder of an Apache HTTP server, and used it
as the backend server. I used the latest commit to HC github (219b55b), to make
sure we are on the same page.
Here's [a screencast I made|https://youtu.be/CCK0UQvm5CY] which shows how to
reproduce the error.
The files used can be downloaded from Gist:
* [index.php|https://gist.github.com/msdousti/418ee2d42cac914beeceda2f5be68fba]
* [form.php|https://gist.github.com/msdousti/b98f225512bd21ba23caebc5548f4678]
* [(modified)
ElementalReverseProxy.java|https://gist.github.com/msdousti/364c523609f84d75fccb38e955cfa984].
The only modification I made to {{ElementalReverseProxy.java}} is at line 276,
which prints the stack trace and exits.
To reproduce, just put {{index.php}} and {{form.php}} in Apache HTTP Server
{{htdocs}} folder, and follow the screencast.
PS: In the video, the error manifests itself after just one refresh (F5).
However, sometimes you have to refresh multiple times before seeing the error.
This is the only part of "error reproduction" I couldn't figure out.
> Occasional issues in handling "204 No Content"
> ----------------------------------------------
>
> Key: HTTPCORE-475
> URL: https://issues.apache.org/jira/browse/HTTPCORE-475
> Project: HttpComponents HttpCore
> Issue Type: Bug
> Components: Examples, HttpCore
> Affects Versions: 4.4.6
> Environment: Windows, Java 8
> Reporter: M.S. Dousti
> Priority: Minor
>
> While testing {{ElementalReverseProxy}}, I noted that occasionally, some
> requests fail. Digging further, it seems that the code has some difficulty in
> handling POST requests whose responses have "204 No Content" status. The bug
> is intermittent, so it is a bit tricky to reproduce. One way is to run the
> proxy against [http://www.bing.com]. (Notice it's HTTP and not HTTPS). Here
> are the steps:
> 1) Change line 274 of {{ElementalReverseProxy}} to further assist in
> debugging, from:
> {code:java}
> System.err.println("I/O error: " + ex.getMessage());
> {code}
> to:
> {code:java}
> ex.printStackTrace(); System.exit(-1);
> {code}
> 2) Add the following lines to your {{hosts}} file ({{/etc/hosts}} in Linux,
> and {{%SystemRoot%\System32\drivers\etc\hosts}} in Windows):
> {code:none}
> 127.0.0.1 bing.com
> 127.0.0.1 www.bing.com
> {code}
> 3) Run {{ElementalReverseProxy}} against one of Bing's IP addresses. I used
> {{204.79.197.200}}.
> 4) Navigate your browser to {{http://www.bing.com:8888}}, and watch the
> output of
> {{ElementalReverseProxy}}. Here's a sample run:
> {code:none}
> Listening on port 8888
> Incoming connection from /127.0.0.1
> Outgoing connection to /204.79.197.200
> New connection thread
> >> Request URI: /
> << Response: HTTP/1.1 200 OK
> Incoming connection from /127.0.0.1
> Outgoing connection to /204.79.197.200
> Incoming connection from /127.0.0.1
> New connection thread
> >> Request URI:
> >> /fd/ls/l?IG=3C1FD9BC348B419DAF07D5D09D135555&CID=3ED5D1926AB96D71082FDB206BCB6CA6&Type=Event.CPT&DATA={%22pp%22:{%22S%22:%22L%22,%22FC%22:-1,%22BC%22:-1,%22SE%22:-1,%22TC%22:-1,%22H%22:116,%22BP%22:134,%22CT%22:169,%22IL%22:1},%22ad%22:[-1,-1,1600,770,1600,770,0]}&P=SERP&DA=Bn2
> Outgoing connection to /204.79.197.200
> New connection thread
> >> Request URI: /fd/ls/lsp.aspx?
> Incoming connection from /127.0.0.1
> Outgoing connection to /204.79.197.200
> New connection thread
> Incoming connection from /127.0.0.1
> >> Request URI:
> >> /notifications/render?bnptrigger=%7B%22PartnerId%22%3A%22HomePage%22%2C%22IID%22%3A%22SERP.2000%22%2C%22Attributes%22%3A%7B%22RawRequestURL%22%3A%22%2F%22%7D%7D&IG=3C1FD9BC348B419DAF07D5D09D135555&IID=SERP.2000
> Outgoing connection to /204.79.197.200
> New connection thread
> Incoming connection from /127.0.0.1
> >> Request URI: /sa/8_01_0_000000/HpbHeaderPopup.js
> << Response: HTTP/1.1 204 OK
> Outgoing connection to /204.79.197.200
> New connection thread
> >> Request URI: /sa/8_01_0_000000/homepageImgViewer_c.js
> << Response: HTTP/1.1 200 OK
> << Response: HTTP/1.1 200 OK
> << Response: HTTP/1.1 200 OK
> >> Request URI:
> >> /HPImageArchive.aspx?format=js&idx=0&n=1&nc=1498898493932&pid=hp
> org.apache.http.NoHttpResponseException: The target server failed to
> respondIncoming connection from /127.0.0.1
> at
> org.apache.http.impl.io.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:131)
> at
> org.apache.http.impl.io.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:53)
> at
> org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:259)
> at
> org.apache.http.impl.DefaultBHttpClientConnection.receiveResponseHeader(DefaultBHttpClientConnection.java:163)
> at
> org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:273)
> at
> org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:125)
> at
> ElementalReverseProxy$ProxyHandler.handle(ElementalReverseProxy.java:134)
> at
> org.apache.http.protocol.HttpService.doService(HttpService.java:437)
> at
> org.apache.http.protocol.HttpService.handleRequest(HttpService.java:342)
> at
> ElementalReverseProxy$ProxyThread.run(ElementalReverseProxy.java:262)
> {code}
> I don't know whether the problem lies within {{ElementalReverseProxy}}, or
> the way HC handles the requests/responses.
> I also wrote a simple PHP/HTML/JavaScript to reproduce the error without
> relying on Bing, which I can provide if needed.
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]