Any HTTP proxies with explicit, configurable support for request/response buffering and delayed conn

Posted by Carlos Carrasco on Stack Overflow See other posts from Stack Overflow or by Carlos Carrasco
Published on 2008-09-18T21:33:04Z Indexed on 2010/04/15 3:13 UTC
Read the original article Hit count: 319

Filed under:
|
|
|
|

When dealing with mobile clients it is very common to have multisecond delays during the transmission of HTTP requests. If you are serving pages or services out of a prefork Apache the child processes will be tied up for seconds serving a single mobile client, even if your app server logic is done in 5ms. I am looking for a HTTP server, balancer or proxy server that supports the following:

  1. A request arrives to the proxy. The proxy starts buffering in RAM or in disk the request, including headers and POST/PUT bodies. The proxy DOES NOT open a connection to the backend server. This is probably the most important part.

  2. The proxy server stops buffering the request when:

    • A size limit has been reached (say, 4KB), or
    • The request has been received completely, headers and body
  3. Only now, with (part of) the request in memory, a connection is opened to the backend and the request is relayed.

  4. The backend sends back the response. Again the proxy server starts buffering it immediately (up to a more generous size, say 64KB.)

  5. Since the proxy has a big enough buffer the backend response is stored completely in the proxy server in a matter of miliseconds, and the backend process/thread is free to process more requests. The backend connection is immediately closed.

  6. The proxy sends back the response to the mobile client, as fast or as slow as it is capable of, without having a connection to the backend tying up resources.

I am fairly sure you can do 4-6 with Squid, and nginx appears to support 1-3 (and looks like fairly unique in this respect). My question is: is there any proxy server that empathizes these buffering and not-opening-connections-until-ready capabilities? Maybe there is just a bit of Apache config-fu that makes this buffering behaviour trivial? Any of them that it is not a dinosaur like Squid and that supports a lean single-process, asynchronous, event-based execution model?

(Siderant: I would be using nginx but it doesn't support chunked POST bodies, making it useless for serving stuff to mobile clients. Yes cheap 50$ handsets love chunked POSTs... sigh)

© Stack Overflow or respective owner

Related posts about caching

Related posts about mobile