在字节数组上模仿 'gzip' 内容编码
Imitate 'gzip' content encoding on byte array
我正在开发一个使用 .pbf 文件的应用程序,这些文件使用来自 PHP 的 header 'Content-Encoding: gzip' 从服务器发送到 Mapbox GL JS,现在我正在尝试模拟存储中的图块具有相同的行为。
现在我无法以类似于我尝试从 android 的存储中传递图块的方式来执行此操作,因为每当我将 header 添加到响应,它立即拒绝并显示以下拒绝消息:
{
"config": {
"transformRequest": {},
"transformResponse": {},
"timeout": 0,
"xsrfCookieName": "XSRF-TOKEN",
"xsrfHeaderName": "X-XSRF-TOKEN",
"maxContentLength": -1,
"headers": {
"Accept": "application/json, text/plain, */*"
},
"method": "get",
"Access-Control-Allow-Origin": "*",
"Accept": "*/*",
"url": "http://localhost:8080/get-tile/14/8468/5344"
},
"request": {
"statusText": "",
"status": 0,
"responseURL": "",
"response": "",
"responseType": "",
"responseXML": null,
"responseText": "",
"upload": {
"ontimeout": null,
"onprogress": null,
"onloadstart": null,
"onloadend": null,
"onload": null,
"onerror": null,
"onabort": null
},
"withCredentials": false,
"readyState": 4,
"timeout": 0,
"onprogress": null,
"onloadstart": null,
"onloadend": null,
"onload": null,
"onabort": null
}
}
当我不使用header;响应发送正常并显示仍然压缩的数据,Mapbox GL JS 不理解。现在,我尝试使用 GZIPOutputStream 和 GZIPInputStream 来读取文件并将其压缩以获得正确的数据,但它一直向我显示与文件本身的 header 不正确或不正确相关的错误属于 GZIP 类型(考虑到使用 Content-Encoding: gzip
作为支持 header 从 PHP 提供相同的二进制 blob 会很奇怪)。
到目前为止,我尝试过的是:
- 添加 header(这会导致请求被上面的 json 拒绝)
- 使用不同的输入流/输出流来读取数据
- gzdecompress / gzdecode 在 PHP 端(运行 PHP 7 on WampServer x64 on Windows 10,这会引发数据错误)
- 使用十六进制编辑器检查文件以查看工作磁贴和非功能压缩磁贴之间的区别Link to a drive with the files, both from the same server one with the Header on and one with it off
- 尝试在 javascript 端进行 gzip 解压缩(这导致几乎没有任何反应)
我正在修改后的 Mapbox GL JS 环境中使用 axios 检索图块,直接从服务器加载图块并完美绘制地图数据。但是,当通过 http 服务器从本地存储提供服务时,它将无法工作。
问题是输出时文件附加了 6 个字节,导致 Gzip header 被隐藏。之后,用gzip编码返回完美无缺
我正在开发一个使用 .pbf 文件的应用程序,这些文件使用来自 PHP 的 header 'Content-Encoding: gzip' 从服务器发送到 Mapbox GL JS,现在我正在尝试模拟存储中的图块具有相同的行为。
现在我无法以类似于我尝试从 android 的存储中传递图块的方式来执行此操作,因为每当我将 header 添加到响应,它立即拒绝并显示以下拒绝消息:
{
"config": {
"transformRequest": {},
"transformResponse": {},
"timeout": 0,
"xsrfCookieName": "XSRF-TOKEN",
"xsrfHeaderName": "X-XSRF-TOKEN",
"maxContentLength": -1,
"headers": {
"Accept": "application/json, text/plain, */*"
},
"method": "get",
"Access-Control-Allow-Origin": "*",
"Accept": "*/*",
"url": "http://localhost:8080/get-tile/14/8468/5344"
},
"request": {
"statusText": "",
"status": 0,
"responseURL": "",
"response": "",
"responseType": "",
"responseXML": null,
"responseText": "",
"upload": {
"ontimeout": null,
"onprogress": null,
"onloadstart": null,
"onloadend": null,
"onload": null,
"onerror": null,
"onabort": null
},
"withCredentials": false,
"readyState": 4,
"timeout": 0,
"onprogress": null,
"onloadstart": null,
"onloadend": null,
"onload": null,
"onabort": null
}
}
当我不使用header;响应发送正常并显示仍然压缩的数据,Mapbox GL JS 不理解。现在,我尝试使用 GZIPOutputStream 和 GZIPInputStream 来读取文件并将其压缩以获得正确的数据,但它一直向我显示与文件本身的 header 不正确或不正确相关的错误属于 GZIP 类型(考虑到使用 Content-Encoding: gzip
作为支持 header 从 PHP 提供相同的二进制 blob 会很奇怪)。
到目前为止,我尝试过的是:
- 添加 header(这会导致请求被上面的 json 拒绝)
- 使用不同的输入流/输出流来读取数据
- gzdecompress / gzdecode 在 PHP 端(运行 PHP 7 on WampServer x64 on Windows 10,这会引发数据错误)
- 使用十六进制编辑器检查文件以查看工作磁贴和非功能压缩磁贴之间的区别Link to a drive with the files, both from the same server one with the Header on and one with it off
- 尝试在 javascript 端进行 gzip 解压缩(这导致几乎没有任何反应)
我正在修改后的 Mapbox GL JS 环境中使用 axios 检索图块,直接从服务器加载图块并完美绘制地图数据。但是,当通过 http 服务器从本地存储提供服务时,它将无法工作。
问题是输出时文件附加了 6 个字节,导致 Gzip header 被隐藏。之后,用gzip编码返回完美无缺