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

EarlyData

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

在使用此中间件之前,请务必启用 Fiber 的 EnableTrustedProxyCheck 配置选项,以避免信任客户端的虚假 HTTP 请求头。

还要注意,在反向代理(例如 nginx,通过简单的 ssl_early_data on; 完成)中启用对早期数据的支持会使请求可重放。在继续之前,请参阅以下文档

默认情况下,此中间件仅允许安全 HTTP 请求方法的早期数据请求,否则拒绝请求,即在执行处理程序之前中止请求。此行为可由 AllowEarlyData 配置选项控制。安全 HTTP 方法 — GETHEADOPTIONSTRACE — 不应修改服务器上的状态。

签名

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) bool当返回 true 时,Next 定义了一个函数来跳过此中间件。nil
IsEarlyDatafunc(*fiber.Ctx) boolIsEarlyData 返回请求是否为早期数据请求。检查“Early-Data”标头是否等于“1”的函数
AllowEarlyDatafunc(*fiber.Ctx) boolAllowEarlyData 返回是否应允许或拒绝早期数据请求。拒绝不安全方法并允许安全方法的函数
错误error如果拒绝早期数据请求,则返回错误。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"
)