Re: [quicwg/base-drafts] Make using static table and Huffman encoding in QPACK opt-in (#3622)

Christian Huitema <> Sun, 03 May 2020 13:37 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id E3BA63A0B9B for <>; Sun, 3 May 2020 06:37:50 -0700 (PDT)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -1.696
X-Spam-Status: No, score=-1.696 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, HTML_IMAGE_ONLY_28=1.404, HTML_MESSAGE=0.001, MAILING_LIST_MULTI=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: (amavisd-new); dkim=pass (1024-bit key)
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id Dzwv0JY3BuoD for <>; Sun, 3 May 2020 06:37:49 -0700 (PDT)
Received: from ( []) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by (Postfix) with ESMTPS id 0F4933A0B9A for <>; Sun, 3 May 2020 06:37:49 -0700 (PDT)
Received: from ( []) by (Postfix) with ESMTP id 8F4A52615AC for <>; Sun, 3 May 2020 06:37:48 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;; s=pf2014; t=1588513068; bh=NxVcYahYcsc323kyZ/er9laAhBIEMzLtzDsv3aon+lI=; h=Date:From:Reply-To:To:Cc:In-Reply-To:References:Subject:List-ID: List-Archive:List-Post:List-Unsubscribe:From; b=1zLUNGx6GUdqNDrktKkMICqywAoG21qxf1LTGI1nKDtG6zPA0WQ+I/A9e0fE9339F IFDSuIrdZAZSCcNbljkCDxwJzBjKnOArNNMp2AxQhR/NwidADwh9r+ZKMxkxVYPnv1 6qUFrfoegYFTlZ2mIlgZo71NVOfX/7+wg/0zCHr8=
Date: Sun, 03 May 2020 06:37:48 -0700
From: Christian Huitema <>
Reply-To: quicwg/base-drafts <>
To: quicwg/base-drafts <>
Cc: Subscribed <>
Message-ID: <quicwg/base-drafts/issues/3622/>
In-Reply-To: <quicwg/base-drafts/issues/>
References: <quicwg/base-drafts/issues/>
Subject: Re: [quicwg/base-drafts] Make using static table and Huffman encoding in QPACK opt-in (#3622)
Mime-Version: 1.0
Content-Type: multipart/alternative; boundary="--==_mimepart_5eaec92c49c8c_2003fb6baacd96411429d5"; charset="UTF-8"
Content-Transfer-Encoding: 7bit
Precedence: list
X-GitHub-Sender: huitema
X-GitHub-Recipient: quic-issues
X-GitHub-Reason: subscribed
X-Auto-Response-Suppress: All
Archived-At: <>
X-Mailman-Version: 2.1.29
List-Id: Notification list for GitHub issues related to the QUIC WG <>
List-Unsubscribe: <>, <>
List-Archive: <>
List-Post: <>
List-Help: <>
List-Subscribe: <>, <>
X-List-Received-Date: Sun, 03 May 2020 13:37:51 -0000

@vasilvv Picoquic pretty much fits in your target category, an endpoint that wants to implement a minimal version of HTTP/3. The strategy was indeed to set the SETTINGS_QPACK_MAX_TABLE_CAPACITY to zero, and also to never attempt Huffman encoding. It turns out that Huffman decoding is mandatory, but Huffman encoding is not.

To gauge the resulting capacity, you can look at the file "h3zero.c" and "h3zero.h" in the [picoquic distribution]( 
ubuntu@ip-172-31-61-32:~/picoquic/picohttp$ wc h3zero.*
 1407  7726 61150 h3zero.c
  235   897  9024 h3zero.h
 1642  8623 70174 total
The code includes Qpack, Huffman, and the formatting and parsing of H3 messages. It uses static tables used for Qpack and Huffman decoding. The Huffman decoding accounts for 327 lines of tables and code in h3zero.c, 23% of the total.

Back to your point, yes there is some complexity, but no it is not overwhelming. The complexity is mostly in analyzing the specs and then coding them. I suppose I could extract "h3zero" in a separate project so minimal implementations could link with it without bothering with Picoquic proper. 

You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub: