Compare commits

...

1 Commits

Author SHA1 Message Date
Cursor Agent
d36345b1d6 Add automatic connection and date headers in HTTP responses 2025-05-29 06:17:43 +00:00
2 changed files with 42 additions and 1 deletions

View File

@@ -1140,7 +1140,7 @@ const ServerPrototype = {
// http_req.socket[kInternalSocketData] = [server, http_res, req];
// server.emit("connection", http_req.socket);
// const rejectFn = err => reject(err);
// http_req.once("error", rejectFn);
// http_res.once("error", rejectFn);
// http_res.once("error", rejectFn);
// if (upgrade) {
// server.emit("upgrade", http_req, http_req.socket, kEmptyBuffer);
@@ -1550,6 +1550,17 @@ function _writeHead(statusCode, reason, obj, response) {
}
}
// Automatically add connection: keep-alive header if not explicitly set
// This matches Node.js behavior for HTTP/1.1 responses
if (!response.hasHeader("connection") && response.shouldKeepAlive) {
response.setHeader("connection", "keep-alive");
}
// Automatically add Date header if not explicitly set (Node.js behavior)
if (!response.hasHeader("date") && response.sendDate) {
response.setHeader("date", new Date().toUTCString());
}
updateHasBody(response, statusCode);
}

View File

@@ -0,0 +1,30 @@
const common = require('../common');
const assert = require('assert');
const http = require('http');
const server = http.createServer(common.mustCall((req, res) => {
res.setHeader('X-Date', 'foo');
res.setHeader('X-Connection', 'bar');
res.setHeader('X-Content-Length', 'baz');
res.end();
}));
server.listen(0);
server.on('listening', common.mustCall(() => {
const agent = new http.Agent({ port: server.address().port, maxSockets: 1 });
http.get({
port: server.address().port,
path: '/hello',
agent: agent
}, common.mustCall((res) => {
assert.strictEqual(res.statusCode, 200);
assert.strictEqual(res.headers['x-date'], 'foo');
assert.strictEqual(res.headers['x-connection'], 'bar');
assert.strictEqual(res.headers['x-content-length'], 'baz');
assert(res.headers.date);
assert.strictEqual(res.headers.connection, 'keep-alive');
assert.strictEqual(res.headers['content-length'], '0');
server.close();
agent.destroy();
}));
}));