协议选项 (proto)

config.core.v3.QuicKeepAliveSettings

[config.core.v3.QuicKeepAliveSettings proto]

QUIC 连接中保持活动探测的配置。请注意,QUIC 保持活动探测数据包与 HTTP/2 保持活动 PING 的工作方式不同,因为探测数据包本身不会超时等待探测响应。Quic 的空闲超时时间比 TCP 短,因此它不依赖于此类探测来发现死连接。如果对端未响应,连接最终将空闲超时。因此,它们的配置与 connection_keepalive 不同。

{
  "max_interval": {...},
  "initial_interval": {...}
}
max_interval

(Duration) 连接发送保持活动探测数据包(使用 PING 或 PATH_RESPONSE)的最大间隔。该值应小于 connection idle_timeout,以防止空闲超时,同时不小于 1 秒,以避免限制连接或用探测数据包淹没对端。

如果 initial_interval 缺失或为零,客户端连接将使用此值来开始探测。

如果为零,则禁用保持活动探测。如果缺失,则使用 QUICHE 默认间隔进行探测。

initial_interval

(Duration) 发送前几个保持活动探测数据包的间隔,以防止连接达到空闲超时。随后的探测将被发送,每个探测的间隔都比上一个间隔呈指数增长,直到达到 max_interval。之后的探测将始终使用 max_interval

该值应小于 connection idle_timeout,以防止空闲超时,并且小于 max_interval,以使其生效。

如果缺失,则为服务器连接禁用保持活动探测。对于客户端连接,如果 max_interval 为零,则不保持活动,否则使用 max_interval 或 QUICHE 默认值始终进行探测。

config.core.v3.QuicProtocolOptions

[config.core.v3.QuicProtocolOptions proto]

适用于下游和上游连接的 QUIC 协议选项。

{
  "max_concurrent_streams": {...},
  "initial_stream_window_size": {...},
  "initial_connection_window_size": {...},
  "num_timeouts_to_trigger_port_migration": {...},
  "connection_keepalive": {...},
  "connection_options": ...,
  "client_connection_options": ...,
  "idle_network_timeout": {...},
  "max_packet_length": {...}
}
max_concurrent_streams

(UInt32Value) 客户端每个连接可以协商的最大流数。如果未指定,则为 100。

initial_stream_window_size

(UInt32Value) 流级初始流控接收窗口 大小。有效值范围为 1 到 16777216(2^24,QUICHE 支持的最大值),默认值为 16777216(16 * 1024 * 1024)。

注意:16384(2^14)是 Google QUIC 支持的最小窗口大小。如果配置小于它,我们将使用 16384 代替。QUICHE IETF Quic 实现支持 1 字节窗口。我们现在只支持增加默认窗口大小,所以这也是最小值。

此字段也作为 Envoy 在 QUIC 流发送和接收缓冲区中为每个流缓冲的字节数的软限制。一旦缓冲区达到此指针,水印回调将触发以停止数据流到流缓冲区。

initial_connection_window_size

(UInt32Value) 与 initial_stream_window_size 相似,但适用于连接级流控。有效值范围为 1 到 25165824(24MB,QUICHE 支持的最大值),默认值为 25165824(24 * 1024 * 1024)。

注意:16384(2^14)是 Google QUIC 支持的最小窗口大小。我们现在只支持增加默认窗口大小,所以这也是最小值。

num_timeouts_to_trigger_port_migration

(UInt32Value) 针对 QUIC 客户端,在触发端口迁移之前可以发生的超时次数。默认为 4。如果设置为 0,则在路径降级时不会发生端口迁移。此处的超时是指 QUIC 内部路径降级超时机制,例如 PTO。这对服务器会话没有影响。

connection_keepalive

(config.core.v3.QuicKeepAliveSettings) 以配置的间隔探测对端以请求流量,即 ACK 或 PATH_RESPONSE,来自对端以推回连接空闲超时。如果缺失,则使用默认的保持活动行为,其中客户端连接每 15 秒发送一次 PING,而服务器连接则不做任何操作。

connection_options

(string) 一个逗号分隔的字符串列表,表示在 QUICHE 中定义的 QUIC 连接选项,并由上游连接发送。

client_connection_options

(string) 一个逗号分隔的字符串列表,表示在 QUICHE 中定义的 QUIC 客户端连接选项,并由上游连接发送。

idle_network_timeout

(Duration) QUIC 连接在关闭自身之前保持空闲的持续时间。如果此字段不存在,将应用 QUICHE 默认值 600 秒。对于内部公司网络,较长的超时通常是可以的。但对于面向客户端的网络,30 秒通常是一个不错的选择。

max_packet_length

(UInt64Value) QUIC 连接的最大数据包长度。它指的是可以通过连接传输的 QUIC 数据包的最大大小。如果未指定,将使用 QUICHE 中的默认值之一

config.core.v3.UpstreamHttpProtocolOptions

[config.core.v3.UpstreamHttpProtocolOptions proto]

{
  "auto_sni": ...,
  "auto_san_validation": ...,
  "override_auto_sni_header": ...
}
auto_sni

(bool) 根据下游 HTTP 主机/授权标头或任何其他任意标头(当 override_auto_sni_header 设置时)为新的上游连接设置传输套接字 SNI,如 路由器过滤器 所见。如果在 http 路由器过滤器之前的过滤器设置了相应的元数据,则不会执行任何操作。

auto_san_validation

(bool) 根据下游 HTTP 主机/授权标头或任何其他任意标头(当 override_auto_sni_header 设置时)为新的上游连接自动验证上游提供的证书,如 路由器过滤器 所见。此字段旨在与 auto_sni 字段一起设置。如果在 http 路由器过滤器之前的过滤器设置了相应的元数据,则不会执行任何操作。

override_auto_sni_header

(string) 用于设置 SNI 值的可选主机/授权标头的替代方案。它应该是有效的下游 HTTP 标头,如 路由器过滤器 所见。如果未设置,则主机/授权标头将用于填充 SNI。如果未找到指定的标头或其值为为空,则将改为主机/授权标头。此字段旨在与 auto_sni 和/或 auto_san_validation 字段一起设置。如果没有设置这些字段,则设置此字段将是无效操作。如果在 http 路由器过滤器之前的过滤器设置了相应的元数据,则不会执行任何操作。

config.core.v3.AlternateProtocolsCacheOptions

[config.core.v3.AlternateProtocolsCacheOptions proto]

配置备用协议缓存,该缓存跟踪可用于与原始服务器建立 HTTP 连接的备用协议。有关 HTTP 备用服务,请参阅 https://tools.ietf.org/html/rfc7838,有关“HTTPS” DNS 资源记录,请参阅 https://datatracker.ietf.org/doc/html/draft-ietf-dnsop-svcb-https-04

{
  "name": ...,
  "max_entries": {...},
  "key_value_store_config": {...},
  "prepopulated_entries": []
}
name

(string, REQUIRED) 缓存的名称。多个命名缓存允许在单个 Envoy 进程中使用不同的配置运行独立的备用协议缓存配置。所有具有相同名称的备用协议缓存选项必须在从不同配置组件引用时在所有字段中都相等。如果并非如此,则配置将无法加载。

max_entries

(UInt32Value) 缓存将容纳的最大条目数。如果未指定,则默认为 1024。

key_value_store_config

(config.core.v3.TypedExtensionConfig) 允许配置持久化的 键值存储 将备选协议条目刷新到磁盘。此功能当前仅在并发度为 1 时支持,缓存条目优先于以下预填充条目。

prepopulated_entries

(repeated config.core.v3.AlternateProtocolsCacheOptions.AlternateProtocolsCacheEntry) 允许使用上述条目预填充缓存。

config.core.v3.AlternateProtocolsCacheOptions.AlternateProtocolsCacheEntry

[config.core.v3.AlternateProtocolsCacheOptions.AlternateProtocolsCacheEntry proto]

允许使用 7 天有效期的 HTTP/3 备选协议条目预填充缓存。这将导致 Envoy 尝试向这些上游发送 HTTP/3,即使上游未声明支持 HTTP/3。这些条目将被 alt-svc 响应头或缓存值覆盖。与常规缓存条目一样,如果原始响应会导致清除现有的备选协议缓存条目,则预填充条目也将被清除。添加具有 hostname=foo.com port=123 的缓存条目等效于在对 foo.com:123 的请求的响应中获取响应头 alt-svc: h3=:”123”; ma=86400”。

{
  "hostname": ...,
  "port": ...
}
hostname

(string) 备选协议条目的主机名。

port

(uint32) 备选协议条目的端口。

config.core.v3.HttpProtocolOptions

[config.core.v3.HttpProtocolOptions proto]

{
  "idle_timeout": {...},
  "max_connection_duration": {...},
  "max_headers_count": {...},
  "max_response_headers_kb": {...},
  "max_stream_duration": {...},
  "headers_with_underscores_action": ...,
  "max_requests_per_connection": {...}
}
idle_timeout

(Duration) 连接的空闲超时时间。空闲超时时间定义为没有活动请求的时间段。当达到空闲超时时间时,连接将被关闭。如果连接是 HTTP/2 下游连接,则在关闭连接之前将执行排水序列,请参阅 drain_timeout。请注意,基于请求的超时意味着 HTTP/2 PING 不会使连接保持活动状态。如果未指定,则默认为 1 小时。要显式禁用空闲超时,请将其设置为 0。

警告

禁用此超时很可能会导致连接泄漏,因为丢失了 TCP FIN 数据包等。

如果配置了 过载操作“envoy.overload_actions.reduce_timeouts”,则此超时时间将根据 HTTP_DOWNSTREAM_CONNECTION_IDLE 的值针对下游连接进行缩放。

max_connection_duration

(Duration) 连接的最大持续时间。持续时间定义为连接建立以来的时间段。如果未设置,则没有最大持续时间。当达到 max_connection_duration 时,排水序列将开始执行。如果没有任何活动流,连接将在排水超时时间段后关闭。请参阅 drain_timeout

max_headers_count

(UInt32Value) 头部的最大数量(如果在 HttpConnectionManager 上配置,则为请求头部;如果在集群上配置,则为响应头部)。如果未配置,则允许的默认最大头部数量为 100。请求的默认值可以通过设置运行时键 envoy.reloadable_features.max_request_headers_count 来覆盖。响应的默认值可以通过设置运行时键 envoy.reloadable_features.max_response_headers_count 来覆盖。超出此限制的下游请求将收到 HTTP/1.x 的 431 响应,并导致 HTTP/2 的流重置。超出此限制的上游响应将导致 503 响应。

max_response_headers_kb

(UInt32Value) 响应头的最大大小。如果未配置,则默认值为 60 KiB,HTTP/1 响应头除外,其默认值为 80KiB。默认值可以通过设置运行时键 envoy.reloadable_features.max_response_headers_size_kb 来覆盖。超出此限制的响应将导致 503 响应。在 Envoy 中,此设置仅在对上游集群配置时有效,不在 HTTP 连接管理器 上配置。

注意:目前一些协议编解码器对单个头的最大大小有限制

HTTP/2(使用 nghttp2 时)将单个头限制在约 100kb。HTTP/3 将单个头限制在约 1024kb。

max_stream_duration

(Duration) 使 HTTP 请求/响应流保持活动状态的总持续时间。如果达到时间限制,则流将被重置,与任何其他超时无关。如果未指定,则不会设置此值。

headers_with_underscores_action

(config.core.v3.HttpProtocolOptions.HeadersWithUnderscoresAction) 当接收到带有包含下划线的头名称的客户端请求时要采取的操作。如果未指定此设置,则该值默认为 ALLOW。注意:上游响应不受此设置影响。注意:这仅影响客户端头。它不会影响 Envoy 过滤器添加的头,并且如果添加到集群配置中,则不会有任何影响。

max_requests_per_connection

(UInt32Value) 上游和下游连接的可选最大请求数。如果未指定,则没有限制。将此参数设置为 1 将有效地禁用保持活动状态。对于 HTTP/2 和 HTTP/3,由于并发流处理,该限制是近似的。

Enum config.core.v3.HttpProtocolOptions.HeadersWithUnderscoresAction

[config.core.v3.HttpProtocolOptions.HeadersWithUnderscoresAction proto]

当 Envoy 接收到带有包含下划线的头名称的客户端请求时要采取的操作。RFC-7230 允许头名称中使用下划线字符,并且此行为作为安全措施实现,因为一些系统将“_”和“-”视为可互换的。默认情况下,Envoy 允许包含下划线的客户端请求头。

ALLOW

(DEFAULT) ⁣允许包含下划线的头。这是默认行为。

REJECT_REQUEST

⁣拒绝客户端请求。HTTP/1 请求将被拒绝,状态为 400。HTTP/2 请求以流重置结束。对于每个被拒绝的请求,“httpN.requests_rejected_with_underscores_in_headers” 计数器将递增。

DROP_HEADER

⁣删除名称包含下划线的客户端头。头在调用过滤器链之前被删除,因此过滤器将不会看到被删除的头。“httpN.dropped_headers_with_underscores” 计数器将为每个被删除的头递增。

config.core.v3.Http1ProtocolOptions

[config.core.v3.Http1ProtocolOptions proto]

{
  "allow_absolute_url": {...},
  "accept_http_10": ...,
  "default_host_for_http_10": ...,
  "header_key_format": {...},
  "enable_trailers": ...,
  "allow_chunked_length": ...,
  "override_stream_error_on_invalid_http_message": {...},
  "send_fully_qualified_url": ...
}
allow_absolute_url

(BoolValue) 处理请求中具有绝对 URL 的 HTTP 请求。这些请求通常由客户端发送到转发/显式代理。这允许客户端将 envoy 配置为其 HTTP 代理。例如,在 Unix 中,这通常通过设置 http_proxy 环境变量来完成。

accept_http_10

(bool) 处理传入的 HTTP/1.0 和 HTTP 0.9 请求。默认情况下,此选项处于关闭状态,并且不完全符合标准。如果配置了 default_host_for_http_10,则支持预 HTTP/1.1 样式的连接逻辑、去分块和处理缺少客户端主机的行为。

default_host_for_http_10

(string) HTTP/1.0 请求的默认主机。如果 accept_http_10 为真,则强烈建议使用此选项,因为 Envoy 否则不支持没有主机头的 HTTP/1.0。如果 accept_http_10 不为真,则此选项无效。

header_key_format

(config.core.v3.Http1ProtocolOptions.HeaderKeyFormat) 描述如何格式化响应头的键。默认情况下,所有头键都转换为小写。

enable_trailers

(bool) 为 HTTP/1 启用尾部。默认情况下,HTTP/1 编解码器会删除代理的尾部。

注意

请注意,这仅在 Envoy 进行分块编码时才会发生,分块编码发生在以下情况下:- 请求为 HTTP/1.1。- 不是仅 HEAD 请求,也不是 HTTP 升级。- 不是对 HEAD 请求的响应。- 不存在内容长度头。

allow_chunked_length

(bool) 允许 Envoy 处理同时设置了 Content-LengthTransfer-Encoding 头的消息。默认情况下,此类消息会被拒绝,但如果启用此选项,则 Envoy 将删除 Content-Length 头并处理消息。有关详细信息,请参阅 RFC7230,第 3.3.3 节

注意

启用此选项可能会导致请求走私漏洞,尤其是在通过多层代理进行代理流量时。

override_stream_error_on_invalid_http_message

(BoolValue) 允许无效的 HTTP 消息传递。当此选项为 false 时,Envoy 将在接收到无效的 HTTP 消息时终止 HTTP/1.1 连接。但是,当此选项为 true 时,Envoy 将尽可能保持 HTTP/1.1 连接打开。如果设置了此选项,则将覆盖任何 HCM stream_error_on_invalid_http_messaging

send_fully_qualified_url

(bool) 允许在代理响应的第一行时发送完全限定的 URL。默认情况下,Envoy 仅在第一行中发送路径组件。如果此选项为 true,则 Envoy 将创建完全限定的 URI,该 URI 包含方案(如果不存在则推断)、主机(来自主机/:authority 头)和路径(来自第一行或:path 头)。

config.core.v3.Http1ProtocolOptions.HeaderKeyFormat

[config.core.v3.Http1ProtocolOptions.HeaderKeyFormat proto]

{
  "proper_case_words": {...},
  "stateful_formatter": {...}
}
proper_case_words

(config.core.v3.Http1ProtocolOptions.HeaderKeyFormat.ProperCaseWords) 通过将单词首字母大写来格式化标题:如果第一个字符或特殊字符后的字符是字母,则将其大写。例如,“content-type” 将变为 “Content-Type”,而“foo$b#$are” 将变为 “Foo$B#$Are”。请注意,虽然这会导致大多数标题遵循传统的命名规则,但某些标题并不包括在内。例如,“TE” 标题将被格式化为“Te”。

必须设置 proper_case_wordsstateful_formatter 中的一个。

stateful_formatter

(config.core.v3.TypedExtensionConfig) 有状态格式化程序扩展的配置,这些扩展程序允许使用接收到的标题来影响编码标题的输出。例如,在代理期间保留大小写。

提示

此扩展类别有以下已知扩展

必须设置 proper_case_wordsstateful_formatter 中的一个。

config.core.v3.Http1ProtocolOptions.HeaderKeyFormat.ProperCaseWords

[config.core.v3.Http1ProtocolOptions.HeaderKeyFormat.ProperCaseWords proto]

config.core.v3.KeepaliveSettings

[config.core.v3.KeepaliveSettings proto]

{
  "interval": {...},
  "timeout": {...},
  "interval_jitter": {...},
  "connection_idle_interval": {...}
}
interval

(Duration) 按此周期发送 HTTP/2 PING 帧,以测试连接是否仍然存活。如果值为零,则不会发送间隔 PING。

timeout

(Duration, REQUIRED) 等待对保持活动 PING 的响应的时间。如果在此时间段内未收到响应,则连接将被中止。请注意,为了防止首行阻塞的影响,当连接上收到任何帧时,超时时间将延长,假设如果收到帧,连接就是健康的。

interval_jitter

(type.v3.Percent) 作为间隔百分比的随机抖动量,将添加到每个间隔。值为零表示没有抖动。默认值为 15%。

connection_idle_interval

(Duration) 如果连接空闲了此持续时间,请在创建新流之前发送 HTTP/2 ping,以快速检测死连接。如果值为零,则不会发送此类型的 PING。如果间隔 ping 未完成,则不会发送第二个 ping,因为间隔 ping 将确定连接是否已死。

HTTP/3 的相同功能通过继承 QUICHE 来实现,QUICHE 使用 connection idle_timeout 和连接的当前 PTO 来决定是否在发送新请求之前探测。

config.core.v3.Http2ProtocolOptions

[config.core.v3.Http2ProtocolOptions proto]

{
  "hpack_table_size": {...},
  "max_concurrent_streams": {...},
  "initial_stream_window_size": {...},
  "initial_connection_window_size": {...},
  "allow_connect": ...,
  "max_outbound_frames": {...},
  "max_outbound_control_frames": {...},
  "max_consecutive_inbound_frames_with_empty_payload": {...},
  "max_inbound_priority_frames_per_stream": {...},
  "max_inbound_window_update_frames_per_data_frame_sent": {...},
  "stream_error_on_invalid_http_messaging": ...,
  "override_stream_error_on_invalid_http_message": {...},
  "connection_keepalive": {...}
}
hpack_table_size

(UInt32Value) 编码器允许用于动态 HPACK 表的最大表大小(以字节为单位)。有效值范围为 0 到 4294967295 (2^32 - 1),默认值为 4096。0 等效于禁用标题压缩。

max_concurrent_streams

(UInt32Value) 单个 HTTP/2 连接上对等体允许的最大并发流。有效值范围为 1 到 2147483647 (2^31 - 1),默认值为 2147483647。

对于上游连接,这也限制了 Envoy 在单个连接上并发启动的流数。如果达到限制,Envoy 可能会排队请求或建立额外的连接(如断路器限制允许的那样)。

这充当上限:Envoy 会根据上游设置降低单个连接上允许的最大并发流数。配置转储将反映配置的上限,而不是每个连接协商的限制。

initial_stream_window_size

(UInt32Value) 初始流级流量控制窗口 大小。有效值范围为 65535 (2^16 - 1,HTTP/2 默认值) 到 2147483647 (2^31 - 1,HTTP/2 最大值),默认值为 268435456 (256 * 1024 * 1024)。

注意:65535 是 HTTP/2 规范中的初始窗口大小。我们目前只支持增加默认窗口大小,因此它也是最小值。

此字段还充当 Envoy 在 HTTP/2 编解码器缓冲区中每个流缓冲的字节数的软限制。一旦缓冲区达到此指针,水位标记回调将被触发以停止数据流到编解码器缓冲区。

initial_connection_window_size

(UInt32Value) 类似于 initial_stream_window_size,但针对连接级流量控制窗口。目前,它具有与 initial_stream_window_size 相同的最小值/最大值/默认值。

allow_connect

(bool) 允许通过 H2 连接代理 Websocket 和其他升级。

max_outbound_frames

(UInt32Value) 限制所有类型的待发送下游帧(等待写入套接字的帧)的数量。超过此限制将触发泛滥缓解,连接将被终止。 http2.outbound_flood 统计信息跟踪由于泛滥缓解而终止的连接数量。默认限制为 10000。

max_outbound_control_frames

(UInt32Value) 限制类型为 PING、SETTINGS 和 RST_STREAM 的待发送下游帧的数量,防止在接收这些帧的连续流时出现高内存使用率。超过此限制将触发泛滥缓解,连接将被终止。 http2.outbound_control_flood 统计信息跟踪由于泛滥缓解而终止的连接数量。默认限制为 1000。

max_consecutive_inbound_frames_with_empty_payload

