xhr.upload.onload
, это лишь значит, что сервер получил все пересылаемые данные от браузера, а когда ему отвечать, зависит лишь от логики обработки запроса.let xhr = new XMLHttpRequest();
xhr.open("post", "/");
xhr.upload.onprogress = function(event) { console.log(`Загружено ${event.loaded} из ${event.total}`);};
xhr.upload.onload = function(event) { console.log(`Загружено ${event.loaded}`);};
xhr.onprogress = function(event) { console.log(`Загружено ${event.loaded} из ${event.total}`);};
xhr.onreadystatechange = function() {console.log(xhr.readyState);};
xhr.onload = function() {console.log("onload");};
xhr.send("Q".repeat(500_000));
'Access-Control-Allow-Origin':'*'
к респонсу. Либо использовать расширение для браузера, которое будет делать то же самое.