From 9278eb61bbdcf1ae910944ac5f2eb1c423c76935 Mon Sep 17 00:00:00 2001 From: Nidhi Jaju Date: Thu, 18 Dec 2025 08:21:10 +0000 Subject: [PATCH 1/6] Use table to display examples --- draft-ietf-httpbis-no-vary-search.md | 55 +++++----------------------- 1 file changed, 10 insertions(+), 45 deletions(-) diff --git a/draft-ietf-httpbis-no-vary-search.md b/draft-ietf-httpbis-no-vary-search.md index e7bfd84ba8..e56b3489b8 100644 --- a/draft-ietf-httpbis-no-vary-search.md +++ b/draft-ietf-httpbis-no-vary-search.md @@ -371,51 +371,16 @@ Due to how the application/x-www-form-urlencoded parser canonicalizes query stri So, for example, given any non-default value for `No-Vary-Search`, such as `No-Vary-Search: key-order`, we will have the following equivalences: -{: newline="true"} -
-
- https://example.com
- https://example.com/? -
-
A null query is parsed the same as an empty string
- -
- https://example.com/?a=x
- https://example.com/?%61=%78 -
-
Parsing performs percent-decoding
- -
- https://example.com/?a=é
- https://example.com/?a=%C3%A9 -
-
Parsing performs percent-decoding
- -
- https://example.com/?a=%f6
- https://example.com/?a=%ef%bf%bd -
-
Both values are parsed as U+FFFD (�)
- -
- https://example.com/?a=x&&&&
- https://example.com/?a=x -
-
Parsing splits on & and discards empty strings
- -
- https://example.com/?a=
- https://example.com/?a -
-
Both parse as having an empty string value for a
- -
- https://example.com/?a=%20
- https://example.com/?a=+
- https://example.com/?a= & -
-
+ and %20 are both parsed as U+0020 SPACE
-
+| URI A | URI B | Reason for Equivalence | +|-------------------------------+-----------------------------------+-----------------------------------------------------| +| https://example.com | https://example.com/? | A null query is parsed the same as an empty string | +| https://example.com/?a=x | https://example.com/?%61=%78 | Parsing performs percent-decoding | +| https://example.com/?a=é | https://example.com/?a=%C3%A9 | Parsing performs percent-decoding | +| https://example.com/?a=%f6 | https://example.com/?a=%ef%bf%bd | Both values are parsed as U+FFFD (�) | +| https://example.com/?a=x&&&& | https://example.com/?a=x | Parsing splits on `&` and discards empty strings | +| https://example.com/?a= | https://example.com/?a | Both parse as having an empty string value for `a` | +| https://example.com/?a=%20 | https://example.com/?a= & | `%20` is parsed as U+0020 SPACE | +| https://example.com/?a=+ | https://example.com/?a= & | `+` is parsed as U+0020 SPACE | # Caching {#caching} From e84cbeee8cfb13f2b5d9df9ffb707196ede37f56 Mon Sep 17 00:00:00 2001 From: Nidhi Jaju Date: Thu, 18 Dec 2025 08:23:51 +0000 Subject: [PATCH 2/6] remove whitespace --- draft-ietf-httpbis-no-vary-search.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/draft-ietf-httpbis-no-vary-search.md b/draft-ietf-httpbis-no-vary-search.md index e56b3489b8..a7faa2771c 100644 --- a/draft-ietf-httpbis-no-vary-search.md +++ b/draft-ietf-httpbis-no-vary-search.md @@ -380,7 +380,7 @@ So, for example, given any non-default value for `No-Vary-Search`, such as `No-V | https://example.com/?a=x&&&& | https://example.com/?a=x | Parsing splits on `&` and discards empty strings | | https://example.com/?a= | https://example.com/?a | Both parse as having an empty string value for `a` | | https://example.com/?a=%20 | https://example.com/?a= & | `%20` is parsed as U+0020 SPACE | -| https://example.com/?a=+ | https://example.com/?a= & | `+` is parsed as U+0020 SPACE | +| https://example.com/?a=+ | https://example.com/?a= & | `+` is parsed as U+0020 SPACE | # Caching {#caching} From 0dd2c3b47e5a4ffeb21c01b844adc322c11f3825 Mon Sep 17 00:00:00 2001 From: Nidhi Jaju Date: Thu, 18 Dec 2025 08:27:47 +0000 Subject: [PATCH 3/6] code font the URIs --- draft-ietf-httpbis-no-vary-search.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/draft-ietf-httpbis-no-vary-search.md b/draft-ietf-httpbis-no-vary-search.md index a7faa2771c..72cc706705 100644 --- a/draft-ietf-httpbis-no-vary-search.md +++ b/draft-ietf-httpbis-no-vary-search.md @@ -371,16 +371,16 @@ Due to how the application/x-www-form-urlencoded parser canonicalizes query stri So, for example, given any non-default value for `No-Vary-Search`, such as `No-Vary-Search: key-order`, we will have the following equivalences: -| URI A | URI B | Reason for Equivalence | -|-------------------------------+-----------------------------------+-----------------------------------------------------| -| https://example.com | https://example.com/? | A null query is parsed the same as an empty string | -| https://example.com/?a=x | https://example.com/?%61=%78 | Parsing performs percent-decoding | -| https://example.com/?a=é | https://example.com/?a=%C3%A9 | Parsing performs percent-decoding | -| https://example.com/?a=%f6 | https://example.com/?a=%ef%bf%bd | Both values are parsed as U+FFFD (�) | -| https://example.com/?a=x&&&& | https://example.com/?a=x | Parsing splits on `&` and discards empty strings | -| https://example.com/?a= | https://example.com/?a | Both parse as having an empty string value for `a` | -| https://example.com/?a=%20 | https://example.com/?a= & | `%20` is parsed as U+0020 SPACE | -| https://example.com/?a=+ | https://example.com/?a= & | `+` is parsed as U+0020 SPACE | +| URI A | URI B | Reason for Equivalence | +|---------------------------------+-------------------------------------+-----------------------------------------------------| +| `https://example.com` | `https://example.com/?` | A null query is parsed the same as an empty string | +| `https://example.com/?a=x` | `https://example.com/?%61=%78` | Parsing performs percent-decoding | +| `https://example.com/?a=é` | `https://example.com/?a=%C3%A9` | Parsing performs percent-decoding | +| `https://example.com/?a=%f6` | `https://example.com/?a=%ef%bf%bd` | Both values are parsed as U+FFFD (�) | +| `https://example.com/?a=x&&&&` | `https://example.com/?a=x` | Parsing splits on `&` and discards empty strings | +| `https://example.com/?a=` | `https://example.com/?a` | Both parse as having an empty string value for `a` | +| `https://example.com/?a=%20` | `https://example.com/?a= &` | `%20` is parsed as U+0020 SPACE | +| `https://example.com/?a=+` | `https://example.com/?a= &` | `+` is parsed as U+0020 SPACE | # Caching {#caching} From 223658150505f8585a559240ffbf9890afcd7b92 Mon Sep 17 00:00:00 2001 From: Nidhi Jaju Date: Tue, 6 Jan 2026 02:28:22 +0000 Subject: [PATCH 4/6] truncate URL --- draft-ietf-httpbis-no-vary-search.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/draft-ietf-httpbis-no-vary-search.md b/draft-ietf-httpbis-no-vary-search.md index 72cc706705..e92cbae2d6 100644 --- a/draft-ietf-httpbis-no-vary-search.md +++ b/draft-ietf-httpbis-no-vary-search.md @@ -371,16 +371,16 @@ Due to how the application/x-www-form-urlencoded parser canonicalizes query stri So, for example, given any non-default value for `No-Vary-Search`, such as `No-Vary-Search: key-order`, we will have the following equivalences: -| URI A | URI B | Reason for Equivalence | -|---------------------------------+-------------------------------------+-----------------------------------------------------| -| `https://example.com` | `https://example.com/?` | A null query is parsed the same as an empty string | -| `https://example.com/?a=x` | `https://example.com/?%61=%78` | Parsing performs percent-decoding | -| `https://example.com/?a=é` | `https://example.com/?a=%C3%A9` | Parsing performs percent-decoding | -| `https://example.com/?a=%f6` | `https://example.com/?a=%ef%bf%bd` | Both values are parsed as U+FFFD (�) | -| `https://example.com/?a=x&&&&` | `https://example.com/?a=x` | Parsing splits on `&` and discards empty strings | -| `https://example.com/?a=` | `https://example.com/?a` | Both parse as having an empty string value for `a` | -| `https://example.com/?a=%20` | `https://example.com/?a= &` | `%20` is parsed as U+0020 SPACE | -| `https://example.com/?a=+` | `https://example.com/?a= &` | `+` is parsed as U+0020 SPACE | +| URI A | URI B | Reason for Equivalence | +|---------------------------+-------------------------------+-----------------------------------------------------| +| `https://e.com` | `https://e.com/?` | A null query is parsed the same as an empty string | +| `https://e.com/?a=x` | `https://e.com/?%61=%78` | Parsing performs percent-decoding | +| `https://e.com/?a=é` | `https://e.com/?a=%C3%A9` | Parsing performs percent-decoding | +| `https://e.com/?a=%f6` | `https://e.com/?a=%ef%bf%bd` | Both values are parsed as U+FFFD (�) | +| `https://e.com/?a=x&&&&` | `https://e.com/?a=x` | Parsing splits on `&` and discards empty strings | +| `https://e.com/?a=` | `https://e.com/?a` | Both parse as having an empty string value for `a` | +| `https://e.com/?a=%20` | `https://e.com/?a= &` | `%20` is parsed as U+0020 SPACE | +| `https://e.com/?a=+` | `https://e.com/?a= &` | `+` is parsed as U+0020 SPACE | # Caching {#caching} From d4be317c2fc5596dec1ebfce232021a978fa0145 Mon Sep 17 00:00:00 2001 From: Nidhi Jaju Date: Tue, 6 Jan 2026 05:10:22 +0000 Subject: [PATCH 5/6] remove origin --- draft-ietf-httpbis-no-vary-search.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/draft-ietf-httpbis-no-vary-search.md b/draft-ietf-httpbis-no-vary-search.md index e92cbae2d6..5b61408114 100644 --- a/draft-ietf-httpbis-no-vary-search.md +++ b/draft-ietf-httpbis-no-vary-search.md @@ -371,16 +371,16 @@ Due to how the application/x-www-form-urlencoded parser canonicalizes query stri So, for example, given any non-default value for `No-Vary-Search`, such as `No-Vary-Search: key-order`, we will have the following equivalences: -| URI A | URI B | Reason for Equivalence | -|---------------------------+-------------------------------+-----------------------------------------------------| -| `https://e.com` | `https://e.com/?` | A null query is parsed the same as an empty string | -| `https://e.com/?a=x` | `https://e.com/?%61=%78` | Parsing performs percent-decoding | -| `https://e.com/?a=é` | `https://e.com/?a=%C3%A9` | Parsing performs percent-decoding | -| `https://e.com/?a=%f6` | `https://e.com/?a=%ef%bf%bd` | Both values are parsed as U+FFFD (�) | -| `https://e.com/?a=x&&&&` | `https://e.com/?a=x` | Parsing splits on `&` and discards empty strings | -| `https://e.com/?a=` | `https://e.com/?a` | Both parse as having an empty string value for `a` | -| `https://e.com/?a=%20` | `https://e.com/?a= &` | `%20` is parsed as U+0020 SPACE | -| `https://e.com/?a=+` | `https://e.com/?a= &` | `+` is parsed as U+0020 SPACE | +| Query A           | Query B           | Reason for Equivalence | +|-------------+-----------------+-----------------------------------------------------| +| null | `?` | A null query is parsed the same as an empty string | +| `?a=x` | `?%61=%78` | Parsing performs percent-decoding | +| `?a=é` | `?a=%C3%A9` | Parsing performs percent-decoding | +| `?a=%f6` | `?a=%ef%bf%bd` | Both values are parsed as U+FFFD (�) | +| `?a=x&&&&` | `?a=x` | Parsing splits on `&` and discards empty strings | +| `?a=` | `?a` | Both parse as having an empty string value for `a` | +| `?a=%20` | `?a= &` | `%20` is parsed as U+0020 SPACE | +| `?a=+` | `?a= &` | `+` is parsed as U+0020 SPACE | # Caching {#caching} From 3b69dc0ef066fa05b0c2c356fe6bc155c9b7dd21 Mon Sep 17 00:00:00 2001 From: Nidhi Jaju Date: Tue, 6 Jan 2026 05:59:42 +0000 Subject: [PATCH 6/6] adjust spacing --- draft-ietf-httpbis-no-vary-search.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/draft-ietf-httpbis-no-vary-search.md b/draft-ietf-httpbis-no-vary-search.md index 5b61408114..e54707434d 100644 --- a/draft-ietf-httpbis-no-vary-search.md +++ b/draft-ietf-httpbis-no-vary-search.md @@ -371,12 +371,12 @@ Due to how the application/x-www-form-urlencoded parser canonicalizes query stri So, for example, given any non-default value for `No-Vary-Search`, such as `No-Vary-Search: key-order`, we will have the following equivalences: -| Query A           | Query B           | Reason for Equivalence | +| Query A   | Query B           | Explanation | |-------------+-----------------+-----------------------------------------------------| | null | `?` | A null query is parsed the same as an empty string | | `?a=x` | `?%61=%78` | Parsing performs percent-decoding | | `?a=é` | `?a=%C3%A9` | Parsing performs percent-decoding | -| `?a=%f6` | `?a=%ef%bf%bd` | Both values are parsed as U+FFFD (�) | +| `?a=%f6` | `?a=%ef%bf%bd` | Both values are parsed as U+FFFD (�) | | `?a=x&&&&` | `?a=x` | Parsing splits on `&` and discards empty strings | | `?a=` | `?a` | Both parse as having an empty string value for `a` | | `?a=%20` | `?a= &` | `%20` is parsed as U+0020 SPACE |