豫言 / 豫言操作系统网页入站适配 @ 0.8.0

以当前 Worker Request 提供入站请求基础资料与有界正文读取。

源码浏览已生成;不能解析的文件以纯文本展示,不表示通过类型检查。

说明.汉语.md

# 网页入站云工适配

从当前 Worker Request 读取方法、原始编码路径、来源、主机名、原查询、查询参数、指定标头及有界正文。适配只向应用交付文字、布尔值、整数与字节串,不把 Request、Headers 或 ReadableStream 句柄交给应用;资源授权由宿主另外检查。

有限正文读取(0.7.0)走通用句柄桥:取得 `request.body` 的读取器,逐块调用 `云工读取流块安全`;每块先经句柄读取 `byteLength` 并与上限比较,超限的块从不拷入 Wasm,此时经安全调用取消读取器(上游取消失败也被吞掉)。字节片按二叉方式两两合并,总复制量为 O(n log k),16 MiB 正文(64 KiB 一块)约 0.15 秒。文字接口用宿主的 `TextDecoder`:宽松模式按流式解码并剥除 BOM,严格模式先用 `fatal: true` 的解码器逐片校验;单块超过 1 MiB 时先在宿主侧用 `subarray` 分片,使每次跨越值桥的数据都远小于桥的 16 MiB 交换上限。`读取入站癸象正文文` 先按 2 MiB 有界读取,再对字节构造 `Response` 并用 `云工调用方法安全` 调 `json`,因此坏 JSON、超限、无正文与已读取都成为可捕获的豫言异常;合法输入的结果不变。

0.8.0 新增 `读取入站有限癸象正文文`:与 `读取入站癸象正文文` 共用读取与 `Response.json` 安全调用的做法,但先以 `入站读取有限正文块` 按调用方给的上限(至多 8 MiB)严格读取字节,各种正文问题用状态 1 至 5 返回而不抛异常;状态 0 的文字是宿主 `JSON.stringify` 写出的规范化文字,畸形转义与重复键已被宿主排除,交给豫言 `癸象解析` 是安全的。

所需宿主能力:通用句柄桥、流读取(`云工读取流块安全`、`云工取消流读取器` 一类)、字节句柄与流式解码,不需要新的宿主原语;所需平台:Web Streams、支持 fatal 的 `TextDecoder`、`Response.json`、`Headers.has`。本适配为普通编译器可加载的过渡包;构建前用接口检查器核对签名。

说明.文言.md

# 网页入站云工适配

自当前 Worker Request 取法、未解码之径、来源、主机名、原查询、查询参、所指头值及有界之正文。适配惟以文、爻、整数与字节串授客,不以 Request、Headers 或 ReadableStream 之柄授客;资源之权另由宿主核之。

有限读正文(0.7.0)行通用句柄桥:得 `request.body` 之读器,逐块调 `云工读取流块安全`;每块先由句柄读其 `byteLength` 而较之于限,逾限之块永不抄入 Wasm,是时以安全调用废读器(上游取消纵败亦吞之)。字节片两两并之,总抄为 O(n log k),十六 MiB 之正文(每块六十四 KiB)约需〇点一五秒。文字诸术借宿主之 `TextDecoder`:宽解者流式而解,去其 BOM;严解者先以 `fatal: true` 之解码器逐片验之;单块逾 1 MiB 者,先于宿主以 `subarray` 分片,使每次越值桥之数远小于桥之十六 MiB 交换之限。`读取入站癸象正文文` 先以二 MiB 为限而读,复以字节造 `Response`,用 `云工调用方法安全` 调 `json`,故坏 JSON、逾限、无正文、已被读,皆为可捕之事故;合法之入,其果不易。

〇点八增 `读取入站有限癸象正文文`:与 `读取入站癸象正文文` 同用读取与 `Response.json` 安全调用之法,然先以 `入站读取有限正文块` 依客所授之限(至多八 MiB)严读字节,诸病以状一至五返而不抛异常;状零之文乃宿主 `JSON.stringify` 所书之规范文,畸形转义与重键皆已为宿主所除,付豫言 `癸象解析` 无虞。

所需宿主之能:通用句柄桥、流读(`云工读取流块安全`、`云工取消流读取器` 之类)、字节句柄与流式解码,无须新宿主原语;所需平台:Web Streams、支持 fatal 之 `TextDecoder`、`Response.json`、`Headers.has`。此适配为旧编译器可载之过渡包;构前当以接口检查器核其签。