一个使用 Swift NIO 处理 Oblivious HTTP 的库。
Oblivious HTTP 是一种协议,允许客户端向服务器发出请求,而服务器无法识别这些请求的来源。来自同一客户端的多个请求也不能被识别为来自同一节点。
使用受信任的中继来防止元数据被用于跟踪目的,同时有效负载被加密以确保只有目标服务器可以访问它。
此库提供了实现 Oblivious HTTP 所需的所有组件。我们计划扩展此项目以提供与 swift-nio 兼容的开箱即用解决方案。
此库引入时支持 Swift 5.8 或更高版本。此库将支持最新的稳定 Swift 版本以及之前的两个版本。
要使用 swift-nio-oblivious-http,请将以下依赖项添加到您的 Package.swift 中
dependencies: [
.package(url: "https://github.com/apple/swift-nio-oblivious-http.git", .upToNextMinor(from: "0.2.1"))
]
然后,您可以将特定的产品依赖项添加到您的目标中
dependencies: [
.product(name: "ObliviousHTTP", package: "swift-nio-oblivious-http"),
]
要序列化二进制 HTTP 消息,请使用 BHTTPSerializer.serialize(message, buffer)
。
要反序列化二进制 HTTP 消息,请使用 BHTTPParser
,使用 append()
添加接收到的数据,然后调用 completeBodyRecieved()
。要读取收到的消息部分,请调用 nextMessage()
。
要封装请求,请从 OHTTPEncapsulation.encapsulateRequest()
开始。类似地,对于响应,请参阅 OHTTPEncapsulation.encapsulateResponse()
。
要解封装接收到的请求,首先可以使用 OHTTPEncapsulation.parseRequestHeader()
读取标头。使用这些标头来启用 OHTTPEncapsulation.RequestDecapsulator
的使用。对于响应,请参阅 OHTTPEncapsulation.decapsulateResponse()
。
还存在其他功能来支持流操作。
该包分为 2 个库。 主要库 OblivousHTTP
提供了实现 Oblivious HTTP 所需的二进制 HTTP 编码。第二个库 ObliviousX
提供了 Oblivious 封装,可以将其应用于二进制 HTTP 或您选择的其他编码。