Hi Chris
I remember the reason that disconnectWeb() (or disconnectInternal()
before 6586707) is called is that somewhere in the HTTP spec it's said a
disconnect is needed when a 401 error is received. However, when I try
to search for this in RFC 2616, I cannot find anything.
Do you remember if this is true?
If no, maybe your code change
- if (usingProxy()) {
+ if (usingProxy() && http.isKeepingAlive()) {
can be further changed to
- if (usingProxy()) {
+ if (http.isKeepingAlive()) {
which looks very straightforward: keep alive if isKeepingAlive, and
disconnect otherwise.
I've tried this on our SQE HTTP server and seems it's working fine. The
server does not need a disconnect at all.
As for the test, I don't know why you send "Connection: close" in
errorReply() but not proxyReply(). Is there any special purpose here?
According to my observation on SQE's MS web/proxy server, "Connection:
close" and "Proxy-Connection: close" always come with 407 error, and no
connection-related header for 401, no matter it's direct web access or
thru proxy.
BTW, during my testing, I've created a new system property
http.pauth.preference for proxy authentication scheme selection. Do you
think it has any practical usage?
Thanks
Max
On 06/28/2010 12:16 PM, Weijun Wang wrote:
Hi Chris
We just had a 1.5-day team building and a weekend, and I just noticed
this mail.
The disconnectWeb() method was added in "6586707: NTLM authentication
with proxy fails" to support 2-layer NTLM authentications. There was no
regression test to that fix. I'll need a little time to setup an
environment to check if your new code change has any effect on it.
Thanks
Max
On 06/23/2010 10:08 PM, Chris Hegarty wrote:
Hi Michael, Max,
This is a code review request for CR 6954525: Testcase failure
java/net/Authenticator/B4769350.java.
Essentially, there is a race among requesting threads in the test. The
threads are making HTTP requests requiring authentication. This is fine,
and what the test is trying to achieve, but some of the final replies
from the server/proxy closed the connection after they send the response
without notifying the HTTP client. If these connections go back into the
keep alive cache they may cause problems when/if reused by another
thread. See bug eval section for more details.
The solution is to include the 'Connection: close' header if the
server/proxy is going to close the connection.
Also, sun.net.www.protocol.http.HttpURLConnection.disconnectWeb should
check if the connection is to be kept alive before automatically
resetting.
Webrev:
http://cr.openjdk.java.net/~chegar/6954525/webrev.00/webrev/
Thanks,
-Chris.