跳到主要内容
版本: v2.x

EarlyData

用于 Fiber 的 Early Data 中间件增加了对 TLS 1.3 的 Early Data ("0-RTT") 功能的支持。引用 RFC 8446 的话,当客户端和服务器共享一个 PSK 时,TLS 1.3 允许客户端在第一轮通信("early data")中发送数据以加快请求速度,有效地将常规的 1-RTT 请求减少为 0-RTT 请求。

在使用此中间件之前,请确保启用 Fiber 的 EnableTrustedProxyCheck 配置选项,以免信任客户端伪造的 HTTP 请求头。

另请注意,在您的反向代理(例如 nginx,只需通过简单的 ssl_early_data on; 配置即可)中启用 early data 支持会使得请求可以重放。在继续之前,请参阅以下文档

默认情况下,此中间件仅允许对安全的 HTTP 请求方法使用 early data 请求,否则将拒绝该请求,即在执行您的处理程序之前终止请求。此行为可以通过 AllowEarlyData 配置选项控制。安全的 HTTP 方法 — GET, HEAD, OPTIONSTRACE — 不应该修改服务器上的状态。

签名

func New(config ...Config) fiber.Handler

示例

导入作为 Fiber web 框架一部分的中间件包

import (
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/earlydata"
)

在初始化 Fiber 应用后,您可以使用以下方式

// Initialize default config
app.Use(earlydata.New())

// Or extend your config for customization
app.Use(earlydata.New(earlydata.Config{
Error: fiber.ErrTooEarly,
// ...
}))

配置

属性类型描述默认值
下一个func(*fiber.Ctx) boolNext 定义了一个函数,当返回 true 时跳过此中间件。nil
IsEarlyDatafunc(*fiber.Ctx) boolIsEarlyData 返回请求是否为 early-data 请求。检查 "Early-Data" 头是否等于 "1" 的函数
AllowEarlyDatafunc(*fiber.Ctx) boolAllowEarlyData 返回 early-data 请求是否应该被允许或拒绝。在不安全方法上拒绝、在安全方法上允许的函数
错误error当 early-data 请求被拒绝时返回的错误。fiber.ErrTooEarly

默认配置

var ConfigDefault = Config{
IsEarlyData: func(c *fiber.Ctx) bool {
return c.Get(DefaultHeaderName) == DefaultHeaderTrueValue
},

AllowEarlyData: func(c *fiber.Ctx) bool {
return fiber.IsMethodSafe(c.Method())
},

Error: fiber.ErrTooEarly,
}

常量

const (
DefaultHeaderName = "Early-Data"
DefaultHeaderTrueValue = "1"
)