Skip to content

Commit

Permalink
http: don't confuse automatic headers for others
Browse files Browse the repository at this point in the history
If you set a custom http header which includes eg. the string `Date`,
then http will not automatically send the `Date` header.

This is also true for other automatic http headers.

PR-URL: #828
Reviewed-By: Brendan Ashworth <brendan.ashworth@me.com>
Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>
  • Loading branch information
tellnes authored and brendanashworth committed Feb 28, 2015
1 parent 25da074 commit 675cffb
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 6 deletions.
10 changes: 5 additions & 5 deletions lib/_http_outgoing.js
Expand Up @@ -10,12 +10,12 @@ const CRLF = common.CRLF;
const chunkExpression = common.chunkExpression;
const debug = common.debug;

const connectionExpression = /Connection/i;
const transferEncodingExpression = /Transfer-Encoding/i;
const connectionExpression = /^Connection$/i;
const transferEncodingExpression = /^Transfer-Encoding$/i;
const closeExpression = /close/i;
const contentLengthExpression = /Content-Length/i;
const dateExpression = /Date/i;
const expectExpression = /Expect/i;
const contentLengthExpression = /^Content-Length$/i;
const dateExpression = /^Date$/i;
const expectExpression = /^Expect$/i;

const automaticHeaders = {
connection: true,
Expand Down
30 changes: 30 additions & 0 deletions test/parallel/test-http-automatic-headers.js
@@ -0,0 +1,30 @@
var common = require('../common');
var assert = require('assert');
var http = require('http');

var server = http.createServer(function(req, res) {
res.setHeader('X-Date', 'foo');
res.setHeader('X-Connection', 'bar');
res.setHeader('X-Transfer-Encoding', 'baz');
res.end();
});
server.listen(common.PORT);

server.on('listening', function() {
var agent = new http.Agent({ port: common.PORT, maxSockets: 1 });
http.get({
port: common.PORT,
path: '/hello',
agent: agent
}, function(res) {
assert.equal(res.statusCode, 200);
assert.equal(res.headers['x-date'], 'foo');
assert.equal(res.headers['x-connection'], 'bar');
assert.equal(res.headers['x-transfer-encoding'], 'baz');
assert(res.headers['date']);
assert.equal(res.headers['connection'], 'keep-alive');
assert.equal(res.headers['transfer-encoding'], 'chunked');
server.close();
agent.destroy();
});
});
3 changes: 2 additions & 1 deletion test/parallel/test-tls-over-http-tunnel.js
Expand Up @@ -41,7 +41,8 @@ var proxy = net.createServer(function(clientSocket) {
// Verify the CONNECT request
assert.equal('CONNECT localhost:' + common.PORT + ' HTTP/1.1\r\n' +
'Proxy-Connections: keep-alive\r\n' +
'Host: localhost:' + proxyPort + '\r\n\r\n',
'Host: localhost:' + proxyPort + '\r\n' +
'Connection: close\r\n\r\n',
chunk);

console.log('PROXY: got CONNECT request');
Expand Down

0 comments on commit 675cffb

Please sign in to comment.