Двоичные данные из PHP в Angular 6 через http

цель состоит в том, чтобы сделать http-запрос (пустым) из Angular 7 в PHP для получения двоичных данных в Angular для использования с protobuf3.
Более конкретно, двоичные данные (закодированы, как описано здесь: https://developers.google.com/protocol-buffers/docs/encoding) в PHP (исходный код) инкапсулируется в строку, а целью в Angular является Uint8Array.

Поэтому у меня в настоящее время есть следующий рабочий код:

PHP-код (простой корневой шаблон ProcessWire):

header('Content-Type: application/b64-protobuf');
…
echo base64_encode($response->serializeToString());

Угловой:

let res = this.httpClient.get(`${this.API_URL}`, { responseType: 'text' });
res.subscribe((data) => {

let binary_string = atob(data);
let len = binary_string.length;
let bytes = new Uint8Array(len);
for (let i = 0; i < len; i++) {
bytes[i] = binary_string.charCodeAt(i);
}

let parsedResponse = pb.Response.deserializeBinary(bytes)
})

Как вы можете видеть, я кодирую данные как base64 перед отправкой. Таким образом, это не так эффективно, как могло бы быть, потому что base64 уменьшает количество информации на символ. Я уже довольно много пытался заставить двоичную передачу работать, но в конце концов данные всегда повреждены, то есть переменная bytes не совпадает с аргументом base64_encode,
Но все же, согласно некоторым источникам (например, PHP написать бинарный ответ, Двоичные данные повреждены из php в AS3 через http (никто не говорит, что это было бы невозможно)) это должно быть возможно.

Поэтому мой вопрос: что нужно изменить, чтобы напрямую передавать двоичные данные? Это вообще возможно?

Что я пробовал?

  • используя разные заголовки, такие как
    header('Content-Type:binary/octet-stream;'); или используя Blob в Angular.
  • Я тоже пытался удалить base64_encode из кода PHP и atob
    из Углового кодекса. Результат: содержание данных изменяется между serializeToString а также deserializeBinary(bytes), что не желательно.
  • Я проверил на возможные символы раньше <?php

Характеристики:

  • PHP 7.2.11
  • Apache 2.4.35
  • Угловой 7.0.2

Если необходима дополнительная информация, просто дайте мне знать в комментариях. Я готов предоставить это. Благодарю.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …