POST HTTP usando XHR con codificación de transferencia fragmentada

Tengo una API REST que acepta un archivo de audio a través de una publicación HTTP. La API tiene soporte para Transfer-Encoding: encabezado de solicitud fragmentado para que el archivo se pueda cargar en pedazos a medida que se crea desde una grabadora que se ejecuta en el cliente. De esta manera, el servidor puede comenzar a procesar el archivo a medida que llega para mejorar el rendimiento. Por ejemplo:

HTTP 1.1 POST ... / v1 / processAudio

Transferencia-Codificación: fragmentada

[Trozo 1 256 bytes] (el servidor comienza a procesar cuando llega)

[Trozo 2 256 bytes]

[Trozo 3 256 bytes]

...

Los archivos de audio suelen ser cortos y tienen un tamaño de alrededor de 10K a 100K. Tengo C # y código Java que funciona, así que sé que API funciona. Sin embargo, parece que no puedo hacer que la grabación y la carga funcionen en un navegador usando JavaScript.

Aquí está mi código de prueba que realiza una POST a localhost con Transfer-Encoding:

<html>
<script type="text/javascript">
  function streamUpload() {
    var blob = new Blob(['GmnQPBU+nyRGER4JPAW4DjDQC19D']);
    var xhr = new XMLHttpRequest();
    // Add any event handlers here...
    xhr.open('POST', '/', true);
    xhr.setRequestHeader("Transfer-Encoding", "chunked");
    xhr.send(blob);
  }
</script>

<body>
  <div id='demo'>Test Chunked Upload using XHR</div>
  <button onclick="streamUpload()">Start Upload</button>
</body>

</html>

El problema es que recibo el siguiente error en Chrome

Se negó a configurar el encabezado inseguro "Transferencia-Codificación"

streamUpload @ uploadTest.html: 14 onclick @ uploadTest.html: 24

Después de mirar la documentación de XHR, todavía estoy confundido porque no habla de encabezados de solicitud inseguros. Me pregunto si es posible que XHR no permita o implementeTransferencia-Codificación: fragmentada para HTTP POST?

He analizado soluciones alternativas utilizando múltiples solicitudes XHR.send () y WebSockets, pero ambas no son deseables porque requerirá cambios significativos en las API del servidor que ya están en su lugar, son simples, estables y funcionan. El único problema es que parece que no podemos PUBLICAR desde un navegador con psedo-streaming a través de Transfer-Encoding: encabezado de solicitud fragmentado.

Cualquier pensamiento o consejo sería muy útil.

Respuestas a la pregunta(1)

Su respuesta a la pregunta