<img src=“;数据:..使用gzip文件

<img src="data:... with gzipped file

本文关键字:使用 gzip 数据 文件 lt img src      更新时间:2023-09-26

这可能更像是一个理论问题,但仍然如此。

使用内联base64数据在图像源参数中传递它非常简单。我们是这样做的:<img src="data:image/png;base64,[base64 string]" />

但是,如果这个base64字符串中表示的数据被gzip映射了呢?有没有办法告诉浏览器这件事?当通过添加Content-Encoding: gzip头从HTTP服务器加载图像时,可以简单地完成这一操作。但是内联方法可能吗?

我找不到任何有关这方面的信息。我看到的唯一解决方案是使用JavaScript"unbase64"数据,"gunzip"它,然后再次"base64"它,并将它放在src属性中。

但这似乎不是一个好的解决方案。。。

浏览器支持传输级别的gzip编码(即HTTP)。他们在数据级别上没有任何支持。

如果你要提供一个基于base64的gzipped数据,那么它就不是image/png,而是application/x-gzip,浏览器将无法处理它,因为它会试图将其解码为图像。

如果你这样做,但使用正确的MIME类型,那么浏览器仍然不知道该怎么处理它,因为它不是图像格式,也不支持解码gzip数据,然后猜测里面的数据是什么格式。

但是,当我们使用内联base64数据时,我们没有头。

数据必须来自某个地方。它通常嵌入在HTML文档中(在这种情况下,当通过HTTP发送时,整个文档可以被压缩),或者从JavaScript本地生成(在这种情形下,压缩它只是为了立即解压缩是没有意义的,没有网络可以发送它,因此压缩不会提高性能)。

"如果你要提供一个基于base64的gzip映射数据,那么它就不是image/png,而是application/x-zip"

那么呢?

在检测到文件已经完成解压缩后,用javascript修复标题,使其了解数据,最终您将得到img src=data:blah-blah-

我不知道为什么我们仍然担心7位和EBCDIC链接。这是无稽之谈,图片:data/png;gzip,。。。这不是火箭科学。

它删除单词"gzip",并将is替换为经过gzip处理的字符串。

有人窃听维瓦尔迪人,他们总是把东西放在第一位。