pub struct Http2ProtocolOptions {Show 16 fields
pub hpack_table_size: Option<UInt32Value>,
pub max_concurrent_streams: Option<UInt32Value>,
pub initial_stream_window_size: Option<UInt32Value>,
pub initial_connection_window_size: Option<UInt32Value>,
pub allow_connect: bool,
pub allow_metadata: bool,
pub max_outbound_frames: Option<UInt32Value>,
pub max_outbound_control_frames: Option<UInt32Value>,
pub max_consecutive_inbound_frames_with_empty_payload: Option<UInt32Value>,
pub max_inbound_priority_frames_per_stream: Option<UInt32Value>,
pub max_inbound_window_update_frames_per_data_frame_sent: Option<UInt32Value>,
pub stream_error_on_invalid_http_messaging: bool,
pub override_stream_error_on_invalid_http_message: Option<BoolValue>,
pub custom_settings_parameters: Vec<SettingsParameter>,
pub connection_keepalive: Option<KeepaliveSettings>,
pub use_oghttp2_codec: Option<BoolValue>,
}
Expand description
[#next-free-field: 17]
Fields§
§hpack_table_size: Option<UInt32Value>
Maximum table size <<https://httpwg.org/specs/rfc7541.html#rfc.section.4.2>
_>
(in octets) that the encoder is permitted to use for the dynamic HPACK table. Valid values
range from 0 to 4294967295 (2^32 - 1) and defaults to 4096. 0 effectively disables header
compression.
max_concurrent_streams: Option<UInt32Value>
Maximum concurrent streams <<https://httpwg.org/specs/rfc7540.html#rfc.section.5.1.2>
_>
allowed for peer on one HTTP/2 connection. Valid values range from 1 to 2147483647 (2^31 - 1)
and defaults to 2147483647.
For upstream connections, this also limits how many streams Envoy will initiate concurrently on a single connection. If the limit is reached, Envoy may queue requests or establish additional connections (as allowed per circuit breaker limits).
This acts as an upper bound: Envoy will lower the max concurrent streams allowed on a given connection based on upstream settings. Config dumps will reflect the configured upper bound, not the per-connection negotiated limits.
initial_stream_window_size: Option<UInt32Value>
Initial stream-level flow-control window <<https://httpwg.org/specs/rfc7540.html#rfc.section.6.9.2>
_> size. Valid values range from 65535
(2^16 - 1, HTTP/2 default) to 2147483647 (2^31 - 1, HTTP/2 maximum) and defaults to 268435456
(256 * 1024 * 1024).
NOTE: 65535 is the initial window size from HTTP/2 spec. We only support increasing the default window size now, so it’s also the minimum.
This field also acts as a soft limit on the number of bytes Envoy will buffer per-stream in the HTTP/2 codec buffers. Once the buffer reaches this pointer, watermark callbacks will fire to stop the flow of data to the codec buffers.
initial_connection_window_size: Option<UInt32Value>
Similar to initial_stream_window_size
, but for connection-level flow-control
window. Currently, this has the same minimum/maximum/default as initial_stream_window_size
.
allow_connect: bool
Allows proxying Websocket and other upgrades over H2 connect.
allow_metadata: bool
[#not-implemented-hide:] Hiding until Envoy has full metadata support. Still under implementation. DO NOT USE.
Allows sending and receiving HTTP/2 METADATA frames. See metadata docs for more information.
max_outbound_frames: Option<UInt32Value>
Limit the number of pending outbound downstream frames of all types (frames that are waiting to
be written into the socket). Exceeding this limit triggers flood mitigation and connection is
terminated. The http2.outbound_flood
stat tracks the number of terminated connections due
to flood mitigation. The default limit is 10000.
max_outbound_control_frames: Option<UInt32Value>
Limit the number of pending outbound downstream frames of types PING, SETTINGS and RST_STREAM,
preventing high memory utilization when receiving continuous stream of these frames. Exceeding
this limit triggers flood mitigation and connection is terminated. The
http2.outbound_control_flood
stat tracks the number of terminated connections due to flood
mitigation. The default limit is 1000.
max_consecutive_inbound_frames_with_empty_payload: Option<UInt32Value>
Limit the number of consecutive inbound frames of types HEADERS, CONTINUATION and DATA with an empty payload and no end stream flag. Those frames have no legitimate use and are abusive, but might be a result of a broken HTTP/2 implementation. The `http2.inbound_empty_frames_flood`` stat tracks the number of connections terminated due to flood mitigation. Setting this to 0 will terminate connection upon receiving first frame with an empty payload and no end stream flag. The default limit is 1.
max_inbound_priority_frames_per_stream: Option<UInt32Value>
Limit the number of inbound PRIORITY frames allowed per each opened stream. If the number of PRIORITY frames received over the lifetime of connection exceeds the value calculated using this formula::
max_inbound_priority_frames_per_stream
* (1 + opened_streams
)
the connection is terminated. For downstream connections the opened_streams
is incremented when
Envoy receives complete response headers from the upstream server. For upstream connection the
opened_streams
is incremented when Envoy send the HEADERS frame for a new stream. The
http2.inbound_priority_frames_flood
stat tracks
the number of connections terminated due to flood mitigation. The default limit is 100.
max_inbound_window_update_frames_per_data_frame_sent: Option<UInt32Value>
Limit the number of inbound WINDOW_UPDATE frames allowed per DATA frame sent. If the number of WINDOW_UPDATE frames received over the lifetime of connection exceeds the value calculated using this formula::
5 + 2 * (opened_streams
+
max_inbound_window_update_frames_per_data_frame_sent
* outbound_data_frames
)
the connection is terminated. For downstream connections the opened_streams
is incremented when
Envoy receives complete response headers from the upstream server. For upstream connections the
opened_streams
is incremented when Envoy sends the HEADERS frame for a new stream. The
http2.inbound_priority_frames_flood
stat tracks the number of connections terminated due to
flood mitigation. The default max_inbound_window_update_frames_per_data_frame_sent value is 10.
Setting this to 1 should be enough to support HTTP/2 implementations with basic flow control,
but more complex implementations that try to estimate available bandwidth require at least 2.
stream_error_on_invalid_http_messaging: bool
Allows invalid HTTP messaging and headers. When this option is disabled (default), then the whole HTTP/2 connection is terminated upon receiving invalid HEADERS frame. However, when this option is enabled, only the offending stream is terminated.
This is overridden by 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>
iff present.
This is deprecated in favor of :ref:override_stream_error_on_invalid_http_message <envoy_v3_api_field_config.core.v3.Http2ProtocolOptions.override_stream_error_on_invalid_http_message>
See RFC7540, sec. 8.1 <<https://tools.ietf.org/html/rfc7540#section-8.1>
_> for details.
override_stream_error_on_invalid_http_message: Option<BoolValue>
Allows invalid HTTP messaging and headers. When this option is disabled (default), then the whole HTTP/2 connection is terminated upon receiving invalid HEADERS frame. However, when this option is enabled, only the offending stream is terminated.
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>
See RFC7540, sec. 8.1 <<https://tools.ietf.org/html/rfc7540#section-8.1>
_> for details.
custom_settings_parameters: Vec<SettingsParameter>
[#not-implemented-hide:] Specifies SETTINGS frame parameters to be sent to the peer, with two exceptions:
-
SETTINGS_ENABLE_PUSH (0x2) is not configurable as HTTP/2 server push is not supported by Envoy.
-
SETTINGS_ENABLE_CONNECT_PROTOCOL (0x8) is only configurable through the named field ‘allow_connect’.
Note that custom parameters specified through this field can not also be set in the corresponding named parameters:
.. code-block:: text
§ID Field Name
0x1 hpack_table_size 0x3 max_concurrent_streams 0x4 initial_stream_window_size
Collisions will trigger config validation failure on load/update. Likewise, inconsistencies between custom parameters with the same identifier will trigger a failure.
See IANA HTTP/2 Settings <<https://www.iana.org/assignments/http2-parameters/http2-parameters.xhtml#settings>
_> for
standardized identifiers.
connection_keepalive: Option<KeepaliveSettings>
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.
use_oghttp2_codec: Option<BoolValue>
[#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.
Trait Implementations§
Source§impl Clone for Http2ProtocolOptions
impl Clone for Http2ProtocolOptions
Source§fn clone(&self) -> Http2ProtocolOptions
fn clone(&self) -> Http2ProtocolOptions
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Debug for Http2ProtocolOptions
impl Debug for Http2ProtocolOptions
Source§impl Default for Http2ProtocolOptions
impl Default for Http2ProtocolOptions
Source§impl Message for Http2ProtocolOptions
impl Message for Http2ProtocolOptions
Source§fn encoded_len(&self) -> usize
fn encoded_len(&self) -> usize
Source§fn encode(&self, buf: &mut impl BufMut) -> Result<(), EncodeError>where
Self: Sized,
fn encode(&self, buf: &mut impl BufMut) -> Result<(), EncodeError>where
Self: Sized,
Source§fn encode_to_vec(&self) -> Vec<u8> ⓘwhere
Self: Sized,
fn encode_to_vec(&self) -> Vec<u8> ⓘwhere
Self: Sized,
Source§fn encode_length_delimited(
&self,
buf: &mut impl BufMut,
) -> Result<(), EncodeError>where
Self: Sized,
fn encode_length_delimited(
&self,
buf: &mut impl BufMut,
) -> Result<(), EncodeError>where
Self: Sized,
Source§fn encode_length_delimited_to_vec(&self) -> Vec<u8> ⓘwhere
Self: Sized,
fn encode_length_delimited_to_vec(&self) -> Vec<u8> ⓘwhere
Self: Sized,
Source§fn decode(buf: impl Buf) -> Result<Self, DecodeError>where
Self: Default,
fn decode(buf: impl Buf) -> Result<Self, DecodeError>where
Self: Default,
Source§fn decode_length_delimited(buf: impl Buf) -> Result<Self, DecodeError>where
Self: Default,
fn decode_length_delimited(buf: impl Buf) -> Result<Self, DecodeError>where
Self: Default,
Source§fn merge(&mut self, buf: impl Buf) -> Result<(), DecodeError>where
Self: Sized,
fn merge(&mut self, buf: impl Buf) -> Result<(), DecodeError>where
Self: Sized,
self
. Read moreSource§fn merge_length_delimited(&mut self, buf: impl Buf) -> Result<(), DecodeError>where
Self: Sized,
fn merge_length_delimited(&mut self, buf: impl Buf) -> Result<(), DecodeError>where
Self: Sized,
self
.Source§impl Name for Http2ProtocolOptions
impl Name for Http2ProtocolOptions
Source§const NAME: &'static str = "Http2ProtocolOptions"
const NAME: &'static str = "Http2ProtocolOptions"
Message
.
This name is the same as it appears in the source .proto file, e.g. FooBar
.Source§const PACKAGE: &'static str = "envoy.config.core.v3"
const PACKAGE: &'static str = "envoy.config.core.v3"
.
, e.g. google.protobuf
.Source§fn full_name() -> String
fn full_name() -> String
Message
.
It’s prefixed with the package name and names of any parent messages,
e.g. google.rpc.BadRequest.FieldViolation
.
By default, this is the package name followed by the message name.
Fully-qualified names must be unique within a domain of Type URLs.Source§impl PartialEq for Http2ProtocolOptions
impl PartialEq for Http2ProtocolOptions
impl StructuralPartialEq for Http2ProtocolOptions
Auto Trait Implementations§
impl Freeze for Http2ProtocolOptions
impl RefUnwindSafe for Http2ProtocolOptions
impl Send for Http2ProtocolOptions
impl Sync for Http2ProtocolOptions
impl Unpin for Http2ProtocolOptions
impl UnwindSafe for Http2ProtocolOptions
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T
in a tonic::Request