Re: Receiving HTTP 505 on Expect: 100-continue

2014-12-06 Thread Christopher Schultz
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA256

Michael,

On 12/4/14 4:27 AM, Osipov, Michael wrote:
 Hi folks,
 
 we are experiencing a popular issue with MS .NET clients sending
 Expect: 100-continue and Tomcat failing with HTTP 505. We use
 Apache Tomcat 6.0.41 with APR connector on a corporate network.
 
 The request look like this in Wireshark:
 
 1. Client sends empty request with one TCP packet

What do you mean empty? Is there a request line? Headers? Is there a
\r\n\r\n indicating the end of the headers? Is the Expect header in
this packet?

 2. Tomcat responds with 401 within 20 to 30 ms 3. Client sends
 another TCP packet with the request body now (401 has been
 ignored)

So the client sends Expect: 100 and then ignores the non-100
response? Sounds like the .NET client is braindead.

 4. While debugging the APR Connector I see that request.getProtocol
 is invoked and the message bytes contain the chomped XML with a
 trailing GET request. This leads to a 505.
 
 I read several resources as well as bug reports in HTTPd, Tomcat
 and JBoss spread over the last couple of years. The RFC 7231 [1]
 says:
 
 Requirements for clients: o  A client that sends a 100-continue
 expectation is not required to wait for any specific length of
 time; such a client MAY proceed to send the message body even if it
 has not yet received a response. Furthermore, since 100 (Continue)
 responses cannot be sent through an HTTP/1.0 intermediary, such a
 client SHOULD NOT wait for an indefinite period before sending the
 message body.
 
 The statement sheds some light on the issue but does not fully
 answer the question. As far as I understand the client has received
 the final status (401) from the server but did not evaluate this.
 In my opinion, the client seems to be broken.
 
 The resources suggested to disable the header which we did and it
 did work indeed, the strange thing is that the client in .NET
 should wait for 350 ms before it fires the body which it doesn't.
 
 Can somebody tell me who is misbehaving against the RFC? Is
 disabling Expect: 100-continue the way to go? I am pretty fine
 with that if Tomcat's behavior is RFC-compliant.

Using Expect:100 is appropriate if you have a large-bodied request
and you only want to use the network resources to push that body if
the server is going to accept it. So, you send the 100-continue
header along with things like the Content-Type and Content-Length and
see if the server says yeah, I'll accept that or no way, buddy. IF
the server says yes, then you can push the actual request, which may
be GiBs in size. If the server says no, you can avoid all that data
transfer and tell the user Sorry, computer says 'no'.

 PS: If someone of the project members is interested in the Wirshark
 pcap file, I'll be happy to send you that to your @apache.org email
 address.

Pastebin the hex/text dump?

- -chris
-BEGIN PGP SIGNATURE-
Version: GnuPG v1
Comment: GPGTools - http://gpgtools.org

iQIcBAEBCAAGBQJUg090AAoJEBzwKT+lPKRYIOcQAJnXpQ8Y6lsbzr44ZsuyIDA8
2AnKRSPgwgsdE3qu5QvKP/A8V+ASJOxkYTlYEr/GlWj3KCUqhXvbDbH4oMuGiaq2
HowUwxr69HciISx5EEnls5UVNDd2bAusw/lvY01JmGGltTSNubiyofCSaSyb55F8
XLs6CXGdTR4nBiau37Y326K7X8dCS8BnWQEROtu1IJsh1Yzz7wTQyRfcJhsPixW1
xKJMMDlJTjmBOT3XStYJbFbwabkQWoBLwf1h9qTBGM+0IC7CzjcyvQbO4sUU6YqH
nQ9mBw2KDW3tKy3T2iGYpsm/do5tJ03JsXsYS14BcTsFM7IKJddua13h9mnNKVzH
tABP/tp2iTIW99V+CzFcFHAQXb6Sf4ovlk0Mea4fdypwVzXG9W0NvAMLRccNWm3L
tv+xhVwTSsyM/inuNKhmaME+Y9Wv0j15d00FBmtbtX1sr9NbZjlx+RGlgWcvm31U
VOp0CeRad3/CNDfZx3xCxIUoEfAffW0Z4NQMns7P8lEF0CUY7S9p6GLrdH0k019i
ACiYmzQ/yUp5CGjtHc3fHZZVCpAZBohs/y9pZqE44TRLz02uogZLuzaqc05VQjjz
X2GWjJRG4NCTeIqIsrmxlUdJhtbufIsrLf9kLNzFo5ioA4/l7DO0gUken5DKGuAV
N+fxh4lt2DlEoqxBmvk0
=o6qk
-END PGP SIGNATURE-

-
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org



Re: Receiving HTTP 505 on Expect: 100-continue

