git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 1/2] http: add option to enable 100 Continue responses

From
brian m. carlson <sandals@crustytoothpaste.net>
Date
Oct 10, 2013, 01:35 UTC
Message-ID
<20131010013547.GA62549@vauxhall.crustytoothpaste.net>
In-Reply-To
<20131009213742.GA8362@sigill.intra.peff.net>
On Wed, Oct 09, 2013 at 05:37:42PM -0400, Jeff King wrote:
Show 10 quoted lines
> On Wed, Oct 09, 2013 at 02:19:36PM -0700, Shawn O. Pearce wrote:
> > 206b099 was written because the Google web servers for
> > android.googlesource.com and code.google.com do not support
> > 100-continue semantics. This caused the client to stall a full 1
> > second before each POST exchange. If ancestor negotiation required
> > O(128) have lines to be advertised I think this was 2 or 4 POSTs,
> > resulting in 2-4 second stalls above the other latency of the network
> > and the server.
> 
> Yuck.

Shame on Google. Of all people, they should be able to implement HTTP 1.1 properly.

Show 12 quoted lines
> Part of the problem is that curl is the one handling the negotiation.
> When we get a 401, I think we can ask curl_easy_getinfo to tell us which
> auth methods are available (via CURLINFO_HTTPAUTH_AVAIL). But I don't
> know how we decide that GSS is what's going to be used. I guess if it is
> the only option, and there is no basic-auth offered?
> 
> And then in that case turn on "Expect" (or more accurately, stop
> disabling it).
> 
> I don't have a GSS-enabled server to test on. Brian, can you try the
> patch at the end of this message on your non-working server and see what
> it outputs?

It doesn't trigger. My server only requires authentication for the actual push operation, and it looks like your code doesn't trigger in that case.

Show 7 quoted lines
> > >> +     headers = curl_slist_append(headers, http_use_100_continue ?
> > >> +             "Expect: 100-continue" : "Expect:");
> > >
> > > Is there any point in sending the Expect: header in cases where curl
> > > would not send it, though? It seems like we should assume curl does the
> > > right thing most of the time, and have our option only be to override
> > > curl in the negative direction.

I think curl expects that data in the POSTFIELDS option in order to trigger. I wasn't able to get it to trigger on its own.

Show 10 quoted lines
> > Adding a header of "Expect:" causes curl to disable the header and
> > never use it. Always supplying the header with no value prevents
> > libcurl from using 100-continue on its own, which is what I fixed in
> > 959dfcf.
> 
> Right. What I meant is that we do not want to unconditionally send the
> "Expect: 100-continue" in the other case. IOW, we would just want:
> 
>   if (!http_use_100_continue)
>           headers = curl_slist_append(headers, "Expect:");

I tried that. It doesn't work, since it never sends the Expect: 100-continue. I made libcurl dump all the headers it sends, and it doesn't send them in that case.

-- 
brian m. carlson / brian with sandals: Houston, Texas, US
+1 832 623 2791 | http://www.crustytoothpaste.net/~bmc | My opinion only
OpenPGP: RSA v4 4096b: 88AC E9B2 9196 305B A994 7552 F1BA 225C 0223 B187
Previous: Jeff KingNext: Jeff King
Message 6 of 11 in “HTTP GSS-Negotiate improvements”
  1. 0/2 HTTP GSS-Negotiate improvementsbrian m. carlson, Oct 8, 2013
  2. 1/2 http: add option to enable 100 Continue responsesbrian m. carlson, Oct 8, 2013
  3. Jeff KingOct 9, 2013
  4. Shawn PearceOct 9, 2013
  5. Jeff KingOct 9, 2013
  6. brian m. carlsonOct 10, 2013
  7. Jeff KingOct 10, 2013
  8. Shawn PearceOct 10, 2013
  9. brian m. carlsonOct 11, 2013
  10. Shawn PearceOct 12, 2013
  11. 2/2 Update documentation for http.continue optionbrian m. carlson, Oct 8, 2013

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.