Repository: envoyproxy/envoy
File: api/envoy/config/core/v3/protocol.proto (Protocol Buffers)

Code before:
  //
  // See `IANA HTTP/2 Settings
  // <https://www.iana.org/assignments/http2-parameters/http2-parameters.xhtml#settings>`_ for
  // standardized identifiers.
  repeated SettingsParameter custom_settings_parameters = 13;

  // Send HTTP/2 PING frames to verify that the connection is still healthy. If the remote peer
  // does not respond within the configured timeout, the connection will be aborted.
  KeepaliveSettings connection_keepalive = 15;

  // [#not-implemented-hide:] Hiding so that the field can be removed after oghttp2 is rolled out.
  // If set, force use of a particular HTTP/2 codec: oghttp2 if true, nghttp2 if false.
  // If unset, HTTP/2 codec is selected based on envoy.reloadable_features.http2_use_oghttp2.
  google.protobuf.BoolValue use_oghttp2_codec = 16
      [(xds.annotations.v3.field_status).work_in_progress = true];

  // Configure the maximum amount of metadata than can be handled per stream. Defaults to 1 MB.
  google.protobuf.UInt64Value max_metadata_size = 17;

  // Timeout for graceful HTTP/2 GOAWAY shutdown sequence.
  // When graceful shutdown is enabled, Envoy will send an initial GOAWAY frame with
  // last_stream_id set to 2^31-1, wait for this timeout period, then send a final
  // GOAWAY frame with the actual highest received stream ID. This allows in-flight
  // requests to complete gracefully. If set to 0, graceful shutdown is disabled
  // and the standard immediate GOAWAY behavior is used. Defaults to 1000ms (1 second).
  google.protobuf.Duration graceful_goaway_timeout = 18;
}

// [#not-implemented-hide:]
message GrpcProtocolOptions {
  option (udpa.annotations.versioning).previous_message_type =
      "envoy.api.v2.core.GrpcProtocolOptions";

  Http2ProtocolOptions http2_protocol_options = 1;
}

// A message which allows using HTTP/3.
// [#next-free-field: 9]
message Http3ProtocolOptions {
  QuicProtocolOptions quic_protocol_options = 1;

  // Allows invalid HTTP messaging and headers. When this option is disabled (default), then
  // the whole HTTP/3 connection is terminated upon receiving invalid HEADERS frame. However,
  // when this option is enabled, only the offending stream is terminated.
  //
  // If set, this overrides any HCM :ref:`stream_error_on_invalid_http_messaging
  // <envoy_v3_api_field_extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.stream_error_on_invalid_http_message>`.
  google.protobuf.BoolValue override_stream_error_on_invalid_http_message = 2;

  // Allows proxying Websocket and other upgrades over HTTP/3 CONNECT using
  // the header mechanisms from the `HTTP/2 extended connect RFC

Review comment (suggestion):
The connection will be closed directly after the delayed_close_timeout, the that will finally effect the result of the `graceful_goaway_timeout`.

Code after:
  //
  // See `IANA HTTP/2 Settings
  // <https://www.iana.org/assignments/http2-parameters/http2-parameters.xhtml#settings>`_ for
  // standardized identifiers.
  repeated SettingsParameter custom_settings_parameters = 13;

  // Send HTTP/2 PING frames to verify that the connection is still healthy. If the remote peer
  // does not respond within the configured timeout, the connection will be aborted.
  KeepaliveSettings connection_keepalive = 15;

  // [#not-implemented-hide:] Hiding so that the field can be removed after oghttp2 is rolled out.
  // If set, force use of a particular HTTP/2 codec: oghttp2 if true, nghttp2 if false.
  // If unset, HTTP/2 codec is selected based on envoy.reloadable_features.http2_use_oghttp2.
  google.protobuf.BoolValue use_oghttp2_codec = 16
      [(xds.annotations.v3.field_status).work_in_progress = true];

  // Configure the maximum amount of metadata than can be handled per stream. Defaults to 1 MB.
  google.protobuf.UInt64Value max_metadata_size = 17;
}

// [#not-implemented-hide:]
message GrpcProtocolOptions {
  option (udpa.annotations.versioning).previous_message_type =
      "envoy.api.v2.core.GrpcProtocolOptions";

  Http2ProtocolOptions http2_protocol_options = 1;
}

// A message which allows using HTTP/3.
// [#next-free-field: 9]
message Http3ProtocolOptions {
  QuicProtocolOptions quic_protocol_options = 1;

  // Allows invalid HTTP messaging and headers. When this option is disabled (default), then
  // the whole HTTP/3 connection is terminated upon receiving invalid HEADERS frame. However,
  // when this option is enabled, only the offending stream is terminated.
  //
  // If set, this overrides any HCM :ref:`stream_error_on_invalid_http_messaging
  // <envoy_v3_api_field_extensions.filters.network.http_connection_manager.v3.HttpConnectionManager.stream_error_on_invalid_http_message>`.
  google.protobuf.BoolValue override_stream_error_on_invalid_http_message = 2;

  // Allows proxying Websocket and other upgrades over HTTP/3 CONNECT using
  // the header mechanisms from the `HTTP/2 extended connect RFC
  // <https://datatracker.ietf.org/doc/html/rfc8441>`_
  // and settings `proposed for HTTP/3
  // <https://datatracker.ietf.org/doc/draft-ietf-httpbis-h3-websockets/>`_
  // Note that HTTP/3 CONNECT is not yet an RFC.
  bool allow_extended_connect = 5 [(xds.annotations.v3.field_status).work_in_progress = true];

  // [#not-implemented-hide:] Hiding until Envoy has full metadata support.
  // Still under implementation. DO NOT USE.