Имитация кодирования содержимого 'gzip' в байтовом массиве
Я разрабатываю приложение, которое использует файлы.pbf, которые отправляются с сервера в Mapbox GL JS с использованием заголовка "Content-Encoding: gzip" из PHP, и сейчас пытаюсь эмулировать то же поведение для плиток из хранилища.
Теперь я не могу сделать это таким же образом, как я пытаюсь пройти через тайлы из хранилища андроида, потому что всякий раз, когда я добавляю заголовок к ответу, он немедленно отклоняется со следующим сообщением отклонения:
{
"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
}
}
Когда я не использую заголовок; ответ отправляет нормально и показывает все еще сжатые данные, которые Mapbox GL JS не понимает. Теперь я попытался использовать GZIPOutputStream и GZIPInputStream, чтобы прочитать файл и дефлировать его, чтобы получить правильные данные, но он продолжает показывать мне ошибки, связанные либо с неправильным заголовком самого файла, либо с отсутствием GZIP тип (что.. было бы странно, если бы вы использовали тот же двоичный двоичный объект из PHP, используя Content-Encoding: gzip
в качестве вспомогательного заголовка работает нормально).
Пока что я попробовал следующее:
- Добавьте заголовок (в результате запрос будет отклонен с помощью json выше)
- Используйте разные входные / выходные потоки для чтения данных
- gzdecompress / gzdecode на стороне PHP (запуск PHP 7 на WampServer x64 в Windows 10 приводит к ошибке данных)
- Проверьте файлы с помощью шестнадцатеричного редактора, чтобы увидеть разницу между работающей плиткой и неработающей сжатой плиткой. Ссылка на диск с файлами, как с одного сервера, с включенным заголовком, так и с выключенного.
- Попытка распаковать gzip на стороне javascript (в результате практически ничего не происходит)
Я извлекаю плитку, используя axios, в модифицированной среде Mapbox GL JS, загружая плитку прямо с сервера, работаю и отлично рисую данные карты. Однако, когда он подается из локального хранилища через http-сервер, он не будет работать.
1 ответ
Проблема заключалась в том, что при выводе файлов к файлам добавлялось 6 байт, что приводило к скрытию заголовка Gzip. После этого возвращение с кодировкой gzip работало отлично.