获授权NDJSON导出在一条线路正常,换一种读取块大小却失败。若客户端把每次read当一条JSON,记录跨两次读取、多条一起抵达或UTF-8字符横跨字节缓冲时,就可能暴露问题。
验收一个不变量:同一份有效字节,无论怎样分成读取块,都应产生相同获接纳记录。本文提供受控解析器及代理路径测试方案,不代表已执行结果或98IP流式行为保证。
一、约定记录格式与完成标准
确认目标真的返回NDJSON,而非整个JSON数组或SSE。NDJSON规范使用UTF-8,每个JSON文本后跟换行,解析器接收LF和CRLF分隔。空行、畸形JSON及大小上限如何处理,应明确记录。
本测试采用严格换行结尾样本。完整JSON值缺少约定末尾分隔符,按此规则属于分帧失败,但不能单凭它证明网络截断;不完整JSON片段是另一种失败,两者都须区别于成功结束。
语法与完整性分开。已知小型有限样本应核对预期记录ID及值;真实API有文档化清单或完成记录时按其规则验收,不虚构完成标志,也不假设每条流都有已知总数。
二、一份字节样本,多种分块计划
- 创建三条无害合成记录,各有唯一已知ID,含一个非ASCII值和一个转义换行字符串,而非JSON文本内真实换行。
- 按约定UTF-8与分隔政策序列化一次,保存精确字节及预期解析值作为本地参考。
- 将同一字节分别按一次读取、多个小块及刻意不等长块送给消费者。
- 边界放在多字节字符内部、JSON标记内部、CRLF变体的CR与LF之间,以及一次含多条完整记录之后。
这些是受控客户端样本,不承诺TCP包或浏览器暴露块的边界。不能加延迟就假设强制了某种分块。先用确定分块检查消费者,再独立观察真实网络路径。
三、保留解码及行缓冲状态
使用能跨读取保留状态的增量UTF-8解码器,或运行时支持的合适文本解码流。每块独立解码可能破坏跨块字符。流结束时刷新解码器,解码错误按明确严格度政策处理,不能直接算成功内容。
将解码文本追加到待处理行缓冲,只提取完整分隔行,逐条按约定解析,未结束尾部留待下次读取。一次read可以产出零条、一条或多条。不能遇到每个回车就盲拆,须处理跨读取的CRLF组合。
限定缓冲字节、行长、总接纳记录及测试总时长。永远不发分隔符的流不能无限占内存。字节与字符限制须明确命名,非ASCII数据下两者不等价。
四、代理路径对照先分清表示层
用小型授权端点提供自有样本,基准和代理线路采用同一客户端及格式约定。解析前检查状态与实际内容表示:HTTP 200背后的登录HTML不是NDJSON。
98IP动态住宅IP产品页用于确认授权数据线路测试的产品,运行前核对当前账号选项;已公布接入方法可查API配置页。两者不保证特定读取块大小,也不定义目标记录结构。
记录哈希或计数对应哪层字节。HTTP客户端自动解压时,应拿交给消费者的解压后表示与样本对照,不与压缩传输字节混比。表示字节相同、只是分块不同,接纳ID及值就不应变化。
五、部分产出与完整验收分开
EOF时刷新解码,按既定规则只处理有效完整行,并检查剩余缓冲。畸形尾部、缺分隔符、读取错误、超限停止或预期记录缺失都明确标记,不能因为前面能解析就扔掉坏尾部。
证据分四栏:收到的表示、解码与分帧结果、记录验证、最终样本完整性。合成用例若两条有效而第三条不完整,应报告两条暂存记录和不完整流,不能计完整导出。
应用应明确是完成后统一提交,还是逐条提交并记录部分状态。有限导出重试须遵循目标批准的恢复与去重规则,不能把重放盲目追加到原部分结果,再把增大的行数当成功。
六、演练HTTP状态看不出的失败
建议本地用例:在EOF切断多字节字符、删末尾分隔符、截断最后JSON值、中间插畸形JSON、超过配置行长。各用例应产生约定错误或不完整结论,不默默接纳整个样本。本文未实际执行这些演练。
有效样本也应只改分块,要求解析结果一致。本地即失败,先修解码或分帧消费者再归因代理;本地分块测试通过但网络表示字节不同,再用脱敏证据检查响应生成、传输及客户端转换。
记录用例ID、样本版本、分隔政策、分块计划或实测读取大小、解码政策、首个失败边界、接纳ID与完成结论。真实数据保持私密,小型合成复现通常比整份客户导出更易审核。
常见问题与验收清单
每次read能直接独立JSON.parse吗?不能,读取边界不是记录边界,应先增量解码并提取完整行。
查看器能正常打开就证明完整吗?不能,前面有效记录可显示,有限导出仍可能不完整。
- 表示、分隔符与EOF政策明确。
- 同字节经受控分块仍生成同记录。
- UTF-8及CRLF状态跨读取保留。
- 缓冲、时长与记录数有界。
- 部分记录与完整导出结论分开。
- 重试和提交不掩盖残尾或制造未跟踪重复。
仅使用自有或明确授权端点、合成数据与少量请求预算,脱敏代理凭据、访问令牌及签名URL,只留必要诊断产物。不从本方案声称实测吞吐、丢失率或业务结果。