This commit is contained in:
Родитель
a2eaddaa51
Коммит
216570b5e1
|
@ -487,21 +487,21 @@ Example:
|
|||
|
||||
## http.Agent
|
||||
|
||||
In node 0.5.3+ there is a new implementation of the HTTP Agent which is used
|
||||
In node 0.5.3+ there is a new implementation of the HTTP Agent which is used
|
||||
for pooling sockets used in HTTP client requests.
|
||||
|
||||
Previously, a single agent instance help the pool for single host+port. The
|
||||
Previously, a single agent instance help the pool for single host+port. The
|
||||
current implementation now holds sockets for any number of hosts.
|
||||
|
||||
The current HTTP Agent also defaults client requests to using
|
||||
Connection:keep-alive. If no pending HTTP requests are waiting on a socket
|
||||
to become free the socket is closed. This means that node's pool has the
|
||||
benefit of keep-alive when under load but still does not require developers
|
||||
The current HTTP Agent also defaults client requests to using
|
||||
Connection:keep-alive. If no pending HTTP requests are waiting on a socket
|
||||
to become free the socket is closed. This means that node's pool has the
|
||||
benefit of keep-alive when under load but still does not require developers
|
||||
to manually close the HTTP clients using keep-alive.
|
||||
|
||||
Sockets are removed from the agent's pool when the socket emits either a
|
||||
"close" event or a special "agentRemove" event. This means that if you intend
|
||||
to keep one HTTP request open for a long time and don't want it to stay in the
|
||||
Sockets are removed from the agent's pool when the socket emits either a
|
||||
"close" event or a special "agentRemove" event. This means that if you intend
|
||||
to keep one HTTP request open for a long time and don't want it to stay in the
|
||||
pool you can do something along the lines of:
|
||||
|
||||
http.get(options, function(res) {
|
||||
|
@ -509,7 +509,7 @@ pool you can do something along the lines of:
|
|||
}).on("socket", function (socket) {
|
||||
socket.emit("agentRemove");
|
||||
});
|
||||
|
||||
|
||||
Alternatively, you could just opt out of pooling entirely using `agent:false`:
|
||||
|
||||
http.get({host:'localhost', port:80, path:'/', agent:false}, function (res) {
|
||||
|
|
|
@ -69,7 +69,7 @@ The options argument has the following options
|
|||
- method: HTTP request method. Default `'GET'`.
|
||||
|
||||
The following options can also be specified.
|
||||
However, a global [Agent](http.html#http.Agent) cannot be used.
|
||||
However, a global [Agent](http.html#http.Agent) cannot be used.
|
||||
|
||||
- key: Private key to use for SSL. Default `null`.
|
||||
- cert: Public x509 certificate to use. Default `null`.
|
||||
|
|
14
lib/http.js
14
lib/http.js
|
@ -1015,7 +1015,7 @@ function ClientRequest(options, cb) {
|
|||
if (options.port && +options.port !== options.defaultPort) {
|
||||
hostHeader += ':' + options.port;
|
||||
}
|
||||
this.setHeader("Host", hostHeader);
|
||||
this.setHeader('Host', hostHeader);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1032,9 +1032,11 @@ function ClientRequest(options, cb) {
|
|||
}
|
||||
|
||||
if (Array.isArray(options.headers)) {
|
||||
self._storeHeader(self.method + ' ' + self.path + ' HTTP/1.1\r\n', options.headers);
|
||||
self._storeHeader(self.method + ' ' + self.path + ' HTTP/1.1\r\n',
|
||||
options.headers);
|
||||
} else if (self.getHeader('expect')) {
|
||||
self._storeHeader(self.method + ' ' + self.path + ' HTTP/1.1\r\n', self._renderHeaders());
|
||||
self._storeHeader(self.method + ' ' + self.path + ' HTTP/1.1\r\n',
|
||||
self._renderHeaders());
|
||||
}
|
||||
if (self.socketPath) {
|
||||
self._last = true;
|
||||
|
@ -1060,9 +1062,9 @@ function ClientRequest(options, cb) {
|
|||
}
|
||||
}
|
||||
|
||||
self._deferToConnect(null, null, function () {
|
||||
self._deferToConnect(null, null, function() {
|
||||
self._flush();
|
||||
})
|
||||
});
|
||||
|
||||
}
|
||||
util.inherits(ClientRequest, OutgoingMessage);
|
||||
|
@ -1095,7 +1097,7 @@ function createHangUpError() {
|
|||
|
||||
ClientRequest.prototype.onSocket = function(socket) {
|
||||
var req = this;
|
||||
process.nextTick(function () {
|
||||
process.nextTick(function() {
|
||||
var parser = parsers.alloc();
|
||||
req.socket = socket;
|
||||
req.connection = socket;
|
||||
|
|
|
@ -234,7 +234,7 @@ function urlParse(url, parseQueryString, slashesDenoteHost) {
|
|||
}
|
||||
out.hostname = newOut.join('.');
|
||||
|
||||
out.host = (out.hostname || '') +
|
||||
out.host = (out.hostname || '') +
|
||||
((out.port) ? ':' + out.port : '');
|
||||
out.href += out.host;
|
||||
}
|
||||
|
@ -419,7 +419,7 @@ function urlResolveObject(source, relative) {
|
|||
//to support http.request
|
||||
if (source.pathname !== undefined || source.search !== undefined) {
|
||||
source.path = (source.pathname ? source.pathname : '') +
|
||||
(source.search ? source.search : '');
|
||||
(source.search ? source.search : '');
|
||||
}
|
||||
source.slashes = source.slashes || relative.slashes;
|
||||
source.href = urlFormat(source);
|
||||
|
@ -504,7 +504,7 @@ function urlResolveObject(source, relative) {
|
|||
//to support http.request
|
||||
if (source.pathname !== undefined || source.search !== undefined) {
|
||||
source.path = (source.pathname ? source.pathname : '') +
|
||||
(source.search ? source.search : '');
|
||||
(source.search ? source.search : '');
|
||||
}
|
||||
source.href = urlFormat(source);
|
||||
return source;
|
||||
|
@ -590,7 +590,7 @@ function urlResolveObject(source, relative) {
|
|||
//to support request.http
|
||||
if (source.pathname !== undefined || source.search !== undefined) {
|
||||
source.path = (source.pathname ? source.pathname : '') +
|
||||
(source.search ? source.search : '');
|
||||
(source.search ? source.search : '');
|
||||
}
|
||||
source.auth = relative.auth || source.auth;
|
||||
source.slashes = source.slashes || relative.slashes;
|
||||
|
|
|
@ -22,7 +22,6 @@
|
|||
var common = require('../common');
|
||||
var assert = require('assert');
|
||||
var http = require('http');
|
||||
var https = require('https');
|
||||
var url = require('url');
|
||||
|
||||
var testURL = url.parse('http://asdf:qwer@localhost:' + common.PORT);
|
||||
|
@ -45,7 +44,7 @@ var server = http.createServer(function(request, response) {
|
|||
server.close();
|
||||
});
|
||||
|
||||
server.listen(common.PORT, function () {
|
||||
server.listen(common.PORT, function() {
|
||||
// make the request
|
||||
http.request(testURL).end();
|
||||
});
|
||||
|
|
|
@ -22,7 +22,6 @@
|
|||
var common = require('../common');
|
||||
var assert = require('assert');
|
||||
var http = require('http');
|
||||
var https = require('https');
|
||||
var url = require('url');
|
||||
|
||||
var testURL = url.parse('http://asdf:qwer@localhost:' + common.PORT);
|
||||
|
@ -40,7 +39,7 @@ var server = http.createServer(function(request, response) {
|
|||
server.close();
|
||||
});
|
||||
|
||||
server.listen(common.PORT, function () {
|
||||
server.listen(common.PORT, function() {
|
||||
// make the request
|
||||
http.request(testURL).end();
|
||||
});
|
||||
|
|
|
@ -47,7 +47,7 @@ var server = https.createServer(httpsOptions, function(request, response) {
|
|||
server.close();
|
||||
});
|
||||
|
||||
server.listen(common.PORT, function () {
|
||||
server.listen(common.PORT, function() {
|
||||
// make the request
|
||||
var clientRequest = https.request(testURL);
|
||||
// since there is a little magic with the agent
|
||||
|
|
|
@ -22,7 +22,6 @@
|
|||
var common = require('../common');
|
||||
var assert = require('assert');
|
||||
var http = require('http');
|
||||
var https = require('https');
|
||||
var url = require('url');
|
||||
|
||||
var testURL = url.parse('http://localhost:' + common.PORT + '/asdf');
|
||||
|
@ -40,7 +39,7 @@ var server = http.createServer(function(request, response) {
|
|||
server.close();
|
||||
});
|
||||
|
||||
server.listen(common.PORT, function () {
|
||||
server.listen(common.PORT, function() {
|
||||
// make the request
|
||||
http.request(testURL).end();
|
||||
});
|
||||
|
|
|
@ -29,13 +29,13 @@ var testURL = url.parse('http://localhost:' + common.PORT + '/asdf?qwer=zxcv');
|
|||
testURL.method = 'POST';
|
||||
|
||||
function check(request) {
|
||||
//url.parse should not mess with the method
|
||||
assert.strictEqual(request.method, 'POST');
|
||||
//everything else should be right
|
||||
assert.strictEqual(request.url, '/asdf?qwer=zxcv');
|
||||
//the host header should use the url.parse.hostname
|
||||
assert.strictEqual(request.headers.host,
|
||||
testURL.hostname + ':' + testURL.port);
|
||||
//url.parse should not mess with the method
|
||||
assert.strictEqual(request.method, 'POST');
|
||||
//everything else should be right
|
||||
assert.strictEqual(request.url, '/asdf?qwer=zxcv');
|
||||
//the host header should use the url.parse.hostname
|
||||
assert.strictEqual(request.headers.host,
|
||||
testURL.hostname + ':' + testURL.port);
|
||||
}
|
||||
|
||||
var server = http.createServer(function(request, response) {
|
||||
|
@ -46,7 +46,7 @@ var server = http.createServer(function(request, response) {
|
|||
server.close();
|
||||
});
|
||||
|
||||
server.listen(common.PORT, function () {
|
||||
server.listen(common.PORT, function() {
|
||||
// make the request
|
||||
http.request(testURL).end();
|
||||
});
|
||||
|
|
|
@ -40,7 +40,7 @@ var server = http.createServer(function(request, response) {
|
|||
server.close();
|
||||
});
|
||||
|
||||
server.listen(common.PORT, function () {
|
||||
server.listen(common.PORT, function() {
|
||||
// make the request
|
||||
http.request(testURL).end();
|
||||
});
|
||||
|
|
|
@ -989,7 +989,7 @@ relativeTests.forEach(function(relativeTest) {
|
|||
if (relativeTests2[181][0] === './/g' &&
|
||||
relativeTests2[181][1] === 'f:/a' &&
|
||||
relativeTests2[181][2] === 'f://g') {
|
||||
relativeTests2.splice(181,1);
|
||||
relativeTests2.splice(181, 1);
|
||||
}
|
||||
relativeTests2.forEach(function(relativeTest) {
|
||||
var actual = url.resolveObject(url.parse(relativeTest[1]), relativeTest[0]),
|
||||
|
|
Загрузка…
Ссылка в новой задаче