Re: Review of draft-toomim-httpbis-versions-00
Michael Toomim <toomim@gmail.com> Mon, 22 July 2024 23:50 UTC
Received: by ietfa.amsl.com (Postfix) id 0D9E7C1CAE89; Mon, 22 Jul 2024 16:50:41 -0700 (PDT)
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 0CD10C1840D4 for <ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com>; Mon, 22 Jul 2024 16:50:41 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.857
X-Spam-Level:
X-Spam-Status: No, score=-2.857 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, HEADER_FROM_DIFFERENT_DOMAINS=0.25, HTML_MESSAGE=0.001, MAILING_LIST_MULTI=-1, RCVD_IN_ZEN_BLOCKED_OPENDNS=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01, URIBL_DBL_BLOCKED_OPENDNS=0.001, URIBL_ZEN_BLOCKED_OPENDNS=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=w3.org header.b="gLhVWR/S"; dkim=pass (2048-bit key) header.d=w3.org header.b="lX+bjP+n"; dkim=pass (2048-bit key) header.d=gmail.com header.b="AjuNMD3V"
Received: from mail.ietf.org ([50.223.129.194]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id BB-6_YUA0y89 for <ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com>; Mon, 22 Jul 2024 16:50:37 -0700 (PDT)
Received: from mab.w3.org (mab.w3.org [IPv6:2600:1f18:7d7a:2700:d091:4b25:8566:8113]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id C64A9C16943F for <httpbisa-archive-bis2Juki@ietf.org>; Mon, 22 Jul 2024 16:50:36 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=w3.org; s=s1; h=Subject:In-Reply-To:References:To:From:MIME-Version:Date:Message-ID: Content-Type:Cc:Reply-To; bh=m1His+8SqBxUpYbhkn9SueMu3190XMl09IxIsTpZxqo=; b= gLhVWR/Sm6cwQ6bLAw80cUbI2/tcoeITjN0SXXOK8La5Uy99aD9KSFK+54Y04LECWRCVuB/gY1Vax 1cVmV6bGZ/bHTzqEbtHZvR06AUjHJKIJf85InKKkcjg59ccCaAWWJCuHHCY5LDUsGeQ7io2H1PEdT H+/O1zflQtkPWhktVhf4EjIvRpLmB+01CmzXlARMZ4kEitpHEoE2e3e5Nm2Rc5XZ55OxdbBQzYIil bXxpGETE2L061C8qgqyXqrzbY3TuKIx6DFVxHdNypz2ox0VsXQSoz8pwyyTRGi/rYZXhQZ/f/Hrky A4sB+gu8dbxhfjqbqGb2jMNxUfYOK8Rjew==;
Received: from lists by mab.w3.org with local (Exim 4.96) (envelope-from <ietf-http-wg-request@listhub.w3.org>) id 1sW2mp-00093o-0Q for ietf-http-wg-dist@listhub.w3.org; Mon, 22 Jul 2024 23:49:47 +0000
Resent-Date: Mon, 22 Jul 2024 23:49:47 +0000
Resent-Message-Id: <E1sW2mp-00093o-0Q@mab.w3.org>
Received: from ip-10-0-0-224.ec2.internal ([10.0.0.224] helo=puck.w3.org) by mab.w3.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from <toomim@gmail.com>) id 1sW2mn-00092r-0j for ietf-http-wg@listhub.w3.internal; Mon, 22 Jul 2024 23:49:45 +0000
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=w3.org; s=s1; h=In-Reply-To:References:To:From:Subject:MIME-Version:Date:Message-ID: Content-Type:Cc:Reply-To; bh=m1His+8SqBxUpYbhkn9SueMu3190XMl09IxIsTpZxqo=; t=1721692185; x=1722556185; b=lX+bjP+n5oYmjH+D7T0s6mDhseEA6uPmmk9TgCC8eVODEWb hrH7/PHVw7m6MrdAgUKBSL6laEbYYGfoaTUXpYocauTkn4lf0VaBIC/N38cBYrz5zWf5YOolRMWBO 8qHMyyJme2z83jZRZtGttS+BycEfEPL5RkxK56oRUmVUwT6i78t6Gd8nKfXx/0pCqchizSuxCBedY /Up2eBzkQIFJmRw4QcJ++sLjoPUXmMY95dj06M0pRs6DL76h2rB/2UMIx1c42QaLPQjSxJWEkM5C2 f8XUWTdpBjCuIUHeNgLTq0ulWSqwuH3ugS8XsRnyMzQ9v9pkrKSEBItpy11RrP3Q==;
Received-SPF: pass (puck.w3.org: domain of gmail.com designates 2607:f8b0:4864:20::430 as permitted sender) client-ip=2607:f8b0:4864:20::430; envelope-from=toomim@gmail.com; helo=mail-pf1-x430.google.com;
Received: from mail-pf1-x430.google.com ([2607:f8b0:4864:20::430]) by puck.w3.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from <toomim@gmail.com>) id 1sW2mm-003UGD-0M for ietf-http-wg@w3.org; Mon, 22 Jul 2024 23:49:45 +0000
Received: by mail-pf1-x430.google.com with SMTP id d2e1a72fcca58-70d1d818c42so1029976b3a.1 for <ietf-http-wg@w3.org>; Mon, 22 Jul 2024 16:49:44 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1721692180; x=1722296980; darn=w3.org; h=in-reply-to:content-language:references:to:from:subject:user-agent :mime-version:date:message-id:from:to:cc:subject:date:message-id :reply-to; bh=m1His+8SqBxUpYbhkn9SueMu3190XMl09IxIsTpZxqo=; b=AjuNMD3VgARLU+wglZCu1eUnEN8aDJFzZsGfrPG/Ryo6d5YlQGe4MbSjwhRWVq/6iY ktm6sFz0e4u9WsKxre4pEACjpIW5qhYkrwuFFh2uxVx+jAi2/KRBqiIotNImdvPza7gW LJhiVijLVGAQzxhAMbOlPQhab0UXJC/HesjVjJHHtvxXrhRJhIoeR+av8CDWCZt6dnC9 Sr7Y740IUbm554niuEOqgv5h6agG6rYvj+yqMU6af6SsDpHWAelG8qTN3V4tW5rFzqjT NBpXIHEPiJooE/wnMKVsZSx0mznEMJQT+4vBOLX2sEEVAhMNv9BTzLzmlyWuIUMtKZr2 JBFg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1721692180; x=1722296980; h=in-reply-to:content-language:references:to:from:subject:user-agent :mime-version:date:message-id:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to; bh=m1His+8SqBxUpYbhkn9SueMu3190XMl09IxIsTpZxqo=; b=KGc09dYj+7ng8Xmo0HAUlAIxafK8sFmBakcPBvodjP4ZHisRaC8hopYWNWvWqATcRv Tac13l3byW0MEZiOfAWQmAL/ItbcSY207QrarUhr8Q9+dk/Q6fZPXH1wP5kphMoIjrkR eZ6yL5eFJ2hWS+mR3EyXkOpz7pdNvf9wHMzjZk0POXhe9ZLemm48QhcdSCv6JXZ61HEM wxXKYhiiKSOs7Uo/nyRSYjQWCNqzN/pP1t7uqK5yWiU7q8RnlJKYLq7fg1hIxzH8sLYr dCFfvEmEteMhqxOZfOg2E2R0qB4wgpXGdcqsIIZeXCe1rFa3AaaCK7NZp75IOuBXslmq YBsQ==
X-Gm-Message-State: AOJu0Yyk8t4SFjVyBtfYxtq7SUNYrvp7+E22fcKf5Wu/ZsdksFuXikI5 w6xkF+tNSn9dXmnIEr1CCj45Vb3Mj6yd7ERhCi0JNKRs6PsiUwUCF8kaCl1vwAs=
X-Google-Smtp-Source: AGHT+IHUwB35sdP79rzk5H4Ag8jGVknj9MJF6tLxrS59DzJvf5gtg6BBLHAwe6D48Y4Dm6y8eAuy3Q==
X-Received: by 2002:a05:6a00:1a94:b0:70b:1c97:bbf3 with SMTP id d2e1a72fcca58-70d3fc89290mr1935261b3a.28.1721692179273; Mon, 22 Jul 2024 16:49:39 -0700 (PDT)
Received: from ?IPV6:2001:67c:370:128:4cd5:4910:6f32:d434? ([2001:67c:370:128:4cd5:4910:6f32:d434]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-70d16654d60sm3676682b3a.193.2024.07.22.16.49.38 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 22 Jul 2024 16:49:38 -0700 (PDT)
Content-Type: multipart/alternative; boundary="------------sDIiaJJ0ohEBwtqrH2yBqvfU"
Message-ID: <ba9bd07d-b648-4afc-8c78-4ec05d2e1797@gmail.com>
Date: Mon, 22 Jul 2024 16:49:37 -0700
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
From: Michael Toomim <toomim@gmail.com>
To: HTTP Working Group <ietf-http-wg@w3.org>, Braid <braid-http@googlegroups.com>, Peter van Hardenberg <pvh@pvh.ca>
References: <172046173132.445281.15041630415895010148@dt-datatracker-5f88556585-j5r2h> <ff54cd4f-c30e-4447-8744-3297e53b74be@gmail.com> <16912382-c530-4508-b457-4397d06acd46@gmail.com> <0a25c83e-6941-464e-9252-8ca98960226a@gmail.com>
Content-Language: en-US
In-Reply-To: <0a25c83e-6941-464e-9252-8ca98960226a@gmail.com>
X-W3C-Hub-DKIM-Status: validation passed: (address=toomim@gmail.com domain=gmail.com), signature is good
X-W3C-Hub-Spam-Status: No, score=-5.1
X-W3C-Hub-Spam-Report: BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, DMARC_PASS=-0.001, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, RCVD_IN_ZEN_BLOCKED_OPENDNS=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_DBL_BLOCKED_OPENDNS=0.001, W3C_AA=-1, W3C_DB=-1, W3C_WL=-1
X-W3C-Scan-Sig: puck.w3.org 1sW2mm-003UGD-0M 4997997822ccf35144fdebfd30a59ea2
X-Original-To: ietf-http-wg@w3.org
Subject: Re: Review of draft-toomim-httpbis-versions-00
Archived-At: <https://www.w3.org/mid/ba9bd07d-b648-4afc-8c78-4ec05d2e1797@gmail.com>
Resent-From: ietf-http-wg@w3.org
X-Mailing-List: <ietf-http-wg@w3.org> archive/latest/52098
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: <https://www.w3.org/email/>
List-Post: <mailto:ietf-http-wg@w3.org>
List-Unsubscribe: <mailto:ietf-http-wg-request@w3.org?subject=unsubscribe>
Peter, I just wrote up an explicit example of how to compress four PUTs into 7 bytes. Check out the new section 5.1 here: https://github.com/braid-org/braid-spec/blob/master/draft-toomim-httpbis-versions-01.txt#L945 These four puts compress down to 0.0146% of their original size, at least in theory. Note that said compression scheme isn't fully specified in this draft — the focus of this draft is just to gather interest in working on a versioning system that makes such compression possible. The actual compression schemes would be future work. On 7/22/24 12:41 PM, Michael Toomim wrote: > > Peter, thank you for your interest! I'm excited that you are bringing > up performance for discussion! There's a lot to say on that, and I > give an overview below: > > *== Compression & Performance ==* > > First, let me correct a big misinterpretation— this work absolutely > prioritizes *high-performance*, *realtime* data synchronization. It > should support thousands of mutations per second. Our implementations > are higher-performance <https://josephg.com/blog/crdts-go-brrr/> than > Automerge, for instance. I regularly work today with a doc composed of > 110,000 edits. It loads instantly, thanks to some great Version-Types > we've designed. > > The Version-Type (in the proposed Version-Type header) is the way you > get performance increases. The key to performance is managing history > growth. You manage that by finding a pattern in history, and then > compressing or ignoring history. You can express those patterns as a > Version-Type spec. (There's a robust theory behind this called Time > Machines.) > > I apologize that this wasn't clear in the draft -00. I thought this > would be an advanced feature that people wouldn't comment on for a bit > — but am pleasantly surprised to hear your interest in it! I will be > adding more clarity to the spec on Version-Types, and already have > begun doing so in github: > > https://github.com/braid-org/braid-spec/blob/master/draft-toomim-httpbis-versions-01.txt#L885 > > I'd also encourage you to check out this sketch of how to bake RLE > into HTTP Header Compression: > > https://braid.org/meeting-69/header-compression > https://braid.org/video/https://invisiblecollege.s3.us-west-1.amazonaws.com/braid-meeting-69.mp4#4166 > > In any case, keep in mind that at this stage, we need to know only > whether there is /interest/ in this area of work — not whether this > particular spec meets your needs. If we adopt this work into the HTTP > WG, we will get a chance to change or rewrite any part of the spec. > This spec is just a starting point to get discussion going. So think > of this as a problem statement rather than a solution statement. > > *== PUTs ==* > > As for PUTs, I suspect you might be thinking about HTTP/1.0 where each > PUT might require a new TCP connection with its own TLS handshake. But > keep in mind that with HTTP/2 and 3, all HTTP semantics are expressed > in binary, and a PUT is usually just a single packet! This is just as > efficient as any hand-rolled protocol you have, and it has the > advantage of being interoperable with all of HTTP. > > *== History Retention == > * > > This versioning model supports Time Machines > <https://braid.org/time-machines>— the beauty of which is that peers > become free to independently choose how much history to store. An > archival peer can store the full history. A light client can store > just the latest version (see the amazing Simpleton > <https://braid.org/simpleton> client, which needs zero history). > > So each peer can choose how much history to store. If a peer doesn't > have enough history to merge an edit, it can simply request that > history from another peer. In this draft, you do so by requesting a > GET with both Version and Parents headers specified. > > *== Signatures & Validation == > * > > This is out of scope for this proposal on versions. However, (a) there > are some Version-Types that double as signatures. When this happens, > it can be specified by authoring a Version-Type spec to articulate the > new constraint. And (b) this is a generally important area of work > that I encourage. > > Cheers! > > Michael > > On 7/22/24 11:44 AM, Michael Toomim wrote: >> >> We've got divergent discussion threads that I'm merging together. >> >> First, Peter Van Hardenberg (of Ink & Switch, Local-First, and >> Automerge) wrote this initial review of the draft. He's cc'd, and we >> can respond in this thread. >> >> ------------------------ >> -- Peter Van Hardenberg: -- >> ------------------------ >> >> Hi Michael, >> >> I had a quick look at the spec and gave some thought to whether we'd >> want to adopt it. I think right now it has quite a lot of per-version >> overhead, and viewing this through a local-first lens, one can >> imagine having to publish a large number of versions each as separate >> PUT calls. You might want to consider supporting ranges for PUT in a >> single message. >> >> Overall, our goals appear to differ from what you're proposing here >> so this feedback may not be particularly important. My sense is that >> the expected granularity of changes for Braid is relatively large and >> that the frequency is relatively long -- on par with a changed HTML >> form submission, perhaps. We spend quite a lot of our time thinking >> about optimizing updates for potentially thousands of edits and >> trying to minimize the number of round trips required to synchronize >> state in both directions. You mention that the design intends to be >> optimizable but I didn't see much in the text that clarified how. >> >> One other observation is that this spec does not appear to prioritize >> retention of history: >> > - If the Parents header is absent, the server SHOULD return a >> > single response, containing the requested version of the resource >> > in its body, with the Version response header set to the same >> > version. >> This design may centralize the system, as clients default to >> receiving "flattened" versions of resources and thus may not be able >> to merge changes from other sources. >> >> Last, have you considered specifying some kind of signature / >> validation feature? If clients are applying patches iteratively, it >> might help for them to be able to validate that they're in the >> expected state either before or after applying a patch. >> >> All the best, >> -p >> >> On 7/15/24 6:26 PM, Michael Toomim wrote: >>> >>> Hi everyone in HTTP! >>> >>> Last fall we solicited feedback on the Braid State Synchronization >>> proposal [draft >>> <https://datatracker.ietf.org/doc/html/draft-toomim-httpbis-braid-http-04>, >>> slides >>> <https://datatracker.ietf.org/meeting/118/materials/slides-118-httpbis-braid-http-add-synchronization-to-http-00>], >>> which I'd summarize as: >>> >>> "We're enthusiastic about the general work, but the proposal is >>> too high-level. Break the spec up into multiple independent >>> specs, and work bottom-up. Focus on concrete 'bits-on-the-wire'." >>> >>> So I'm breaking the spec up, and have drafted up the first chunk for >>> you. I would very much like your review on: >>> >>> *Versioning of HTTP Resources* >>> draft-toomim-httpbis-versions >>> https://datatracker.ietf.org/doc/html/draft-toomim-httpbis-versions-00 >>> >>> Versioning is necessary for state synchronization—and occurs in a >>> range of HTTP systems: >>> >>> * Caching >>> * Archiving >>> * Version Control >>> * Collaborative Editing >>> >>> Today, HTTP has resource versions in the Last-Modified and ETag >>> headers, and sometimes embeds versions in URLs, like with WebDAV. >>> Each of these options serves some needs, but also has specific >>> limitations. An improved general approach is proposed, which >>> provides new features, that could enable cool new applications, such >>> as incrementally-updated RSS feeds, and could simplify existing >>> specifications, such as resumeable uploads, and history compression >>> in OT/CRDT algorithms. >>> >>> I would love to know if people find this work interesting. I think >>> we could improve performance, interoperability, and be one step >>> closer to having Google Docs power within HTTP URLs. >>> >>> Michael >>> >>> -------- Forwarded Message -------- >>> Subject: New Version Notification for >>> draft-toomim-httpbis-versions-00.txt >>> Date: Mon, 08 Jul 2024 11:02:11 -0700 >>> From: internet-drafts@ietf.org >>> To: Michael Toomim <toomim@gmail.com> >>> >>> >>> >>> A new version of Internet-Draft draft-toomim-httpbis-versions-00.txt >>> has been >>> successfully submitted by Michael Toomim and posted to the >>> IETF repository. >>> >>> Name: draft-toomim-httpbis-versions >>> Revision: 00 >>> Title: HTTP Resource Versioning >>> Date: 2024-07-08 >>> Group: Individual Submission >>> Pages: 19 >>> URL: >>> https://www.ietf.org/archive/id/draft-toomim-httpbis-versions-00.txt >>> Status: https://datatracker.ietf.org/doc/draft-toomim-httpbis-versions/ >>> HTMLized: >>> https://datatracker.ietf.org/doc/html/draft-toomim-httpbis-versions >>> >>> >>> Abstract: >>> >>> HTTP resources change over time. Each change to a resource creates a >>> new "version" of its state. HTTP systems often need a way to >>> identify, read, write, navigate, and/or merge these versions, in >>> order to implement cache consistency, create history archives, settle >>> race conditions, request incremental updates to resources, interpret >>> incremental updates to versions, or implement distributed >>> collaborative editing algorithms. >>> >>> This document analyzes existing methods of versioning in HTTP, >>> highlights limitations, and sketches a more general versioning >>> approach that can enable new use-cases for HTTP. >>> >>> >>> >>> The IETF Secretariat >>> >>>
- Fwd: New Version Notification for draft-toomim-ht… Michael Toomim
- Re: New Version Notification for draft-toomim-htt… Rory Hewitt
- Review of draft-toomim-httpbis-versions-00 Michael Toomim
- Re: New Version Notification for draft-toomim-htt… Michael Toomim
- Re: Review of draft-toomim-httpbis-versions-00 Michael Toomim
- Re: Review of draft-toomim-httpbis-versions-00 Michael Toomim
- Re: [braid] Re: New Version Notification for draf… Rory Hewitt
- Review of draft-toomim-httpbis-versions-00 Michael Toomim
- Re: Review of draft-toomim-httpbis-versions-00 Marius Kleidl
- Re: New Version Notification for draft-toomim-htt… Julian Reschke
- Re: New Version Notification for draft-toomim-htt… Michael Toomim
- Re: [braid] Re: New Version Notification for draf… Michael Toomim
- Re: [braid] Re: New Version Notification for draf… Michael Toomim
- Re: Review of draft-toomim-httpbis-versions-00 Michael Toomim
- Re: Review of draft-toomim-httpbis-versions-00 Michael Toomim
- Re: Review of draft-toomim-httpbis-versions-00 Michael Toomim
- Re: Fwd: New Version Notification for draft-toomi… Julian Reschke
- Re: Fwd: New Version Notification for draft-toomi… Josh Cohen
- Re: Fwd: New Version Notification for draft-toomi… Lisa Dusseault
- Re: Fwd: New Version Notification for draft-toomi… Michael Toomim
- Re: Review of draft-toomim-httpbis-versions-00 Michael Toomim
- Re: Fwd: New Version Notification for draft-toomi… Josh Cohen
- Re: Review of draft-toomim-httpbis-versions-00 Ben Schwartz
- Re: Review of draft-toomim-httpbis-versions-00 Michael Toomim