Skip to content

Commit

Permalink
feat: http payload compression (#2779)
Browse files Browse the repository at this point in the history
Signed-off-by: Yaid <[email protected]>
  • Loading branch information
yai-dev authored Apr 26, 2024
1 parent 4c92b1e commit b114f18
Show file tree
Hide file tree
Showing 17 changed files with 1,214 additions and 410 deletions.
1 change: 1 addition & 0 deletions .golangci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ run:
skip-dirs:
- internal/plugin
- extensions/functions/tfLite
- internal/pkg/httpx/httptestx
build-tags:
- edgex

Expand Down
31 changes: 16 additions & 15 deletions docs/en_US/guide/sinks/builtin/rest.md

Large diffs are not rendered by default.

12 changes: 12 additions & 0 deletions docs/en_US/guide/sources/builtin/http_pull.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ default:
Accept: application/json
# how to check the response status, by status code or by body
responseType: code
# Set payload compression algorithm, supported algorithms: gzip|zlib|zstd|flate, algorithm name case-sensitive
# compression: "gzip"
# # Get token
# oAuth:
# # Access token fetch method
Expand Down Expand Up @@ -83,6 +85,16 @@ Use can specify the global HTTP pull settings here. The configuration items spec
- `code`: To check the response status from the HTTP status code.
- `body`: To check the response status from the response body. The body must be "application/json" content type and contains a "code" field.

#### **Support for HTTP Payload Compression**

Users can choose whether to compress `HTTP` payload using supported compression algorithms. This method is based on the **end-to-end compression** and **proactive negotiation mechanism**. The server is informed of the supported compression algorithms through the `Accept-Encoding` request header specified in the request. The server decompresses the data according to the compression algorithm specified in `Accept-Encoding` and uses `Content-Encoding` to inform the client which compression algorithm was used in the response data when responding to the request. In `eKuiper`, it is usually required that **the server and eKuiper use the same compression algorithm** to compress the response and request respectively. Therefore, when configuring data compression, please ensure that the compression algorithm you specify is also supported by the server.

- `compression`: Set the data compression algorithm. The options are `gzip`, `zlib`, `zstd`, `flate`, case sensitive.

**Additional notes on the `Flate` compression algorithm:**

For the `Flate` compression algorithm, the `Accept-Encoding` request header will be set to `deflate`. For other compression algorithms, the value will be set to `gzip`, `zlib`, or `zstd`.

### Security Configurations

#### Certificate Paths
Expand Down
27 changes: 14 additions & 13 deletions docs/zh_CN/guide/sinks/builtin/rest.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,20 @@

该动作用于将输出消息发布到 RESTful API 中。

| 属性名称 | 是否可选 | 说明 |
|--------------------|------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| method || RESTful API 的 HTTP 方法。 这是一个不区分大小写的字符串,其值范围为"get","post","put","patch","delete" 和 "head"。 默认值为 "get",支持动态获取。 |
| url || RESTful API 终端地址,例如 `https://www.example.com/api/dummy`,支持动态获取。 |
| bodyType || 消息体的类型。 当前,支持以下类型:"none", "json", "text", "html", "xml", "javascript" 和 "form"。 对于 "get" 和 "head",不需要正文,因此默认值为 "none"。 对于其他 http 方法,默认值为 "json"。对于 "html","xml" 和 "javascript",必须仔细设置 dataTemplate 以确保格式正确。支持动态获取。 |
| timeout || HTTP 请求超时的时间(毫秒),默认为5000毫秒 |
| headers || 要为 HTTP 请求设置的其它 HTTP 头。支持动态获取。 |
| debugResp || 控制是否将响应信息打印到控制台中。 如果将其设置为 `true`,则打印响应。 如果设置为`false`,则跳过打印日志。 默认值为 `false`|
| certificationPath || 证书路径。可以为绝对路径,也可以为相对路径。如果指定的是相对路径,那么父目录为执行 `kuiperd` 命令的路径。比如,如果你在 `/var/kuiper` 中运行 `bin/kuiperd` ,那么父目录为 `/var/kuiper`; 如果运行从 `/var/kuiper/bin` 中运行`./kuiperd`,那么父目录为 `/var/kuiper/bin`|
| privateKeyPath || 私钥路径。可以为绝对路径,也可以为相对路径,相对路径的用法与 `certificationPath` 类似。 |
| rootCaPath || 根证书路径,用以验证服务器证书。可以为绝对路径,也可以为相对路径,相对路径的用法与 `certificationPath` 类似。 |
| insecureSkipVerify || 控制是否跳过证书认证。如果被设置为 `true`,那么跳过证书认证;否则进行证书验证。缺省为 `true`|
| oAuth || 定义类 OAuth 的认证流程。其他的认证方式如 apikey 可以直接在 headers 设置密钥,不需要使用这个配置。 详情请见[OAuth 配置](../../sources/builtin/http_pull.md#OAuth)|
| 属性名称 | 是否可选 | 说明 |
| ------------------ | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| method || RESTful API 的 HTTP 方法。 这是一个不区分大小写的字符串,其值范围为"get","post","put","patch","delete" 和 "head"。 默认值为 "get",支持动态获取。 |
| url || RESTful API 终端地址,例如 `https://www.example.com/api/dummy`,支持动态获取。 |
| bodyType || 消息体的类型。 当前,支持以下类型:"none", "json", "text", "html", "xml", "javascript" 和 "form"。 对于 "get" 和 "head",不需要正文,因此默认值为 "none"。 对于其他 http 方法,默认值为 "json"。对于 "html","xml" 和 "javascript",必须仔细设置 dataTemplate 以确保格式正确。支持动态获取。 |
| timeout || HTTP 请求超时的时间(毫秒),默认为5000毫秒 |
| headers || 要为 HTTP 请求设置的其它 HTTP 头。支持动态获取。 |
| debugResp || 控制是否将响应信息打印到控制台中。 如果将其设置为 `true`,则打印响应。 如果设置为`false`,则跳过打印日志。 默认值为 `false`|
| certificationPath || 证书路径。可以为绝对路径,也可以为相对路径。如果指定的是相对路径,那么父目录为执行 `kuiperd` 命令的路径。比如,如果你在 `/var/kuiper` 中运行 `bin/kuiperd` ,那么父目录为 `/var/kuiper`; 如果运行从 `/var/kuiper/bin` 中运行`./kuiperd`,那么父目录为 `/var/kuiper/bin`|
| privateKeyPath || 私钥路径。可以为绝对路径,也可以为相对路径,相对路径的用法与 `certificationPath` 类似。 |
| rootCaPath || 根证书路径,用以验证服务器证书。可以为绝对路径,也可以为相对路径,相对路径的用法与 `certificationPath` 类似。 |
| insecureSkipVerify || 控制是否跳过证书认证。如果被设置为 `true`,那么跳过证书认证;否则进行证书验证。缺省为 `true`|
| oAuth || 定义类 OAuth 的认证流程。其他的认证方式如 apikey 可以直接在 headers 设置密钥,不需要使用这个配置。 详情请见[OAuth 配置](../../sources/builtin/http_pull.md#OAuth)|
| compression || 使用指定的压缩算法压缩 Payload,并在收到响应时自动对服务器响应使用指定的压缩算法进行解压缩,当前可选算法有:`zlib`, `gzip`, `flate`, `zstd`,大小写敏感。请注意此选项会将指定的算法增加到请求头 `Accept-Encoding` 中,您需要确保服务器支持您所设置的算法,同时您需要确保服务器端对于响应也应该采用相同的压缩算法对响应数据进行压缩,并在响应头中设置了 `Content-Encoding`。对于 `Flate` 算法,`Accept-Encoding` 请求头的值会设置为 `deflate`|

其他通用的 sink 属性也支持,请参阅[公共属性](../overview.md#公共属性)

Expand Down
12 changes: 12 additions & 0 deletions docs/zh_CN/guide/sources/builtin/http_pull.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ default:
Accept: application/json
# 如何检查响应状态,支持通过状态码或 body
responseType: code
# 设置数据压缩算法,可选项有 gzip、zlib、zstd、flate,大小写敏感
# compression: "gzip"
# 获取 token
# oAuth:
# # 设置如何获取访问码
Expand Down Expand Up @@ -83,6 +85,16 @@ application_conf: #Conf_key
- `code`:通过 HTTP 响应码判断响应状态。
- `body`:通过 HTTP 响应正文判断响应状态。要求响应正文为 JSON 格式且其中包含 code 字段。

#### **HTTP 数据压缩支持**

用户可以选择是否对 `HTTP` 数据使用受支持的压缩算法进行压缩,此方法基于标准的**端到端压缩**技术协定与**主动协商机制**,通过请求中指定 `Accept-Encoding` 请求头告知服务器端所支持的压缩算法,服务器根据 `Accept-Encoding` 中指定的压缩算法对数据进行解压缩并在响应请求时使用 `Content-Encoding` 来告知客户端响应数据使用了哪种压缩算法,在 `eKuiper` 中通常要求 **服务器端与 eKuiper 使用相同的压缩算法** 分别对响应和请求进行压缩,所以在配置数据压缩时,请保证您所指定的压缩算法服务器端同样支持。

- `compression`:设置数据压缩算法,可选项有 gzip、zlib、zstd、flate,大小写敏感

**对于 `Flate` 压缩算法的额外说明:**

对于 `Flate` 压缩算法会在请求头 `Accept-Encoding` 中设置值为 `deflate`,其他压缩算法则设置值为 `gzip`、`zlib` 或 `zstd`。

### 安全配置

#### 证书路径
Expand Down
Loading

0 comments on commit b114f18

Please sign in to comment.