Обработка ответа XMLHttpRequest с большими данными

Используя Chrome, я настраиваюXMLHttpRequest:

const xhr = new XMLHttpRequest();
xhr.open(method, url, true);
...
xhr.onreadystatechange = () => {
    if (xhr.readyState === XMLHttpRequest.DONE) {
      if (isStatusCodeSuccess(xhr.status)) {
        // handle response;
      } else {
        // handle error
      }
    }
};
xhr.addEventListener('progress', event => {
    console.log(event.loaded, event.target.response.length);
});
xhr.send(data);

В какой-то момент я запрашиваю некоторые данные JSON, общий размер которых составляет около 295 МБ без сжатия / 5,8 МБ сжатых. К сожалению, когда следующий код вызывается в случае успеха, ответ является пустой строкой.

Используя прослушиватель событий прогресса, я вижу, что ответ корректно обрабатывается порциями, вплоть до определенной точки. Вот выдержка из журналов консоли, которые он производит:

32768 32768
4639135 4639135
7376739 7376739
11525403 11525403
...
261489180 261489180
264684030 264684030
267880247 267880247
271037819 0
274232442 0
277428774 0
...
304018210 0
309230213 0
310445469 0

Похоже, что в Chrome есть ограничение на строку / распределение, но я не получаю никакой ошибки.

На Firefox я получаю следующую ошибку:InternalError: allocation size overflow.

Я попытался сохранить результат как он есть, но я не могу «очистить» объект Xml Http Request, поскольку атрибуты доступны только для чтения.

Какое официальное ограничение для переменных в браузерах? Я не мог найти официальный ответ, только некоторые экспериментальныеОграничение размера строки Javascript: 256 МБ для меня - это одинаково для всех браузеров?

Есть ли способ обойти эту проблему и обработать большой результат POST? кроме использования WebSocket.

Я думаю о:

определенный тип контента для потоковой передачи данных, напримерapplication/octet-streamконкретный параметр для обработки данных по чанку, напримерспектр заголовок, хотя содержимое, которое я извлекаю, не является статичным (оно меняется со временем)известный алгоритм для уменьшения длины ответа JSON, где я могу разархивировать фрагмент путем фрагментирования данных, чтобы избежать нарушения вышеуказанного ограничения

Ответы на вопрос(1)

Ваш ответ на вопрос