H2 Implementation Debug State URI

Cory Benfield <cory@lukasa.co.uk> Thu, 28 July 2016 12:43 UTC

Return-Path: <ietf-http-wg-request+bounce-httpbisa-archive-bis2juki=lists.ie@listhub.w3.org>
X-Original-To: ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com
Delivered-To: ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id F041812D19B for <ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com>; Thu, 28 Jul 2016 05:43:56 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -8.208
X-Spam-Level:
X-Spam-Status: No, score=-8.208 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, HEADER_FROM_DIFFERENT_DOMAINS=0.001, RCVD_IN_DNSWL_HI=-5, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RP_MATCHES_RCVD=-1.287, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=lukasa-co-uk.20150623.gappssmtp.com
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id GeUxaYG1lI9w for <ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com>; Thu, 28 Jul 2016 05:43:55 -0700 (PDT)
Received: from frink.w3.org (frink.w3.org [128.30.52.56]) (using TLSv1.2 with cipher DHE-RSA-AES128-SHA (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 3884B12D0EE for <httpbisa-archive-bis2Juki@lists.ietf.org>; Thu, 28 Jul 2016 05:43:54 -0700 (PDT)
Received: from lists by frink.w3.org with local (Exim 4.80) (envelope-from <ietf-http-wg-request@listhub.w3.org>) id 1bSkax-0006dh-VG for ietf-http-wg-dist@listhub.w3.org; Thu, 28 Jul 2016 12:39:23 +0000
Resent-Date: Thu, 28 Jul 2016 12:39:23 +0000
Resent-Message-Id: <E1bSkax-0006dh-VG@frink.w3.org>
Received: from maggie.w3.org ([128.30.52.39]) by frink.w3.org with esmtps (TLS1.2:DHE_RSA_AES_128_CBC_SHA1:128) (Exim 4.80) (envelope-from <cory@lukasa.co.uk>) id 1bSkas-0006co-DK for ietf-http-wg@listhub.w3.org; Thu, 28 Jul 2016 12:39:18 +0000
Received: from mail-wm0-f48.google.com ([74.125.82.48]) by maggie.w3.org with esmtps (TLS1.2:RSA_AES_128_CBC_SHA1:128) (Exim 4.80) (envelope-from <cory@lukasa.co.uk>) id 1bSkap-0001gK-NY for ietf-http-wg@w3.org; Thu, 28 Jul 2016 12:39:17 +0000
Received: by mail-wm0-f48.google.com with SMTP id i5so106042057wmg.0 for <ietf-http-wg@w3.org>; Thu, 28 Jul 2016 05:38:55 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=lukasa-co-uk.20150623.gappssmtp.com; s=20150623; h=from:content-transfer-encoding:mime-version:subject:message-id:date :to; bh=oMyaVUJw0yDku15zeU3j9VgL7pFRNimwninJ2sNMApg=; b=BD/E9ZMM3kFaG9axcWt8zPemD3VKynZnIVECEBDrQuYxFPDEkRkWCQWuI11EJqUbWN aTRRiizGGtRj39VOGSrYSle6KtBxmoYEmiVIUvu4B0Fw8Dq7ub36bsn+zZshgF3toktP QM+GxVRpl6FoJK5i3aD/v5PwsiGBdUDOskiZurJ5xy2hL1qQfNfqpr8ubw8pbqpIRTQS 2rw5OeW0oFvNfUlO6DuA/rc0Ik9YgwzXakmZjjCJEspgSKtF4TugVDy6VW7T9FbW2Did P6xR1XNGSfPo42LPob04m0IH9M0sut12o3VGXDECuS+B/EvaxxQkeSZU7vJ5VxvFV6OR 7s8Q==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:content-transfer-encoding:mime-version :subject:message-id:date:to; bh=oMyaVUJw0yDku15zeU3j9VgL7pFRNimwninJ2sNMApg=; b=FsBMlG/jgNcl99jcdVCO4J9+YD2q/5GFTaSxeH42U4yXj5i+y2ScqRn2ViPNBSXMp4 fd54r4q99rAL2tPugCj1g05fwAkwYVRUrNCVhnP0UfvaRe6jrzgXrdmfO6s1340kfpFm 7EBM9Z+MQj6n1JAl5OYY6g/5VpznlL9+JUFczlpMEthJzmys3BP9S0JN0lWPJbxpHOeT Y63vtqbgcoe/4DQcp65atHnrMYl+bDQPUwHe/wMdo7D9eZE0u3GDdfKghPxqz2WEpQw3 IYU9y7WxUBP+GWe6X0iWBC0lEwHzc9HUvMEBaPKUWIZj7U/Y9sCagPQWadPwq04iaoLw 3A5Q==
X-Gm-Message-State: AEkoouvFCW/YoHeyBMa/WoDsb4S22P9C0fhlIxaMSHYy8wAoFDl6gxDH/UPBofS+FVPobQ==
X-Received: by 10.28.184.19 with SMTP id i19mr31671494wmf.43.1469709528439; Thu, 28 Jul 2016 05:38:48 -0700 (PDT)
Received: from [192.168.1.7] (240.89.6.51.dyn.plus.net. [51.6.89.240]) by smtp.gmail.com with ESMTPSA id i66sm43356707wmg.9.2016.07.28.05.38.47 for <ietf-http-wg@w3.org> (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 28 Jul 2016 05:38:47 -0700 (PDT)
From: Cory Benfield <cory@lukasa.co.uk>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Mime-Version: 1.0 (Mac OS X Mail 10.0 \(3204\))
Message-Id: <63CCB07A-0204-4CF7-B598-9497D7112021@lukasa.co.uk>
Date: Thu, 28 Jul 2016 13:38:45 +0100
To: HTTP Working Group <ietf-http-wg@w3.org>
X-Mailer: Apple Mail (2.3204)
Received-SPF: pass client-ip=74.125.82.48; envelope-from=cory@lukasa.co.uk; helo=mail-wm0-f48.google.com
X-W3C-Hub-Spam-Status: No, score=-5.4
X-W3C-Hub-Spam-Report: AWL=-0.817, BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001, W3C_AA=-1, W3C_WL=-1
X-W3C-Scan-Sig: maggie.w3.org 1bSkap-0001gK-NY 3f96b650f623209cd082dae1fb885a3d
X-Original-To: ietf-http-wg@w3.org
Subject: H2 Implementation Debug State URI
Archived-At: <http://www.w3.org/mid/63CCB07A-0204-4CF7-B598-9497D7112021@lukasa.co.uk>
Resent-From: ietf-http-wg@w3.org
X-Mailing-List: <ietf-http-wg@w3.org> archive/latest/32065
X-Loop: ietf-http-wg@w3.org
Resent-Sender: ietf-http-wg-request@w3.org
Precedence: list
List-Id: <ietf-http-wg.w3.org>
List-Help: <http://www.w3.org/Mail/>
List-Post: <mailto:ietf-http-wg@w3.org>
List-Unsubscribe: <mailto:ietf-http-wg-request@w3.org?subject=unsubscribe>

All,

During the HTTP workshop earlier this week, several HTTP/2 implementers expressed a desire to extract information about the state of the H2 connection from the perspective of their peer. This would be extremely useful when developing, debugging, and testing implementations: given that HTTP/2 is so highly stateful the vast majority of interoperability issues come from implementations disagreeing about what the state of the connection is (usually flow control windows!).

Brad Fitzpatrick and I ended up prototyping a sample approach for getting this information out of server implementations, based on issuing a GET request to a specific well-known URI. This GET would return a JSON document that contains various different pieces of information from inside the implementation, such as window sizes and stream states. In addition, to help debug flow control concerns, the response headers also include information about flow control windows (because if a server believes it is blocked behind flow control it can’t send the JSON document, but it can send the response headers). Examples of this behaviour are available at https://http2.golang.org/.well-known/h2interop/state and https://shootout.lukasa.co.uk/.well-known/h2interop/state.

The consensus amongst the implementers we spoke to were that this was a good idea, and it would be good to collaborate on the information that should be exposed here. For most HTTP/2 implementers one of the most natural ways to collaborate on something like this is to use an Internet Draft. For that reason, I have submitted the outline of a draft that essentially defines what Brad and I have already done. You can find this draft here: https://tools.ietf.org/html/draft-benfield-http2-debug-state-00

I have no expectation that this will become a WG document. However, I’d like to bring it to the attention of the working group to ensure that as many implementers as possible can provide feedback on whether this kind of approach is valuable or not, and what information they’d like made available in this kind of mode.

For anyone who wants to contribute, raise issues, or otherwise help with the draft, it is hosted on GitHub: https://github.com/python-hyper/draft-http2-debug-state. Issues and pull requests are more than welcome, as is feedback on this list.

Thanks,

Cory