Experiment with sending various HTTP/2 setting values in the inital SETTINGS frame on every connection |
|
Issue descriptionThere 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
,
Sep 4
,
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 |
|
Comment 1 by b...@chromium.org
, Sep 4