从通过 webRequest FilterResponseData StreamFilter 传递的 TypedArra



我正在使用Mozilla的webRequest StreamFilter来读取http请求

https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/filterResponseData

https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/StreamFilter/ondata

只要请求未缓存在浏览器中,类型化数组中的解码文本就会正确解码,但是当数据来自缓存时会出现问题。发生这种情况时,这将成为之前成功解码的相同数据的输出:

20180901034956% ~ v a r

这只是一个小样本,字符串非常大。为此,我正在使用带有 UTF-8 编码选项集的 TextDecoder。

经过一些挖掘,我发现缓存的数据类型数组充满了零,因此在读取该字符串的 unicode 时,它会转换为以下内容,我认为字符串中的 null 是空的:

\u0000\u0000\u0000\u0000\u0000\u0000e\u0000\u0000\

u000020180901034956%\u0000\u0000\u0000\u0005\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0014\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00000\u0000\u00000\u0000\u0000\u0000\u0000\u00000\u00000\u0000\u00000\u00000\u00000\u00000\u00000\u00000\u00000\u00000\u00000\u00000\u0000\u00000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\1\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0005 \u0003\u0000\u0001\u0000~ \u0013\u0000\u0000\u0000v\u0000a\U0000R

应用的一个快速"解决方案"是只从类型数组中删除零或从字符串中删除空值,而不了解它如何影响原始数据,导致以下结果:

20180901034956% ~ var

以及相应的 unicode 版本

\u000e20180901034956%\u0005\u0001\u0014\u0002\u0001\u0002\u0005 \u0003

\u0001~ \u0013var

在线搜索其中一些字符显示其中一些是控制字符,现在我完全不知道为什么会发生这种情况 - 除了这是缓存数据 - 以及如何正确解码它。

我尝试过联系 Firefox 的频道寻求帮助,但似乎连续 3 天没有人回答,所以我在这里发布这个问题。

我如何以正确的方式解码缓存数据,任何人都可以解释为什么它像这样显示?未缓存的所有其他数据均已正确解码。

编辑:经过更多的挖掘,我确认数据是从Firefox缓存文件中读取的数据。我能够找到正确的文件,并在其中包含以下信息示例(这是在记事本中打开的):

20180901034956% ~ÿ v a r

"v a r"后面的文本遵循每个字符的相同格式,后跟一个"空格",如果它甚至是一个空格。因此,确认这是从缓存文件传递的数据,那么如何正确解码呢?我相信删除空格不是一个合适的解决方案,因为它也可以删除作为原始数据信息一部分的空格。

编辑2:数据假设如下所示:

变量

后面什么都没有,每个字符之间也没有空格。

看起来这确实是一个 Firefox 错误,我已经使用的解决方法是自己"修复"这个问题的唯一方法,直到 Firefox 决定自行纠正问题。

忘记添加错误报告的链接:https://bugzilla.mozilla.org/show_bug.cgi?id=1530408#c6

看起来这个错误将在Firefox 76中修复。

最新更新