2014-12-06 Thread Mark Thomas
On 06/12/2014 18:48, Christopher Schultz wrote:
 Michael,
 
 On 12/4/14 4:27 AM, Osipov, Michael wrote:
 Hi folks,
 
 we are experiencing a popular issue with MS .NET clients sending
 Expect: 100-continue and Tomcat failing with HTTP 505. We use
 Apache Tomcat 6.0.41 with APR connector on a corporate network.
 
 The request look like this in Wireshark:
 
 1. Client sends empty request with one TCP packet
 
 What do you mean empty? Is there a request line? Headers? Is there a
 \r\n\r\n indicating the end of the headers? Is the Expect header in
 this packet?
 
 2. Tomcat responds with 401 within 20 to 30 ms 3. Client sends
 another TCP packet with the request body now (401 has been
 ignored)
 
 So the client sends Expect: 100 and then ignores the non-100
 response? Sounds like the .NET client is braindead.

To be fair, it could be a timing issue. The client has to guess how long
to wait before sending the body if it doesn't get a response.

Given the timing issues, the only thing the server can safely do for
non-200 responses is send the response, close the connection and
optionally swallow any request body (some clients don't even try to read
the response until the body has been sent).

Mark

-
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org



My problem: I cannot successfully get or set a session attribute from a JSP file.

2014-12-06 Thread Jim Anderson


Hi to all,

I am currently developing some server side JSP code. By and large, 
things are progressing and working well. I have gotten half way decent 
at debugging my java/javascript/jquery/jsp/HTML source code, but I have 
run into a problem in JSP where the code does not work, but I have found 
no clues as to why it is not working.


The environment that I am working in is Tomcat 7.0.54 and I am using 
java 1.8 and jquery 1.7.2.


What I am trying to do:

I have html code with an embedded javascript that runs jquery code. The 
jquery code being run makes an ajax call to a JSP file on the server 
side, which I will call s.jsp. This file is a very simple file whose 
sole function is to take a registration name and query an SQL database 
to see if the name has already been used at the web site. The 
registration name is passed with a method call that looks like this:


regName = request.getParameter(registrationName);[item 1]

This all works fine for me. So far so good. If the registration name is 
good, the state of my application logic changes. I guess there are 
multiple ways to store state, but I have chosen to store the state as a 
session variable.  I searched the net and found an example of JSP code 
that uses the session object to store information as an attribute with a 
statement that looks something like:


session.setAttribute(logicState,nameValidated); [item 2]

I tried adding this line and when I now push the submit button of my 
HTML form, which calls s.jsp as an action, the application hangs (in 
firefox). I receive no error messages anywhere. Usually, when I add bad 
code in s.jsp I will get a stacktrace from firefox or error messages in 
the firefox debug console, or both. Or I will error message in my own 
homegrown debug code, but that does not happen. I know that my home 
grown code does not get called, so I can infer that the call to s.jsp is 
never made, but I cannot be 100% certain of this. I also checked my 
tomcat/logs directory and there was nothing in the log files that I 
would not expect.


So my first question is:  Can I simply add item 2, above, to my jsp file 
and expect that tomcat will recognize that I am referencing the session 
object?  In s.jsp, item 1, above, references the request object and 
tomcat handles that and I am expecting that it will also hand my 
reference to the session object.


My second question is more general. My code is not working and there are 
no error messages. Can anyone speculate why this would be the case?  Is 
there any   place else I should be looking for error messages?


Jim A.

-
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org



Re: Receiving HTTP 505 on Expect: 100-continue

2014-12-06 Thread Konstantin Kolinko
2014-12-06 21:53 GMT+03:00 Mark Thomas ma...@apache.org:
 On 06/12/2014 18:48, Christopher Schultz wrote:
 Michael,

 On 12/4/14 4:27 AM, Osipov, Michael wrote:
 Hi folks,

 we are experiencing a popular issue with MS .NET clients sending
 Expect: 100-continue and Tomcat failing with HTTP 505. We use
 Apache Tomcat 6.0.41 with APR connector on a corporate network.

 The request look like this in Wireshark:

 1. Client sends empty request with one TCP packet

 What do you mean empty? Is there a request line? Headers? Is there a
 \r\n\r\n indicating the end of the headers? Is the Expect header in
 this packet?

 2. Tomcat responds with 401 within 20 to 30 ms 3. Client sends
 another TCP packet with the request body now (401 has been
 ignored)

 So the client sends Expect: 100 and then ignores the non-100
 response? Sounds like the .NET client is braindead.

 To be fair, it could be a timing issue. The client has to guess how long
 to wait before sending the body if it doesn't get a response.

 Given the timing issues, the only thing the server can safely do for
 non-200 responses is send the response, close the connection and
 optionally swallow any request body (some clients don't even try to read
 the response until the body has been sent).

+1.

The fix for Tomcat 7 was a year ago (7.0.48) in
http://svn.apache.org/r1540689

I think that it can be backported to Tomcat 6.

Best regards,
Konstantin Kolinko

-
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org



Re: My problem: I cannot successfully get or set a session attribute from a JSP file.

