fix headers and worker error handling

This commit is contained in:
SuperMaxusa 2025-04-15 00:00:55 +03:00 committed by Fabian
parent 5f088cc066
commit 4fd2478d67
3 changed files with 10 additions and 9 deletions

View file

@ -162,14 +162,15 @@ async function on_data_http(data)
let response_started = false;
this.net.fetch(fetch_url, opts).then((resp) => {
let resp_headers = new Headers(resp.headers);
resp_headers.delete("content-encoding");
resp_headers.delete("keep-alive");
resp_headers.delete("content-length");
resp_headers.delete("transfer-encoding");
resp_headers.set("x-was-fetch-redirected", `${!!resp.redirected}`);
resp_headers.set("x-fetch-resp-url", resp.url);
resp_headers.set("connection", "close");
["content-encoding", "content-length", "transfer-encoding"].forEach(function(header) {
if(resp_headers.has(header)) {
resp_headers.delete(header);
}
});
this.write(encoder.encode(this.net.form_response_head(resp.status, resp.statusText, resp_headers)));
response_started = true;
@ -240,9 +241,9 @@ FetchNetworkAdapter.prototype.form_response_head = function(status_code, status_
`HTTP/1.1 ${status_code} ${status_text}`
];
headers.forEach(function(value, key) {
for(const [key, value] of headers.entries()) {
lines.push(`${key}: ${value}`);
});
}
return lines.join("\r\n") + "\r\n\r\n";
};

View file

@ -16,7 +16,7 @@ const LOG_SERIAL = true;
const SHOW_LOGS = false;
const server = new Worker(__dirname + "../devices/fetch_testserver.js", { workerData: { port: SERVER_PORT, benchsize: BENCHFILE_SIZE } });
server.onerror = (e) => { throw new Error("server: " + e); };
server.on("error", (e) => { throw new Error("server: " + e); });
const emulator = new V86({
bios: { url: __dirname + "/../../bios/seabios.bin" },

View file

@ -15,7 +15,7 @@ const { V86 } = await import(TEST_RELEASE_BUILD ? "../../build/libv86.mjs" : "..
const SHOW_LOGS = false;
const server = new Worker(__dirname + "fetch_testserver.js", { workerData: { port: SERVER_PORT, benchsize: 0 } });
server.onerror = (e) => { throw new Error("server: " + e); };
server.on("error", (e) => { throw new Error("server: " + e); });
function wait(time) {
return new Promise((res) => setTimeout(res, time));