HTTP 协议选项 (proto)

此扩展的限定名称为 envoy.upstreams.http.http_protocol_options

注意

此扩展旨在对不可信的下游流量具有鲁棒性。它假定上游是可信的。

提示

此扩展扩展并可与以下扩展类别一起使用

extensions.upstreams.http.v3.HttpProtocolOptions

[extensions.upstreams.http.v3.HttpProtocolOptions proto]

HttpProtocolOptions 指定 Http 上游协议选项。此对象用于 typed_extension_protocol_options,以 envoy.extensions.upstreams.http.v3.HttpProtocolOptions 为键。

这控制应该对上游使用什么协议以及如何配置这些协议。

这取代了以前在集群中直接进行显式协议配置的模式。因此,像这样的配置,明确配置使用 HTTP/2 上游

clusters:
  - name: some_service
    connect_timeout: 5s
    upstream_http_protocol_options:
      auto_sni: true
    common_http_protocol_options:
      idle_timeout: 1s
    http2_protocol_options:
      max_concurrent_streams: 100
     .... [further cluster config]

现在将看起来像这样

clusters:
  - name: some_service
    connect_timeout: 5s
    typed_extension_protocol_options:
      envoy.extensions.upstreams.http.v3.HttpProtocolOptions:
        "@type": type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions
        upstream_http_protocol_options:
          auto_sni: true
        common_http_protocol_options:
          idle_timeout: 1s
        explicit_http_config:
          http2_protocol_options:
            max_concurrent_streams: 100
     .... [further cluster config]
{
  "common_http_protocol_options": {...},
  "upstream_http_protocol_options": {...},
  "explicit_http_config": {...},
  "use_downstream_protocol_config": {...},
  "auto_config": {...},
  "http_filters": []
}
common_http_protocol_options

(config.core.v3.HttpProtocolOptions) 这包含 HTTP/1 和 HTTP/2 共有的选项

upstream_http_protocol_options

(config.core.v3.UpstreamHttpProtocolOptions) 这包含仅在上游应用的通用协议选项。

explicit_http_config

(extensions.upstreams.http.v3.HttpProtocolOptions.ExplicitHttpConfig) 要明确配置 HTTP/1 或 HTTP/2(但不能同时配置!),请使用 explicit_http_config。如果 explicit_http_config 为空,则使用 HTTP/1.1。

这控制要在上游使用的实际协议。

必须设置以下项中的一个:explicit_http_configuse_downstream_protocol_configauto_config

use_downstream_protocol_config

(extensions.upstreams.http.v3.HttpProtocolOptions.UseDownstreamHttpConfig) 这允许根据下游连接使用的协议来切换协议。

这控制要在上游使用的实际协议。

必须设置以下项中的一个:explicit_http_configuse_downstream_protocol_configauto_config

auto_config

(extensions.upstreams.http.v3.HttpProtocolOptions.AutoHttpConfig) 这允许根据 ALPN 来切换协议

这控制要在上游使用的实际协议。

必须设置以下项中的一个:explicit_http_configuse_downstream_protocol_configauto_config

http_filters
(repeated extensions.filters.network.http_connection_manager.v3.HttpFilter) .. note:

上游 HTTP 过滤器目前处于 alpha 阶段。

上游 HTTP 过滤器链的可选 HTTP 过滤器。

这些过滤器将应用于流经此集群的所有 HTTP 流。与下游 HTTP 过滤器不同,它们不会应用于终止的 CONNECT 请求。

如果使用上游 HTTP 过滤器,请注意,上游 HTTP 过滤器发送的本地错误不会触发重试,并且上游 HTTP 过滤器发送的本地错误如果配置了对冲,将被视为最终响应。

extensions.upstreams.http.v3.HttpProtocolOptions.ExplicitHttpConfig

[extensions.upstreams.http.v3.HttpProtocolOptions.ExplicitHttpConfig proto]

如果使用此选项,则集群将仅在一个可能的协议上运行。请注意,HTTP/2 或更高版本通常应该用于上游 gRPC 集群。

{
  "http_protocol_options": {...},
  "http2_protocol_options": {...},
  "http3_protocol_options": {...}
}
http_protocol_options

(config.core.v3.Http1ProtocolOptions)

必须设置以下项中的一个:http_protocol_optionshttp2_protocol_optionshttp3_protocol_options

http2_protocol_options

(config.core.v3.Http2ProtocolOptions)

必须设置以下项中的一个:http_protocol_optionshttp2_protocol_optionshttp3_protocol_options

http3_protocol_options
(config.core.v3.Http3ProtocolOptions) .. warning:

QUIC 上游支持目前尚未准备好用于互联网使用。有关详细信息,请参阅 此处

必须设置以下项中的一个:http_protocol_optionshttp2_protocol_optionshttp3_protocol_options

extensions.upstreams.http.v3.HttpProtocolOptions.UseDownstreamHttpConfig

[extensions.upstreams.http.v3.HttpProtocolOptions.UseDownstreamHttpConfig proto]

如果使用此选项,则集群可以使用两种配置的协议,并且将使用下游连接使用的协议。

如果为下游配置了 HTTP/3,而未为上游配置,则 HTTP/3 请求将故障转移到 HTTP/2。

{
  "http_protocol_options": {...},
  "http2_protocol_options": {...},
  "http3_protocol_options": {...}
}
http_protocol_options

(config.core.v3.Http1ProtocolOptions)

http2_protocol_options

(config.core.v3.Http2ProtocolOptions)

http3_protocol_options
(config.core.v3.Http3ProtocolOptions) .. warning:

QUIC 上游支持目前尚未准备好用于互联网使用。有关详细信息,请参阅 此处

extensions.upstreams.http.v3.HttpProtocolOptions.AutoHttpConfig

[extensions.upstreams.http.v3.HttpProtocolOptions.AutoHttpConfig proto]

如果使用此选项,则集群可以使用 HTTP/1 或 HTTP/2,并且将使用通过 ALPN 与上游协商的协议。使用 AutoHttpConfig 配置的集群将使用最高可用协议;如果支持 HTTP/2,否则使用 HTTP/1。如果上游不支持 ALPN,AutoHttpConfig 将故障转移到 HTTP/1。这只能与支持 ALPN 的传输套接字一起使用。使用不支持 ALPN 的传输套接字会导致配置失败。传输层可以使用自定义 ALPN 配置,但集群的默认 ALPN(或如果自定义 ALPN 失败)将为“h2,http/1.1”。

{
  "http_protocol_options": {...},
  "http2_protocol_options": {...},
  "http3_protocol_options": {...},
  "alternate_protocols_cache_options": {...}
}
http_protocol_options

(config.core.v3.Http1ProtocolOptions)

http2_protocol_options

(config.core.v3.Http2ProtocolOptions)

http3_protocol_options

(config.core.v3.Http3ProtocolOptions) 与 HTTP/1 和 HTTP/2 不同,HTTP/3 不会被配置,除非它存在,并且(很快)只有在有服务器端支持的迹象时才会被配置。有关何时使用 HTTP/3 以及何时 Envoy 会故障转移到 TCP 的更多信息,请参阅 此处

警告

QUIC 上游支持目前尚未准备好用于互联网使用。有关详细信息,请参阅 此处

alternate_protocols_cache_options

(config.core.v3.AlternateProtocolsCacheOptions) alternate_protocols_cache_options 的存在会导致使用 alternate_protocols_cache,它负责解析和缓存 HTTP Alt-Svc 标头。这使能够对支持 HTTP/3 的来源使用 HTTP/3。

注意

启用 HTTP/3 时需要此选项。