当数据被DEFLATE压缩时, service worker推送事件数据为空



我在web应用程序中使用web推送API来侦听来自服务器的更新。这个更新数据是纯JSON格式,但是对于web推送API来说太大了,所以我决定压缩。但是,当我这样做时,serviceworker中推送事件的event.data参数总是空的。这很奇怪,因为应用程序在没有这种压缩的情况下是完全正常的,浏览器也会毫无错误地接收到推送。

下面是我的TS代码,使用pako进行解压缩(尽管它永远不会到达那个点):

(self as any).addEventListener('push', async (event: PushEvent) => {
//This should be the DEFLATE compressed JSON
const raw = pako.inflate(event.data.arrayBuffer()) //errors here due to data null
const payload = JSON.parse(raw) as rideTime[]
console.debug("received push from server")
event.waitUntil(handlePush(payload, event))
});

这是chrome接受推送。在此之后,推送事件被成功调度。

从我能找到的web推送API应该与二进制消息兼容,但我使用的任何压缩算法都会导致这个问题。任何线索都很感激。谢谢。

事实证明,作为web推送负载发送的数据必须是文本。这当然意味着要发送二进制数据,必须对有效负载进行base64编码。没有对压缩数据执行此操作是导致我的问题的原因,与压缩无关。

最新更新