Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Compression or inheritence for headers #116

Open
toomim opened this issue Aug 20, 2023 · 0 comments
Open

Compression or inheritence for headers #116

toomim opened this issue Aug 20, 2023 · 0 comments

Comments

@toomim
Copy link
Member

toomim commented Aug 20, 2023

There is a lot of redundancy in headers for Braid subscriptions:

  • Each update can repeat the resource's metadata, like Content-Type and Merge-Type
  • Each patch can repeat thePatch-Type

Example:

HTTP/1.1 209 Subscription
transfer-encoding: chunked
content-type: text/plain
merge-type: sharejs-ot
current-version: "ABC"
version: "B"
patches: 1

patch-type: ot-text-unicode    <-- redundant
patch-length: 7

[1,"b"]

content-type: text/plain       <-- redundant
merge-type: sharejs-ot         <-- redundant
patches: 1                     <-- redundant
version: "C"

patch-type: ot-text-unicode    <-- redundant
patch-length: 7

[2,"c"]

content-type: text/plain       <-- redundant
merge-type: sharejs-ot         <-- redundant
patches: 1                     <-- redundant
version: "D"

patch-type: ot-text-unicode    <-- redundant
patch-length: 7

[3,"d"]

This has been cropping up in other issues, notably: #106

I currently see three ways to address this.

(1.) Updates could inherit the headers from previous updates by default, and then override any that should be different.

(2.) Patches could inherit the headers from the higher-level updates. Specifically, this is the proposal in #106, which would let you specify the Patch-Type as a top-level header in a subscription, that all patches would inherit from by default.

(3.) Use HTTP/2 header compression (called HPACK) to reduce redundancy in general.

In summary, this boils down to:

  1. Use HPACK in HTTP/2, or:
  2. Define an inheritance process
    1. Across time, inheriting from the past
    2. Across hierarchy, inheriting from higher levels in the hierarchy

(Note that I'm presuming we're moving from a 3-level hierarchy to a 2-level hierarchy, as articulated here.)

@toomim toomim changed the title Add compression or inheritence for headers Compression or inheritence for headers Aug 21, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant