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

读取当前入站网页请求的基础资料、标头存在性与有界正文。

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

规范.汉语.md

# 网页入站接口规范 0.8.0

这些函数只读取当前 HTTP 请求,离开本次请求后不能调用。`读取入站方法` 返回宿主接收的方法文字;`读取入站原路径` 返回 URL 的百分号编码路径,不含查询串或片段;`读取入站解码路径` 对该路径严格解码一次百分号和 UTF-8,坏编码时报错;`读取入站标头值` 按 ASCII 不区分大小写的名称读取标头,缺失时返回空字符串。调用方若把路径当作文件名或包名,仍须验证解码后的斜线、控制字符与业务规则。

标头读取不会自动授予调用方使用凭据或向外转发的权限;网络、服务绑定和持久存储仍需独立能力与资源授权。无当前 HTTP 请求时调用失败。当前适配以 Worker 的原生 Request 实现,未来类型化 `豫言操作系统网页服务` 入口接通后可由请求值直接传递同一资料。

## 事件种类

`读取入站事件种类` 返回本次宿主调用的事件种类文字,一次调用内不变。云工宿主当前实际可返回下列取值:

- 携带当前 HTTP 请求:`fetch`(普通请求)、`service-fetch`(经服务绑定送达的请求)、`durable-fetch`(送达持久对象的请求)。本包其余读取函数只能在这三种事件内使用。
- 不携带 HTTP 请求:`queue`、`scheduled`、`email`、`durable-alarm`、`durable-transaction`、`durable-block`、`durable-websocket-message`、`durable-websocket-close`、`durable-websocket-error`、`websocket-open`、`websocket-message`、`websocket-close`、`websocket-error`、`stream-pull`、`stream-cancel`、`html-element`、`html-text`、`html-comments`、`html-doctype`、`html-document-text`、`html-document-comments`、`html-end`、`html-end-tag`、`workflow`、`workflow-step`、`workflow-rollback`。

其他宿主只返回自己实际提供的种类,宿主新增种类时须同步更新云工宿主的事件说明。应用只应依赖上述已文档化的取值;遇到不认识的取值,须按“没有 HTTP 请求的事件”处理,不得当作 `fetch`。

## 查询参数、来源与同源网址

`读取入站查询参数` 按浏览器 URL 查询参数规则读取第一个同名值,已经百分号解码;无该参数时返回空字符串。`入站查询参数存在` 按同一规则判断参数名是否出现,`?after=` 这样的空值仍返回阳,使应用能区分缺失与空值。`读取入站来源` 返回 URL 标准的 `origin`,供应用比较同源请求;它不代表已经完成跨站请求授权。`构造入站同源网址` 接受新绝对路径、待设置的键值列表及待删除的键列表;空路径保留原路径。宿主复制当前请求 URL,先删后设,未指定参数原样保留,并返回同源绝对网址,不发起请求。新路径须以单个 `/` 起首,拒绝 `//`、反斜线、控制字符、`?` 和 `#`;查询键和值由宿主编码。设置或删除列表各最多 16 项,超限失败。

`读取入站主机名` 返回当前请求 URL 的 hostname,依 URL 规则规范化为小写且不含端口。`读取入站原查询` 返回原请求的查询串,非空时保留开头 `?`;它不进行参数解码,适用于保留现有查询的跳转。

## 标头存在性(0.7.0 新增)

`入站标头存在` 接受一个标头名称,返回当前请求是否含该标头:只要标头出现即为阳,值为空字符串也算出现;名称不区分大小写(`headers.has` 语义)。它补足 `读取入站标头值` 无法区分“缺失”与“空值”的缺口。名称必须是 RFC 9110 令牌字符(数字、字母与 ``!#$%&'*+-.^_`|~``)组成的 1 至 256 字节字符串,否则属于违规,抛出可捕获的豫言异常,消息为“入站标头名称无效”。

## 有限正文读取(0.7.0 新增)

`读取入站有限正文文字`(宽松 UTF-8 解码)、`读取入站有限正文严格文字`(严格 UTF-8 解码)与 `读取入站有限正文字节`(原始字节)读取当前请求的正文,且从不缓冲超过所给上限。参数是字节上限,须在 1 至 16777216(16 MiB)之间,越界属于违规,抛出可捕获的豫言异常(“入站正文字节上限须在 1 至 16777216”)。返回二元组(状态,结果),状态是整数:

| 状态 | 含义 | 结果 |
| --- | --- | --- |
| 0 | 成功,正文不超过上限 | 文字或字节,可以为空 |
| 1 | 正文超过上限 | 空 |
| 2 | 没有正文:方法为 GET 或 HEAD,或宿主没有为该请求提供正文流 | 空 |
| 3 | 正文已被读取:本包任一读取函数、宿主的其他读取,或其他读取器已锁定正文流 | 空 |
| 4 | 仅严格文字:正文不是有效 UTF-8 | 空字符串 |

判定顺序固定:先验证参数;再判断 2 与 3;随后若请求的 `Content-Length` 全由 1 至 18 位十进制数字组成且已超过上限,或长达 19 位以上(必然超过任何上限),立即返回 1 而不读取任何字节;其余形态的 `Content-Length` 一概忽略,只按流式计数判断。读取时逐块累计字节数,一旦超过上限就取消读取流并返回 1,因此宿主最多持有已接受的字节再加使总数越界的那一块,不会继续读取更多数据;取消时上游的取消回调即使失败也被吞掉,仍返回 1。空正文流返回状态 0 与空结果。除状态 2、3 与由 `Content-Length` 预判得到的 1 之外,读取会消费或取消请求体,之后同一请求再读得到状态 3。

宽松文字的解码与 `TextDecoder` 整块解码的默认行为相同:非法序列各替换为 U+FFFD;只有整个正文开头的 BOM 被剥除,正文中间的 U+FEFF 原样保留;多字节字符跨块也能正确解码,且结果与如何分块无关。因每个非法字节都变成 3 字节的 U+FFFD,解码后文字可能长于字节数;若超过 16 MiB,属于违规,抛出可捕获的豫言异常(“宽松解码后的文字超过 16 MiB”)。严格文字按 fatal 解码:过长编码、代理对编码、越界码点、孤立的延续字节与末尾残缺序列都算非法,得状态 4,且发现后立即取消读取流;合法的正文与宽松文字的结果相同。字节接口原样返回全部字节,BOM 与零字节都保留。读取流本身失败(如连接中断)是平台故障,抛出含原因的可捕获异常(“读取入站正文失败:…”)。

## JSON 正文

`读取入站癸象正文文` 从当前请求读取并解析一次 JSON 正文,返回可由豫言 `癸象解析` 再次解析的规范化 JSON 文字。0.7.0 起它先按上述规则以 2 MiB 上限读取字节(不再无界读取),再以 UTF-8 解码(剥除 BOM)并按 JSON 解析;对合法输入的行为不变,数字仍沿用宿主 JSON 解析的精度,规范化后的文字也不得超过 2 MiB。下列情形都是可捕获的豫言异常,且不会让宿主异常越过 Wasm 边界:正文超过 2 MiB(“入站 JSON 正文超过 2 MiB”)、没有正文、正文已被读取、JSON 无效或嵌套过深(消息以“入站 JSON 正文无效:”起首并含平台报告的原因)。此过渡文字边界将在类型化网页处理入口接通后由请求值替代。

## 有限 JSON 正文(0.8.0 新增)

`读取入站有限癸象正文文 上限` 是 `读取入站癸象正文文` 的有界、可分状态版本:不抛异常地区分各种正文问题,并让应用自己定字节上限(旧函数固定为 2 MiB,且所有失败都是异常)。它先按 `读取入站有限正文严格文字` 的全部规则读取正文(上限 1 至 8388608,即 8 MiB,越界属于违规,抛出可捕获的豫言异常“入站 JSON 正文字节上限须在 1 至 8388608”;判定顺序、`Content-Length` 预判、逐块累计与取消、状态含义都相同),严格按 UTF-8 解码(BOM 剥除),再交宿主的 `JSON.parse` 校验并由宿主 `JSON.stringify` 写成规范化文字。返回二元组(状态,文字):

| 状态 | 含义 | 文字 |
| --- | --- | --- |
| 0 | 成功 | 规范化 JSON 文字(去冗白;数字按 ECMAScript 书写;重复键只保留最后一次的值并停在第一次出现的位置;整数样式的键按 JavaScript 对象规则排在最前) |
| 1 | 正文超过上限 | 空 |
| 2 | 没有正文(GET、HEAD 或宿主没有提供正文流) | 空 |
| 3 | 正文已被读取或读取流已被锁定 | 空 |
| 4 | 正文不是有效 UTF-8 | 空 |
| 5 | 不是有效 JSON(语法错、畸形转义、嵌套过深等) | 平台报告的原因(供诊断,不宜原样回给客户端) |

与 `读取入站癸象正文文` 的区别:(1)上限由调用方给出,最大 8 MiB(旧函数 2 MiB);(2)状态 1 至 5 用返回值表示,应用可以分别回应 413、400 等,不必解析异常消息;(3)状态 0 的文字保证可安全交给豫言 `癸象解析`——畸形转义、重复键与非法 UTF-8 已在宿主一侧排除或规范化,不会使 Wasm 不可捕获地中止;(4)文字长度不再单独限制为 2 MiB,但受上限约束的原始字节至多 8 MiB,规范化后至多略多(数字的 `e+` 写法可使每个数字多一个字节),仍远小于宿主与 Wasm 之间 16 MiB 的交换缓冲。同一请求只能读一次正文;与本包其他读取函数混用时,后读者得状态 3。应用仍须自行校验 `Content-Type` 并检查顶层值的类型(本函数不要求顶层是对象)。

一致性样例(0.8.0 新增):

| 情境 | 必须观察到 |
| --- | --- |
| 上限 1000,正文 `{ "a" : 1 , "b" : [ 2 ] }` | (0,`{"a":1,"b":[2]}`) |
| 正文 `{"a":1,"b":2,"a":3}` | (0,`{"a":3,"b":2}`) |
| 正文 `{"b":1,"2":2,"1":3}` | (0,`{"1":3,"2":2,"b":1}`) |
| 正文 `{"a":"\u4e2d\/"}`(含 `\u4e2d` 与 `\/`) | (0,`{"a":"中/"}`) |
| 正文 `{"a":1e21}` | (0,`{"a":1e+21}`) |
| 正文 `{"a":"\x"}` 或 `{bad` 或空正文的 POST(真实 workerd 上空流) | (5,非空原因) |
| 正文 `{"a":1}` 恰好等于上限;上限减一 | (0,…);(1,空) |
| 声明 `Content-Length` 超过上限 | (1,空),一个字节也不读 |
| GET 请求 | (2,空) |
| 正文已被本包任一读取函数读过 | (3,空) |
| 正文单字节 `ff` | (4,空) |
| 上限 0 或 8388609 | 抛出可捕获的异常 |

违规:标头名称无效、上限越界、宽松解码后的文字超限。业务情形:有限正文读取的状态 1 至 4,用返回值表示。平台故障:读取流失败、当前没有 HTTP 请求,均抛出异常;JSON 正文的各种失败一律抛出异常。

## 跨宿主一致性

浏览器、Node.js 与原生宿主若实现本包,也必须给出相同的状态划分、判定顺序与限额;可观察语义以下列样例为准。

| 情境 | 必须观察到 |
| --- | --- |
| 上限 8,正文 8 字节分三块到达 | (0,该 8 字节) |
| 上限 7,同一正文 | (1,空),读取流被取消,读到越界块后不再拉取 |
| 声明 `Content-Length: 11`,上限 10 | (1,空),一个字节也不读 |
| GET 请求或没有正文的 POST | (2,空);真实 workerd 上没有正文的 POST 也可能得(0,空)(请求对象仍带一个空流),应用应把这两种结果都当作“没有正文” |
| 正文已被读过的请求 | (3,空);同一请求连续读两次,第二次为 3 |
| 正文为单字节 `ff` | 宽松:(0,`U+FFFD`);严格:(4,空字符串) |
| 正文 `EF BB BF 68 69` | 文字:(0,`hi`);字节:(0,五个原始字节) |
| 上限 0 或 16777217 | 抛出异常 |
| 上限 16777216 的 16 MiB 正文 | (0,全部字节);再多一个字节得 1 |
| 请求头 `X-Empty:`(空值) | `入站标头存在` 对 `x-empty` 得阳,对缺失名得阴 |
| JSON 正文 `{bad` | `读取入站癸象正文文` 抛出可捕获异常,消息含 SyntaxError 一类的原因 |

## 不做什么

本包不无界读取正文,不解压 `Content-Encoding`,不解析表单或 multipart,不校验 `Content-Type`,不读取或暴露 Request、Headers、流等宿主对象,也不枚举全部标头。需要这些能力时应另立接口。

## 补充:标头名校验与 JSON 正文规范文(独立审查后修订)

- 旧函数 `读取入站标头值` 的名称不合令牌规则(含空格、冒号、控制字符、非 ASCII、超过 256 字节)时,抛可捕获的「入站标头名称无效」,与 `入站标头存在` 一致,不再让宿主 `Headers.get` 的 TypeError 穿出。
- `读取入站癸象正文文` 返回宿主规范化后的 JSON 文字(去冗白、数字按 ECMAScript 书写),不再经癸象解析与表示往返:大数组不再栈溢出,超过 2^53 的整数与 `1e21` 这类数值不再被回绕、截断或拒绝。应用再用癸象解析这段文字时,仍受癸象数值模型(64 位整数、六位小数表示)的限制。

规范.文言.md

# 网页入站公约 0.8.0

诸术惟读当前 HTTP 请,离此请不可用。`读取入站方法` 返所受之法;`读取入站原路径` 返未析百分号之径,无查询与片段;`读取入站解码路径` 严析一次百分号与 UTF-8,坏码则败;`读取入站标头值` 依 ASCII 不辨大小写之名取头,无则空文。客若以径为档名或包名,仍须验解后斜线、控字符及己业务之规。

读头不自授凭据使用或向外转请之权;网络、服务与久存另须能力及资源授权。无当前 HTTP 请而调用则败。今适配借 Worker Request;俟类型化网页服务入口接通,可自请求值授同义资料。

## 事类

`读取入站事件种类` 返本次宿主调入所自之事类文,一调之内不变。云工宿主今所实返者如下:

- 载当前 HTTP 请者:`fetch`(常请)、`service-fetch`(由服务绑定而至之请)、`durable-fetch`(至久物之请)。本包余术惟于此三事之内可用。
- 不载 HTTP 请者:`queue`、`scheduled`、`email`、`durable-alarm`、`durable-transaction`、`durable-block`、`durable-websocket-message`、`durable-websocket-close`、`durable-websocket-error`、`websocket-open`、`websocket-message`、`websocket-close`、`websocket-error`、`stream-pull`、`stream-cancel`、`html-element`、`html-text`、`html-comments`、`html-doctype`、`html-document-text`、`html-document-comments`、`html-end`、`html-end-tag`、`workflow`、`workflow-step`、`workflow-rollback`。

他宿主惟返己所实有之类;宿主增类,须并更云工宿主之事类说。客惟当依上列已载之值;遇不识之值,当以「无 HTTP 请之事」待之,不得视同 `fetch`。

## 查询、来源与同源网址

`读取入站查询参数` 循浏览器 URL 查询之法,取首个同名之值,已析百分号;无则空文。`入站查询参数存在` 察同名之参有无,值空亦为有。`读取入站来源` 返 URL 所定之协议、主机与非默认端口,可供同源之比,不自授跨站之权。`构造入站同源网址` 受新绝对径、待设键值列与待删键列;空径守原。宿主复制当前请之网址,先删后设,余参皆留,返同源绝对址,不发请。新径须单一 `/` 起首,拒 `//`、反斜线、控字符、`?`、`#`;键值由宿主编码。设与删各至多十六项,逾限则败。

`读取入站主机名` 取当前请之主机名,循 URL 之规归小写,不含端口。`读取入站原查询` 取原查询文,有则含首 `?`,无则空;不析参数,可供改址保留原查询。

## 头之有无(0.7.0 新增)

`入站标头存在` 受一头名,返当前请有无此头:头一出现即为阳,值空亦为出现;名不辨大小写(同 `headers.has`)。此补 `读取入站标头值` 不能辨「无」与「空」之缺。名须为 RFC 9110 令牌字(数、字母及 ``!#$%&'*+-.^_`|~``)所成一至二五六字节之文,否则为违约,报可捕之事故,辞曰「入站标头名称无效」。

## 有限读正文(0.7.0 新增)

`读取入站有限正文文字`(宽解 UTF-8)、`读取入站有限正文严格文字`(严解 UTF-8)与 `读取入站有限正文字节`(原字节)读当前请之正文,而蓄积永不逾所授之限。参数为字节之限,须在一至一六七七七二一六(十六 MiB)之间,越界为违约,报可捕之事故(辞曰「入站正文字节上限须在 1 至 16777216」)。返二元组(状,果),状为整数:

| 状 | 义 | 果 |
| --- | --- | --- |
| 0 | 成,正文不逾限 | 文或字节,可空 |
| 1 | 正文逾限 | 空 |
| 2 | 无正文:法为 GET 或 HEAD,或宿主未予此请以正文之流 | 空 |
| 3 | 正文已被读:本包任一读术、宿主他读,或他读器已锁其流 | 空 |
| 4 | 惟严解之文:正文非有效 UTF-8 | 空文 |

断之序恒定:先验参数;次辨二与三;次若请之 `Content-Length` 全为一至十八位十进数字而已逾限,或长达十九位以上(必逾任何限),则径返一,不读一字节;其余形之 `Content-Length` 一概不理,惟以流中计数断之。读时逐块累计字节,一逾其限,即废读取之流而返一,故宿主至多蓄已受之字节与使总数越界之一块,不复多读;废时上游取消之回调纵败亦吞之,仍返一。空之正文流返状零与空果。除状二、状三及由 `Content-Length` 预断所得之一外,读必耗或废请之体,此后同请再读得三。

宽解之文与 `TextDecoder` 整块解之默认行同:非法序列各代以 U+FFFD;惟全正文之首 BOM 剥去,正文中间之 U+FEFF 原样存之;多字节之字跨块亦能正解,果与分块之法无涉。因每一非法字节皆化为三字节之 U+FFFD,解后之文或长于字节数;逾十六 MiB 者为违约,报可捕之事故(辞曰「宽松解码后的文字超过 16 MiB」)。严解之文依 fatal 而解:过长编码、代理对编码、越界码点、孤立之续字节及末尾残缺之序列皆为非法,得状四,且一见即废读取之流;正文合法者,其果与宽解同。字节之术原样返全部字节,BOM 与零字节皆存。读流自身败(如连线中断)为平台之故,报含因之可捕事故(辞曰「读取入站正文失败:…」)。

## JSON 正文

`读取入站癸象正文文` 自当前请一次读析 JSON 正文,返可复以豫言 `癸象解析` 析之规范文。自 0.7.0 起,先依上文以二 MiB 为限读字节(不复无界读),后以 UTF-8 解之(剥 BOM)而按 JSON 析之;于合法之入,其行不变,数仍循宿主 JSON 析之精度,规范后之文亦不得逾二 MiB。下列诸情皆为可捕之事故,且不令宿主之异越过 Wasm 之界:正文逾二 MiB(辞曰「入站 JSON 正文超过 2 MiB」)、无正文、正文已被读、JSON 无效或嵌套过深(辞以「入站 JSON 正文无效:」起,并含平台所报之因)。俟类型化网页入口通,当以请求值代此过渡文界。

## 有限 JSON 正文(〇点八所增)

`读取入站有限癸象正文文 上限` 乃 `读取入站癸象正文文` 之有界而分状者:正文诸病不以异常告,而以返值别之;字节之限由客自定(旧术固为二 MiB,败皆为异常)。先依 `读取入站有限正文严格文字` 诸则读正文(限一至八三八八六〇八,即八 MiB,越界为违,告可捕之豫言异常“入站 JSON 正文字节上限须在 1 至 8388608”;判序、`Content-Length` 预断、逐块累计与止读、诸状之义皆同),严解 UTF-8(去字节序记),乃付宿主 `JSON.parse` 验之,由宿主 `JSON.stringify` 书为规范文。返二元「(状态,文)」:

| 状态 | 义 | 文 |
| --- | --- | --- |
| 零 | 成 | 规范之 JSON 文(去冗白;数依 ECMAScript 书;重键惟留末值而居初见之位;类整数之键依 JavaScript 物之则居前) |
| 一 | 正文逾限 | 空 |
| 二 | 无正文(GET、HEAD,或宿主未予体流) | 空 |
| 三 | 正文已读或流已锁 | 空 |
| 四 | 正文非有效 UTF-8 | 空 |
| 五 | 非有效 JSON(语法误、转义畸形、嵌套过深等) | 平台所报之因(以供诊断,不宜原样返客) |

与 `读取入站癸象正文文` 之异:一、限由客授,至多八 MiB(旧术二 MiB);二、状一至五以返值表,客可分别答四百一十三、四百等,不必析异常之辞;三、状零之文保可安付豫言 `癸象解析`——畸形转义、重键、坏 UTF-8 皆已在宿主一侧除去或规整,不致使 Wasm 不可捕地中止;四、文之长不复独限二 MiB,然受限之原始字节至多八 MiB,规范后至多略增(数之 `e+` 写法可使每数增一字节),仍远小于宿主与 Wasm 间十六 MiB 之交换缓冲。同一请正文惟可读一次;与本包他读取术混用,后读者得状三。客仍须自验 `Content-Type` 与顶层值之类(此术不要求顶层为物)。

一致之例(〇点八所增):

| 情境 | 必见 |
| --- | --- |
| 限一〇〇〇,正文 `{ "a" : 1 , "b" : [ 2 ] }` | (零,`{"a":1,"b":[2]}`) |
| 正文 `{"a":1,"b":2,"a":3}` | (零,`{"a":3,"b":2}`) |
| 正文 `{"b":1,"2":2,"1":3}` | (零,`{"1":3,"2":2,"b":1}`) |
| 正文 `{"a":"\u4e2d\/"}`(含 `\u4e2d` 与 `\/`) | (零,`{"a":"中/"}`) |
| 正文 `{"a":1e21}` | (零,`{"a":1e+21}`) |
| 正文 `{"a":"\x"}` 或 `{bad` 或空正文之 POST(真 workerd 上为空流) | (五,非空之因) |
| 正文 `{"a":1}` 恰等于限;限减一 | (零,…);(一,空) |
| 所称 `Content-Length` 逾限 | (一,空),一字节不读 |
| GET 请 | (二,空) |
| 正文已为本包任一读取术所读 | (三,空) |
| 正文单字节 `ff` | (四,空) |
| 限〇或八三八八六〇九 | 告可捕之异常 |

违约:头名无效、限越界、宽解后之文逾限。业务之情:有限读正文之状一至四,以返值表之。平台之故:读流败、无当前 HTTP 请,皆报事故;JSON 正文诸败一律报事故。

## 跨宿主之一致

浏览器、节点与原生宿主若承此包,亦须给同一之状划、断序与限额;可察之义,以下列之例为准。

| 情 | 必见 |
| --- | --- |
| 限八,正文八字节分三块至 | (0,此八字节) |
| 限七,同一正文 | (1,空),读流被废,读至越界之块后不复拉取 |
| 声 `Content-Length: 11`,限十 | (1,空),一字节不读 |
| GET 之请或无正文之 POST | (2,空);真 workerd 上无正文之 POST 亦或得(0,空)(请求之器仍带一空流),应用当并视此二果为“无正文” |
| 正文已被读之请 | (3,空);同请连读两次,次为三 |
| 正文为单字节 `ff` | 宽解:(0,`U+FFFD`);严解:(4,空文) |
| 正文 `EF BB BF 68 69` | 文:(0,`hi`);字节:(0,五原字节) |
| 限〇或 16777217 | 报事故 |
| 限 16777216 而正文十六 MiB | (0,尽字节);多一字节则得一 |
| 请之头 `X-Empty:`(值空) | `入站标头存在` 于 `x-empty` 得阳,于所无之名得阴 |
| JSON 正文 `{bad` | `读取入站癸象正文文` 报可捕事故,辞含 SyntaxError 之类之因 |

## 所不为

此包不无界读正文,不解 `Content-Encoding` 之压,不析表单及 multipart,不验 `Content-Type`,不露 Request、Headers、流等宿主之物,亦不枚举诸头。需此诸能者,当另立公约。

## 补:标头名之验与 JSON 正文之规范文(独立审后修订)

- 旧术 `读取入站标头值` 之名不合令牌之则(含空格、冒号、控字、非 ASCII、逾二五六字节)者,抛可捕之「入站标头名称无效」,与 `入站标头存在` 同,宿主 `Headers.get` 之 TypeError 不复穿出。
- `读取入站癸象正文文` 返宿主规范之 JSON 文(去冗白,数依 ECMAScript),不复经癸象解析与表示往返:大数组不溢栈,逾 2^53 之整数与 `1e21` 之类不被回绕、截断或拒。应用复以癸象解析此文者,仍限于癸象之数模(六十四位整数、六位小数之表)。