2014-12-06 Thread Ameer Mawia
On Sun, Dec 7, 2014 at 2:49 AM, Jim Anderson jim_ander...@centurylink.net
wrote:


 Hi to all,

 I am currently developing some server side JSP code. By and large, things
 are progressing and working well. I have gotten half way decent at
 debugging my java/javascript/jquery/jsp/HTML source code, but I have run
 into a problem in JSP where the code does not work, but I have found no
 clues as to why it is not working.

 The environment that I am working in is Tomcat 7.0.54 and I am using java
 1.8 and jquery 1.7.2.

 What I am trying to do:

 I have html code with an embedded javascript that runs jquery code. The
 jquery code being run makes an ajax call to a JSP file on the server side,
 which I will call s.jsp. This file is a very simple file whose sole
 function is to take a registration name and query an SQL database to see if
 the name has already been used at the web site. The registration name is
 passed with a method call that looks like this:

 regName = request.getParameter(registrationName);[item 1]

 This all works fine for me. So far so good. If the registration name is
 good, the state of my application logic changes. I guess there are multiple
 ways to store state, but I have chosen to store the state as a session
 variable.  I searched the net and found an example of JSP code that uses
 the session object to store information as an attribute with a statement
 that looks something like:

 session.setAttribute(logicState,nameValidated); [item 2]

 I tried adding this line and when I now push the submit button of my HTML
 form, which calls s.jsp as an action, the application hangs (in firefox). I
 receive no error messages anywhere. Usually, when I add bad code in s.jsp I
 will get a stacktrace from firefox or error messages in the firefox debug
 console, or both. Or I will error message in my own homegrown debug code,
 but that does not happen. I know that my home grown code does not get
 called, so I can infer that the call to s.jsp is never made, but I cannot
 be 100% certain of this. I also checked my tomcat/logs directory and there
 was nothing in the log files that I would not expect.

 So my first question is:  Can I simply add item 2, above, to my jsp file
 and expect that tomcat will recognize that I am referencing the session
 object?  In s.jsp, item 1, above, references the request object and tomcat
 handles that and I am expecting that it will also hand my reference to the
 session object.

 This should work. Make sure, you don't have the session disable on your
jsp i.e. your jsp don't have this directive:
%@ page *session*=false %


 My second question is more general. My code is not working and there are
 no error messages. Can anyone speculate why this would be the case?  Is
 there any   place else I should be looking for error messages?

 There are many places to start debugging at. But first and foremost is
your application logs. What does your application logs says? Any exception,
corresponding stack-trace??

 Jim A.

 -
 To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
 For additional commands, e-mail: users-h...@tomcat.apache.org




Re: My problem: I cannot successfully get or set a session attribute from a JSP file.

2014-12-06 Thread Konstantin Kolinko
2014-12-07 0:19 GMT+03:00 Jim Anderson jim_ander...@centurylink.net:

 Hi to all,

 I am currently developing some server side JSP code. By and large, things
 are progressing and working well. I have gotten half way decent at debugging
 my java/javascript/jquery/jsp/HTML source code, but I have run into a
 problem in JSP where the code does not work, but I have found no clues as to
 why it is not working.

 The environment that I am working in is Tomcat 7.0.54 and I am using java
 1.8 and jquery 1.7.2.

 What I am trying to do:

 I have html code with an embedded javascript that runs jquery code. The
 jquery code being run makes an ajax call to a JSP file on the server side,
 which I will call s.jsp. This file is a very simple file whose sole function
 is to take a registration name and query an SQL database to see if the name
 has already been used at the web site. The registration name is passed with
 a method call that looks like this:

 regName = request.getParameter(registrationName);[item 1]

 This all works fine for me. So far so good. If the registration name is
 good, the state of my application logic changes. I guess there are multiple
 ways to store state, but I have chosen to store the state as a session
 variable.  I searched the net and found an example of JSP code that uses the
 session object to store information as an attribute with a statement that
 looks something like:

 session.setAttribute(logicState,nameValidated); [item 2]

 I tried adding this line and when I now push the submit button of my HTML
 form, which calls s.jsp as an action, the application hangs (in firefox). I
 receive no error messages anywhere. Usually, when I add bad code in s.jsp I
 will get a stacktrace from firefox or error messages in the firefox debug
 console, or both. Or I will error message in my own homegrown debug code,
 but that does not happen. I know that my home grown code does not get
 called, so I can infer that the call to s.jsp is never made, but I cannot be
 100% certain of this. I also checked my tomcat/logs directory and there was
 nothing in the log files that I would not expect.

 So my first question is:  Can I simply add item 2, above, to my jsp file and
 expect that tomcat will recognize that I am referencing the session object?
 In s.jsp, item 1, above, references the request object and tomcat handles
 that and I am expecting that it will also hand my reference to the session
 object.

 My second question is more general. My code is not working and there are no
 error messages. Can anyone speculate why this would be the case?  Is there
 any   place else I should be looking for error messages?



1. Is this reproducible if you restart Tomcat?

2. Is there anything in your access log? Was your request received by Tomcat?

http://wiki.apache.org/tomcat/FAQ/Troubleshooting_and_Diagnostics

Best regards,
Konstantin Kolinko

-
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org