(UInt32Value) 限制类型为 HEADERS、CONTINUATION 和 DATA 的连续传入帧的数量,这些帧具有空有效负载且没有结束流标志。这些帧没有合法用途,属于滥用行为,但可能是错误的 HTTP/2 实现造成的。 http2.inbound_empty_frames_flood` 统计信息跟踪由于泛滥缓解而终止的连接数量。将其设置为 0 将在收到第一个具有空有效负载且没有结束流标志的帧时终止连接。默认限制为 1。

max_inbound_priority_frames_per_stream

(UInt32Value) 限制每个打开的流允许的传入 PRIORITY 帧数量。如果连接生命周期内接收的 PRIORITY 帧数量超过使用此公式计算的值

``max_inbound_priority_frames_per_stream`` * (1 + ``opened_streams``)

则连接将被终止。对于下游连接,当 Envoy 从上游服务器接收完整的响应标题时, opened_streams 会递增。对于上游连接,当 Envoy 发送新流的 HEADERS 帧时, opened_streams 会递增。 http2.inbound_priority_frames_flood 统计信息跟踪由于泛滥缓解而终止的连接数量。默认限制为 100。

max_inbound_window_update_frames_per_data_frame_sent

(UInt32Value) 限制每个发送的 DATA 帧允许的传入 WINDOW_UPDATE 帧数量。如果连接生命周期内接收的 WINDOW_UPDATE 帧数量超过使用此公式计算的值

5 + 2 * (``opened_streams`` +
         ``max_inbound_window_update_frames_per_data_frame_sent`` * ``outbound_data_frames``)

则连接将被终止。对于下游连接,当 Envoy 从上游服务器接收完整的响应标题时, opened_streams 会递增。对于上游连接,当 Envoy 发送新流的 HEADERS 帧时, opened_streams 会递增。 http2.inbound_priority_frames_flood 统计信息跟踪由于泛滥缓解而终止的连接数量。默认的 max_inbound_window_update_frames_per_data_frame_sent 值为 10。将其设置为 1 应该足以支持具有基本流量控制的 HTTP/2 实现,但尝试估计可用带宽的更复杂实现需要至少 2。

stream_error_on_invalid_http_messaging

(bool) 允许无效的 HTTP 消息和标题。当此选项被禁用(默认)时,在收到无效的 HEADERS 帧时,整个 HTTP/2 连接将被终止。但是,当此选项被启用时,只有有问题的流将被终止。

如果存在,则会被 HCM stream_error_on_invalid_http_messaging 覆盖。

此项已弃用,请改用 override_stream_error_on_invalid_http_message

有关详细信息,请参阅 RFC7540,第 8.1 节

override_stream_error_on_invalid_http_message

(BoolValue) 允许无效的 HTTP 消息和标题。当此选项被禁用(默认)时,在收到无效的 HEADERS 帧时,整个 HTTP/2 连接将被终止。但是,当此选项被启用时,只有有问题的流将被终止。

此项会覆盖任何 HCM stream_error_on_invalid_http_messaging

有关详细信息,请参阅 RFC7540,第 8.1 节

connection_keepalive

(config.core.v3.KeepaliveSettings) 发送 HTTP/2 PING 帧以验证连接是否仍然健康。如果远程对等体在配置的超时时间内没有响应,连接将被中止。

config.core.v3.Http2ProtocolOptions.SettingsParameter

[config.core.v3.Http2ProtocolOptions.SettingsParameter proto]

定义要发送到 SETTINGS 帧中的参数。有关详细信息,请参阅 RFC7540,第 6.5.1 节

{
  "identifier": {...},
  "value": {...}
}
identifier

(UInt32Value, REQUIRED) 16 位参数标识符。

value

(UInt32Value, REQUIRED) 32 位参数值。

config.core.v3.Http3ProtocolOptions

[config.core.v3.Http3ProtocolOptions proto]

允许使用 HTTP/3 的消息。

{
  "quic_protocol_options": {...},
  "override_stream_error_on_invalid_http_message": {...},
  "allow_extended_connect": ...
}
quic_protocol_options

(config.core.v3.QuicProtocolOptions)

override_stream_error_on_invalid_http_message

(BoolValue) 允许无效的 HTTP 消息和标题。当此选项被禁用(默认)时,在收到无效的 HEADERS 帧时,整个 HTTP/3 连接将被终止。但是,当此选项被启用时,只有有问题的流将被终止。

如果设置,则会覆盖任何 HCM stream_error_on_invalid_http_messaging

allow_extended_connect

(布尔值) 允许使用 HTTP/2 扩展连接 RFC 中的标头机制和 HTTP/3 中的提议设置 通过 HTTP/3 CONNECT 代理 Websocket 和其他升级。请注意,HTTP/3 CONNECT 尚未成为 RFC。

警告

此 API 功能目前尚处于开发阶段。标记为开发中的 API 功能不被视为稳定,不受 威胁模型 的保护,不受安全团队的支持,并且可能会发生重大变更。请务必在了解上述所有要点后方可使用此功能。

config.core.v3.SchemeHeaderTransformation

[config.core.v3.SchemeHeaderTransformation proto]

用于控制对 :scheme 标头的转换的消息。

{
  "scheme_to_overwrite": ...,
  "match_upstream": ...
}
scheme_to_overwrite

(字符串) 使用此字符串的内容覆盖任何 Scheme 标头。如果设置了此选项,则优先于 match_upstream。

match_upstream

(布尔值) 将 Scheme 标头设置为与上游传输协议匹配。例如,如果请求通过 TLS 发送到上游,则 Scheme 标头将设置为“https”。如果请求通过纯文本发送,则 Scheme 标头将设置为“http”。如果设置了 scheme_to_overwrite,则此字段将不被使用。