Oleg,

Yes, I believe you are correct.

I was finally able to get this to work with larger tar files (still not with mpg's for some reason). However, our implementation doesn't seem to handle the handshaking very well and takes a long time to respond. Without the handshaking on I can actually put the file about 10 times faster (even with the content getting sent twice).

Since I am only writing a test client, sending the request without handshaking will be adequate for my purposes.

Thanks for your help with this,
Jen

On Jul 15, 2004, at 3:34 PM, Oleg Kalnichevski wrote:

Jennifer

Please correct me if I am wrong but it looks like you are not hitting
Tomcat directly. Can it be that you are using an HTTP server to do the
Digest authentication and than redirect requests to Tomcat via a plugin?
What on earth is 'AppleDotMacServer'? It looks like the
AppleDotMacServer (whatever that is) or the plugin does not really
support 'expect-continue' handshake


Oleg

On Fri, 2004-07-16 at 00:01, Jennifer Ward wrote:
Oleg,

I cannot get the wire trace to work. I set the following properties in
my java app, but I only get the INFO messages.

System.setProperty("org.apache.commons.logging.Log",
"org.apache.commons.logging.impl.SimpleLog");
System.setProperty("org.apache.commons.logging.simplelog.showdatetime" ,
"true");
System.setProperty("org.apache.commons.logging.simplelog.log.httpclien t.
wire", "debug");
System.setProperty("org.apache.commons.logging.simplelog.log.org.apach e.
commons.httpclient", "debug");


However, maybe this will help. I can put a small text file with no
problems (although a 1 char file doesn't work). The problem I have is
with putting a 1MB mpg file. I get the following messages then it
appears to hang:

Jul 15, 2004 2:48:44 PM
org.apache.commons.httpclient.auth.AuthChallengeProcessor
selectAuthScheme
INFO: digest authentication scheme selected
Jul 15, 2004 2:48:47 PM org.apache.commons.httpclient.HttpMethodBase
writeRequest
INFO: 100 (continue) read timeout. Resume sending the request

Here's the wire trace (captured via tcpflow):

017.207.015.182.51117-017.207.015.236.02150: PUT
/jentest1/Pictures/martin_crashTest3.mpg HTTP/1.1
User-Agent: Jakarta Commons-HttpClient/3.0-alpha1
Host: 17.207.15.236:2150
Expect: 100-continue
Content-Length: 941220


017.207.015.236.02150-017.207.015.182.51117: HTTP/1.1 401 Unauthorized Server: AppleDotMacServer X-Responding-Server: qa2-webdav03-qfe0 Pragma: No-cache Cache-Control: no-cache Expires: Thu, 01 Jan 1970 00:00:00 GMT WWW-Authenticate: Basic realm="idisk.mac.com" WWW-Authenticate: Digest realm="idisk.mac.com", qop="auth", nonce="12c55e49b83f4c39e0918155b5a2dd28", opaque="eb7ff29a0f14ddfa49f3f7880010b08a" Content-Type: text/plain Content-Length: 23 Date: Thu, 15 Jul 2004 21:47:39 GMT Server: Apache Coyote/1.0


017.207.015.236.02150-017.207.015.182.51117: AUTHORIZATION_REQUIRED

017.207.015.182.51117-017.207.015.236.02150: PUT
/jentest1/Pictures/martin_crashTest3.mpg HTTP/1.1
User-Agent: Jakarta Commons-HttpClient/3.0-alpha1
Expect: 100-continue
Content-Length: 941220
Authorization: Digest username="jentest1", realm="idisk.mac.com",
nonce="12c55e49b83f4c39e0918155b5a2dd28",
uri="/jentest1/Pictures/martin_crashTest3.mpg",
response="a31a69f2e53b4b0afecf44904e952cca", qop="auth", nc=00000001,
cnonce="214d593beae47a6bc701094207c8ab31",
opaque="eb7ff29a0f14ddfa49f3f7880010b08a"
Host: 17.207.15.236:2150


017.207.015.182.51117-017.207.015.236.02150:
....!................................................................. ..
...................................................................... ..
....................
[content omitted]


By the way, I am running this on a Mac OS X system.

Thanks
Jen

On Jul 15, 2004, at 12:16 PM, Oleg Kalnichevski wrote:

Jennifer,

I ran a small test app that posted a 3 byte request to the local Tomcat
4.1.29 with 'expect: continue' handshake on. Everything seems fine as
far as I can tell


====================================================================
DEBUG] HttpClient - -Java version: 1.4.2
[DEBUG] HttpClient - -Java vendor: Sun Microsystems Inc.
...
[DEBUG] HttpClient - -Operating system name: Linux
[DEBUG] HttpClient - -Operating system architecture: i386
[DEBUG] HttpClient - -Operating system version: 2.6.6-1.435smp
...
[DEBUG] DefaultHttpParams - -Set parameter
http.protocol.expect-continue
= true
[DEBUG] header - ->> "POST /httpclienttest/body HTTP/1.1[\r][\n]"
[DEBUG] HttpMethodBase - -Adding Host request header
[DEBUG] header - ->> "User-Agent: Jakarta
Commons-HttpClient/3.0-alpha1[\r][\n]"
[DEBUG] header - ->> "Host: localhost:8080[\r][\n]"
[DEBUG] header - ->> "Expect: 100-continue[\r][\n]"
[DEBUG] header - ->> "Content-Length: 3[\r][\n]"
[DEBUG] header - ->> "[\r][\n]"
[DEBUG] header - -<< "HTTP/1.1 100 Continue[\r][\n]"
[DEBUG] HttpMethodBase - -OK to continue received
[DEBUG] EntityEnclosingMethod - -Request body sent
[DEBUG] header - -<< "HTTP/1.1 200 OK[\r][\n]"
[DEBUG] header - -<< "Content-Type: text/html[\r][\n]"
[DEBUG] header - -<< "Date: Thu, 15 Jul 2004 19:08:04 GMT[\r][\n]"
[DEBUG] header - -<< "Server: Apache Tomcat/4.1.29 (HTTP/1.1
Connector)[\r][\n]"
[DEBUG] header - -<< "Transfer-Encoding: chunked[\r][\n]"
HTTP/1.1 200 OK
[DEBUG] HttpMethodBase - -Resorting to protocol version default close
connection policy
[DEBUG] HttpMethodBase - -Should NOT close connection, using HTTP/1.1
[DEBUG] HttpConnection - -Releasing connection back to connection
manager.
====================================================================

Here's the test app source

====================================================================
HttpClient agent = new HttpClient();
PostMethod httppost =
  new PostMethod("http://localhost:8080/httpclienttest/body";);
httppost.getParams().
  setParameter(HttpMethodParams.USE_EXPECT_CONTINUE, new
Boolean(true));
httppost.setRequestEntity(new StringRequestEntity("1\r\n"));
try {
  agent.executeMethod(httppost);
} finally {
  httppost.releaseConnection();
}
System.out.println(httppost.getStatusLine());
====================================================================

I am afraid I'll need more details about your local execution
environment in order to be any further help. A wirelog would be a good
start


Cheers,

Oleg



On Thu, 2004-07-15 at 20:54, Jennifer Ward wrote:
On Jul 15, 2004, at 11:02 AM, Oleg Kalnichevski wrote:

Jennifer,

What is the version of Tomcat you are using? Even though, as Eric
pointed out, Tomcat does not fully support the expect/continue
handshake, last time I checked it at least did not produce any nasty
side effects. Please let me know the exact version of Tomcat I'll
re-test HttpClient against that particular version.

Were using 4.1.27, but moving soon to 4.1.30.


The complete wire/debug log produced with the latest HttpClient CVS snapshot might also be of help

I've already rebuilt my client using HttpClient 2.0. I'll rebuild it using the latest snapshot, rerun and grab the log.

Thanks
Jen


Oleg

On Thu, 2004-07-15 at 18:57, Jennifer Ward wrote:
On Jul 15, 2004, at 1:09 AM, Kalnichevski, Oleg wrote:

(1) Are you using SSL?

No

(2) What's the JRE version you are using?

Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_03-117.1)

(3) What web server you are targeting?

We are using Apache Tomcat with Slide for WebDAV support.


(4) Are you going through a proxy?

I'm hitting the server directly at the moment. I will be going through a proxy eventually.

Jen



Oleg

-----Original Message-----
From: Jennifer Ward [mailto:[EMAIL PROTECTED]
Sent: Thursday, July 15, 2004 1:49
To: Commons HttpClient Project
Subject: Having some problems with "expect 100 continue"


All,

I'm now calling setUseExpectHeader(true) for my putMethod. However,
I'm
running into a few problems.


First, when putting a 1 character text file (Content-Length: 3) it
doesn't authorize and eventually I get the 'Maximum redirects (100)
exceeded' exception.


If I take a slightly larger text file (Content-Length: 7), then all
is
fine. However, I do get the INFO message:


Jul 14, 2004 4:40:33 PM
org.apache.commons.httpclient.HttpMethodBase
processRequest
INFO: Recoverable exception caught when processing request

If I try to put a 1MB mpg file, the request appears to hang with:

Jul 14, 2004 4:41:44 PM
org.apache.commons.httpclient.HttpMethodBase
writeRequest
INFO: 100 (continue) read timeout. Resume sending the request

Any suggestions? I did try this with the latest build of HttpClient
also and had similar results.


Thanks,
Jen



On Jul 14, 2004, at 11:43 AM, Oleg Kalnichevski wrote:

On Wed, 2004-07-14 at 18:10, Jennifer Ward wrote:
On Jul 13, 2004, at 8:03 PM, Michael Becke wrote:


Another way to handle this problem is to use the "expect 100 continue" feature of HTTP. This feature is disabled in HttpClient by default, as only a few servers support it correctly. You can re-enable it by calling setUseExpectHeader(true) on the post method.

Yes, Oleg mentioned this a few days ago. It sounds like this feature still causes the request to get sent twice (even though the request body will not get sent if the server cannot receive it). I was hoping for a way to send each request only once (with the correct auth header the first time).

Jennifer,

This can be done if you are prepared to handle the entire
authentication
process manually (actually with HttpClient 3.0 it can be done
quite
easily). The question is if it is really worth the trouble. It is
important to understand Digest authentication scheme is more
secure
primarily because it involves frequent challenge-response
exchanges.
The
server generates a nonce which is used by the HTTP clients to
produce
the password digest. If the server is configured to change the
nonce
too
often, that would basically defeat any sort of preemptive
authentication
mechanism, in the worst case rendering it even less efficient than
'expect-continue' handshake. If the server is configured to keep
the
nonce for too long, that would inevitably make Digest
authentication
less secure. It is not impossible to strike a balance between
efficiency
and security. The question is whether the performance gains really
justify additional complexity


Oleg


I'm not having much luck with that though, so I may
end up using the "expect 100 continue" feature after all.

Thanks
Jen


--------------------------------------------------------------- --
--
--
To unsubscribe, e-mail:
[EMAIL PROTECTED]
For additional commands, e-mail:
[EMAIL PROTECTED]




---------------------------------------------------------------- --
--
-
To unsubscribe, e-mail:
[EMAIL PROTECTED]
For additional commands, e-mail:
[EMAIL PROTECTED]




----------------------------------------------------------------- --
--
To unsubscribe, e-mail:
[EMAIL PROTECTED]
For additional commands, e-mail:
[EMAIL PROTECTED]



***************************************************************** **
**
**
****************************
The information in this email is confidential and may be legally
privileged. Access to this email by anyone other than the intended
addressee is unauthorized. If you are not the intended recipient
of
this message, any review, disclosure, copying, distribution,
retention, or any action taken or omitted to be taken in reliance
on
it is prohibited and may be unlawful. If you are not the intended
recipient, please reply to or forward a copy of this message to the
sender and delete the message, any attachments, and any copies
thereof
from your system.
***************************************************************** **
**
**
****************************


----------------------------------------------------------------- --
--
To unsubscribe, e-mail:
[EMAIL PROTECTED]
For additional commands, e-mail:
[EMAIL PROTECTED]




------------------------------------------------------------------ --
-
To unsubscribe, e-mail:
[EMAIL PROTECTED]
For additional commands, e-mail:
[EMAIL PROTECTED]




------------------------------------------------------------------- --
To unsubscribe, e-mail:
[EMAIL PROTECTED]
For additional commands, e-mail:
[EMAIL PROTECTED]




-------------------------------------------------------------------- -
To unsubscribe, e-mail:
[EMAIL PROTECTED]
For additional commands, e-mail:
[EMAIL PROTECTED]




---------------------------------------------------------------------
To unsubscribe, e-mail:
[EMAIL PROTECTED]
For additional commands, e-mail:
[EMAIL PROTECTED]



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to