Feature #3622
closed
Net::HTTP does not wait to send request body with Expect: 100-continue
Added by drbrain (Eric Hodel) over 14 years ago.
Updated over 13 years ago.
Description
=begin
HTTP/1.1 allows a client to determine if the server will accept a request body using the Expect header with a value of 100-continue. If the server finds the request header the client sent acceptable it will return with a 100 Continue response and the client will then send the request body.
Instead of waiting for a 100 Continue response Net::HTTP immediately sends the request body and ignores any 100 Continue responses.
The current behavior defeats the purpose of the Expect: 100-continue value and the 100 Continue response code.
If I am attempting to upload a large file like a photo and to a server that requires HTTP authentication I will have to wait until the upload is complete before I can retrieve a 401 response for incorrect authentication.
I have attached a proposed patch that adds a continue timeout. Net::HTTP will wait up to the continue timeout before sending the request body.
=end
Files
=begin
Updated patch, fixes bug where Expect header is not provided.
=end
=begin
(1) Are there any grounds in the value of 0.5 seconds of the time-out?
(2) Can you write a test for this change?
After the above-mentioned point can be confirmed, I do not oppose taking this patch.
=end
=begin
I agree with this idea.
When usa's points are completed, you can commit it.
=end
- Status changed from Open to Feedback
=begin
I don't see any reason to use 0.5 for the timeout. I think a timeout of 0 by default is acceptable to maintain compatible behavior.
I don't understand how to write a test for this that would go in test/net/http yet. I will try again.
=end
- Status changed from Feedback to Open
- Assignee set to nahi (Hiroshi Nakamura)
=begin
Here's a modified version of the patch. [expect-continue.diff]
I'll write test case.
Eric: Would you please confirm that this patch works for you? Thanks in advance.
=end
=begin
Patch updated with tests. Tests requires current trunk HEAD.
Eric, please try this patch.
RDoc expected. Anyone?
=end
=begin
With your latest patch if you do not set the continue_timeout after the server is started it does not wait for "100 Continue".
h = Net::HTTP.new host, port
h.continue_timeout = 10 # does nothing
With your latest patch Net::HTTP does not send the HTTP header immediately, it waits for the continue timeout first.
Placing wait_for_continue after sending headers fixes this.
Does Net::HTTP require additional RDoc? I think the current comments for the new methods are ok.
=end
- Status changed from Open to Assigned
=begin
What's going on?
=end
- Due date set to 05/31/2011
- Status changed from Assigned to Closed
I close this since I believe r31860 includes the original intent of the patch from Eric. Please reopen this if it doesn't work.
Also available in: Atom
PDF
Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0