generic proxy: complete the development of HTTP1 codec (#32488)

* generic proxy: complete the development of HTTP1 codec

Signed-off-by: wbpcode <wbphub@live.com>

* minor update

Signed-off-by: wbpcode <wbphub@live.com>

* add TODOs

Signed-off-by: wbpcode <wbphub@live.com>

* more validation and single frame mode for HTTP

Signed-off-by: wbpcode <wbphub@live.com>

* more test and validation

Signed-off-by: wbpcode <wbphub@live.com>

* handle the 100 continue and the 1xx response

Signed-off-by: wbpcode <wbphub@live.com>

* minor update

Signed-off-by: wbpcode <wbphub@live.com>

* address comments

Signed-off-by: wbpcode <wbphub@live.com>

* address comments

Signed-off-by: wbpcode <wbphub@live.com>

---------

Signed-off-by: wbpcode <wbphub@live.com>

Mirrored from https://github.com/envoyproxy/envoy @ ffcc257e16c9046b2fec7497a6bf9293d8ada286
main
update-envoy[bot] 11 months ago
parent 2be31771be
commit 153c499e33
  1. 1
      BUILD
  2. 12
      contrib/envoy/extensions/filters/network/generic_proxy/codecs/http1/v3/BUILD
  3. 49
      contrib/envoy/extensions/filters/network/generic_proxy/codecs/http1/v3/http1.proto
  4. 1
      versioning/BUILD

@ -83,6 +83,7 @@ proto_library(
"//contrib/envoy/extensions/filters/network/client_ssl_auth/v3:pkg",
"//contrib/envoy/extensions/filters/network/generic_proxy/action/v3:pkg",
"//contrib/envoy/extensions/filters/network/generic_proxy/codecs/dubbo/v3:pkg",
"//contrib/envoy/extensions/filters/network/generic_proxy/codecs/http1/v3:pkg",
"//contrib/envoy/extensions/filters/network/generic_proxy/codecs/kafka/v3:pkg",
"//contrib/envoy/extensions/filters/network/generic_proxy/matcher/v3:pkg",
"//contrib/envoy/extensions/filters/network/generic_proxy/router/v3:pkg",

@ -0,0 +1,12 @@
# DO NOT EDIT. This file is generated by tools/proto_format/proto_sync.py.
load("@envoy_api//bazel:api_build_system.bzl", "api_proto_package")
licenses(["notice"]) # Apache 2
api_proto_package(
deps = [
"@com_github_cncf_xds//udpa/annotations:pkg",
"@com_github_cncf_xds//xds/annotations/v3:pkg",
],
)

@ -0,0 +1,49 @@
syntax = "proto3";
package envoy.extensions.filters.network.generic_proxy.codecs.http1.v3;
import "google/protobuf/wrappers.proto";
import "xds/annotations/v3/status.proto";
import "udpa/annotations/status.proto";
option java_package = "io.envoyproxy.envoy.extensions.filters.network.generic_proxy.codecs.http1.v3";
option java_outer_classname = "Http1Proto";
option java_multiple_files = true;
option go_package = "github.com/envoyproxy/go-control-plane/contrib/envoy/extensions/filters/network/generic_proxy/codecs/http1/v3;http1v3";
option (udpa.annotations.file_status).package_version_status = ACTIVE;
option (xds.annotations.v3.file_status).work_in_progress = true;
// [#protodoc-title: HTTP1 codec configuration for Generic Proxy]
// [#extension: envoy.generic_proxy.codecs.http1]
// Configuration for HTTP codec. This HTTP1 codec is used to parse and serialize HTTP1 messages
// for the generic proxy filter.
// Any decoding error will result in the generic proxy closing the connection.
//
// .. note::
// This codec only supports HTTP1.1 messages and does not support HTTP1.0 messages. And it limits
// part of the HTTP1.1 features, such as upgrade, connect, etc.
// This codec is mainly designed for the features evaluation of the generic proxy filter. Please
// be cautious when using it in production.
message Http1CodecConfig {
// If true, the codec will parse and serialize HTTP1 messages in a single frame per message.
//
// A frame is a minimal unit of data that can be processed by the generic proxy. If false, the
// codec will parse and serialize HTTP1 messages in a streaming way. In this case, the codec
// will output multiple frames for a single HTTP1 message to the generic proxy.
// If true, the codec will buffer the entire HTTP1 message body before sending it to the generic
// proxy. This may have better performance in small message scenarios and is more friendly to
// handle the HTTP1 message body. This also may result in higher memory usage and latency if
// the message body is large.
//
// Default is true.
google.protobuf.BoolValue single_frame_mode = 1;
// The maximum size of the HTTP1 message body in bytes. If not set, 8*1024*1024 (8MB) is used.
// This only makes sense when single_frame_mode is true.
// If the HTTP1 message body size exceeds this value, this will result in a decoding error
// and the generic proxy will close the connection.
google.protobuf.UInt32Value max_buffer_size = 2;
}

@ -21,6 +21,7 @@ proto_library(
"//contrib/envoy/extensions/filters/network/client_ssl_auth/v3:pkg",
"//contrib/envoy/extensions/filters/network/generic_proxy/action/v3:pkg",
"//contrib/envoy/extensions/filters/network/generic_proxy/codecs/dubbo/v3:pkg",
"//contrib/envoy/extensions/filters/network/generic_proxy/codecs/http1/v3:pkg",
"//contrib/envoy/extensions/filters/network/generic_proxy/codecs/kafka/v3:pkg",
"//contrib/envoy/extensions/filters/network/generic_proxy/matcher/v3:pkg",
"//contrib/envoy/extensions/filters/network/generic_proxy/router/v3:pkg",

Loading…
Cancel
Save