Re: HTTP router point-of-view concerns

Willy Tarreau <> Fri, 12 July 2013 12:59 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id 77D8A21E8093 for <>; Fri, 12 Jul 2013 05:59:23 -0700 (PDT)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -10.599
X-Spam-Status: No, score=-10.599 tagged_above=-999 required=5 tests=[BAYES_00=-2.599, RCVD_IN_DNSWL_HI=-8]
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id boKnPKPv6LsW for <>; Fri, 12 Jul 2013 05:59:17 -0700 (PDT)
Received: from ( []) by (Postfix) with ESMTP id 14B0721F9E88 for <>; Fri, 12 Jul 2013 05:59:17 -0700 (PDT)
Received: from lists by with local (Exim 4.72) (envelope-from <>) id 1Uxcvi-0000p8-5L for; Fri, 12 Jul 2013 12:58:34 +0000
Resent-Date: Fri, 12 Jul 2013 12:58:34 +0000
Resent-Message-Id: <>
Received: from ([]) by with esmtp (Exim 4.72) (envelope-from <>) id 1Uxcva-0000mI-77 for; Fri, 12 Jul 2013 12:58:26 +0000
Received: from ([]) by with esmtp (Exim 4.72) (envelope-from <>) id 1UxcvW-0000Z5-UH for; Fri, 12 Jul 2013 12:58:26 +0000
Received: (from willy@localhost) by mail.home.local (8.14.4/8.14.4/Submit) id r6CCuSrT030294; Fri, 12 Jul 2013 14:56:28 +0200
Date: Fri, 12 Jul 2013 14:56:28 +0200
From: Willy Tarreau <>
To: Poul-Henning Kamp <>
Cc: Mark Nottingham <>, Sam Pullara <>, James M Snell <>, Martin Thomson <>, Amos Jeffries <>, HTTP Working Group <>
Message-ID: <>
References: <> <> <> <> <> <> <> <> <> <>
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: inline
In-Reply-To: <>
User-Agent: Mutt/
Received-SPF: pass client-ip=;;
X-W3C-Hub-Spam-Status: No, score=-3.2
X-W3C-Hub-Spam-Report: AWL=-2.908, RP_MATCHES_RCVD=-0.303, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001
X-W3C-Scan-Sig: 1UxcvW-0000Z5-UH b466287312d76ae9457464bff084b4d7
Subject: Re: HTTP router point-of-view concerns
Archived-At: <>
X-Mailing-List: <> archive/latest/18724
Precedence: list
List-Id: <>
List-Help: <>
List-Post: <>
List-Unsubscribe: <>

Hi Poul-Henning,

On Fri, Jul 12, 2013 at 11:44:55AM +0000, Poul-Henning Kamp wrote:
> In message <>, Mark Nottingham wri
> tes:
> >This has been brought up a number of times. I think what we need is a =
> >concrete proposal *with* a detailed plan for a workable transition to =
> >the new mechanism -- which seems to be the (or at least one) sticking =
> >point whenever this comes up.
> I have given a concrete example multiple times, it's very simple:
> 	The client always sends along a session-identifier of N (128?)
> 	bits.
> 	If the first bit is zero, this is an anonymous, transient
> 	session, not (to be) associated with any other session.
> 	If the first bit is one, this is a persistent session
> 	identifier, which the server can use to look up any relevant
> 	state or information from previous instances of this
> 	session, in its local database.
> 	This replaces the Cookie: and Set-Cookie: headers, which
> 	SHALL NOT be sent in the HTTP/2.0 protocol.
> Advantages:
> 	We get a fixed size session-identifier for HTTP routers to
> 	use for flow-routing.
> 	We get an actual (client controlled) session-concept, rather
> 	than all sorts of ad-hoc simulations with cookies.
> 	Data with privacy-concerns are stored on the server not on
> 	random clients the user happens to borrow or use.
> 	The overhead of encrypting and signing the data in cookies
> 	is avoided, since they are stored on the server side where
> 	nobody can fudge them.
> Backwards compatibility:
> 	It should be obvious that simulating the Cookie concept for
> 	framework compatibility on the server side is a trivial
> 	matter of programming:  Rather than send set-cookies, write
> 	them to a database, indexed by the session-id.  Rather than
> 	receive Cookie: headers, look them up in the database.
> There, solved.

Not really in fact. While I tend to generally agree with the points
you make for scalability, this one does not scale. One of the big
benefits of cookies is that client is responsible for synchronizing
information between multiple servers *if needed*. When you're building
an architecture using anycast DNS + ECMP + L4 load balancers to reach
your servers, you can't predict if a client will come back to the same
place to retrieve its context, and having the ability to make it hold
*some* data is really useful.

If you store everything on server-side, you're forced to synchronize
everything between all servers of all datacenters because you don't
even know where your client will go with next hit, let alone parallel
requests. And this is clearly not possible on many of the platforms
where both of our products are deployed to achieve connection rates
in the 6 digits.

So there *is* some use to store data on the client, it's just that it
has been long abused to store session identifiers because it was the
only mechanism available.

While I'd like to see a simple session management system (like the one
you propose maybe, even if it does not cover the case of low entropy
client devices), I don't want to see the cookies disappear. I just want
to be able to rely on session ID without having to parse cookies when
that's not needed.