New issue
Advanced search Search tips

Issue 841264 link

Starred by 3 users

Issue metadata

Status: Started
Owner:
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Linux , Android , Windows , iOS , Chrome , Mac , Fuchsia
Pri: 3
Type: Bug



Sign in to add a comment

Experiment with sending various HTTP/2 setting values in the inital SETTINGS frame on every connection

Project Member Reported by b...@chromium.org, May 9 2018

Issue description

There are many situations requiring that Chrome sends some specific setting identifier in the initial HTTP/2 SETTINGS frame as an experiment on Dev and Canary channels, with a side-by-side control group.  Such experiments are meant for gathering data and are not intended to be rolled out to other channels (either Beta or Stable), nor are they inteded to be enabled by default on trunk.

Recent examples include:

(1) A certain load balancer product with older firmware is known to incorrectly signal an error if it receives a SETTINGS_MAX_HEADER_LIST_SIZE with value exceeding 32768.  See  issue 751642  for details.  However, Chrome should send a larger value on every connection for performance reasons.  Quantifying the effect of this broken load balancer allows us to evaluate the balance between performance and error rate, so that an informed decision can be made about sending a larger value by default.

(2) Sending SETTINGS_ENABLE_PUSH with value 0 would allow measuring the impact of server push on page load timing, allowing for improved push algorithms, and also helping to evaluate the overall effect of push.

(3) In the spirit of GREASE [1], it would be advantageous to send undefined settings identifiers to make sure buggy servers that would signal an error on undefined settings are detected early during their deployment.  RFC7540 specifically requires that unknown or unsupported identifiers must be ignored.[2]  As of right now, no such server is known to exist.  (While not directly relevant to Chrome sending unknown settings, it is worth noting that there exists at least one buggy client implementation that closes the connection upon receiving an unknown setting from the server in violation with the specification, showing that this kind of bug is not inconceivable.)

[1] https://tools.ietf.org/html/draft-ietf-tls-grease-00
[2] https://httpwg.org/specs/rfc7540.html#SettingValues
 
Status: Started (was: Assigned)
Mike Bishop has submitted a draft to IETF that describes exactly this.  See https://lists.w3.org/Archives/Public/ietf-http-wg/2018AprJun/0221.html for the announcement and following discussion, and https://tools.ietf.org/html/draft-bishop-httpbis-grease-00 for the proposal itself.




Cc: b...@chromium.org
 Issue 847833  has been merged into this issue.
Project Member

Comment 3 by bugdroid1@chromium.org, Sep 6

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/6a070bcd060e95d9855668853b52ab43626d9360

commit 6a070bcd060e95d9855668853b52ab43626d9360
Author: Bence Béky <bnc@chromium.org>
Date: Thu Sep 06 15:02:43 2018

Implement GREASE for HTTP/2.

Send one extra setting with a random reserved identifier and random
value in the initial SETTINGS frame.  Send a short frame of a random
reserved type, with random flags and payload, after every SETTINGS and
HEADERS frame sent, on the same stream.

The two behaviors are gated by separate field trials.

Send the same greased settings identifier and value on every connection.
Send the same greased frame type, flags, and payload on every
connection.  This is to prevent the retry logic from hiding bogus
servers.

Reserved settings identifiers and frame types are described at
https://tools.ietf.org/html/draft-bishop-httpbis-grease-00.

Bug: 841264
Change-Id: Ie1bd1e4f106bf64020f45171e350d37a10815bc8
Reviewed-on: https://chromium-review.googlesource.com/1207750
Commit-Queue: Bence Béky <bnc@chromium.org>
Reviewed-by: Ryan Hamilton <rch@chromium.org>
Cr-Commit-Position: refs/heads/master@{#589168}
[modify] https://crrev.com/6a070bcd060e95d9855668853b52ab43626d9360/components/network_session_configurator/browser/network_session_configurator.cc
[modify] https://crrev.com/6a070bcd060e95d9855668853b52ab43626d9360/components/network_session_configurator/browser/network_session_configurator_unittest.cc
[modify] https://crrev.com/6a070bcd060e95d9855668853b52ab43626d9360/net/http/http_network_session.cc
[modify] https://crrev.com/6a070bcd060e95d9855668853b52ab43626d9360/net/http/http_network_session.h
[modify] https://crrev.com/6a070bcd060e95d9855668853b52ab43626d9360/net/spdy/spdy_session.cc
[modify] https://crrev.com/6a070bcd060e95d9855668853b52ab43626d9360/net/spdy/spdy_session.h
[modify] https://crrev.com/6a070bcd060e95d9855668853b52ab43626d9360/net/spdy/spdy_session_pool.cc
[modify] https://crrev.com/6a070bcd060e95d9855668853b52ab43626d9360/net/spdy/spdy_session_pool.h
[modify] https://crrev.com/6a070bcd060e95d9855668853b52ab43626d9360/net/spdy/spdy_session_unittest.cc
[modify] https://crrev.com/6a070bcd060e95d9855668853b52ab43626d9360/net/spdy/spdy_stream.cc
[modify] https://crrev.com/6a070bcd060e95d9855668853b52ab43626d9360/net/spdy/spdy_test_util_common.cc
[modify] https://crrev.com/6a070bcd060e95d9855668853b52ab43626d9360/net/spdy/spdy_test_util_common.h

Sign in to add a comment