summaryrefslogtreecommitdiff
path: root/lib/http.js
AgeCommit message (Collapse)Author
2019-01-08lib: support overriding http\s.globalAgentRoy Sommer
Overriding `require('http[s]').globalAgent` is now respected by consequent requests. In order to achieve that, the following changes were made: 1. Implmentation in `http`: `module.exports.globalAgent` is now defined through `Object.defineProperty`. Its getter and setter return \ set `require('_http_agent').globalAgent`. 2. Implementation in `https`: the https `globalAgent` is not the same as `_http_agent`, and is defined in `https` module itself. Therefore, the fix here was to simply use `module.exports.globalAgent` to support mutation. 3. According tests were added for both `http` and `https`, where in both we create a server, set the default agent to a newly created instance and make a request to that server. We then assert that the given instance was actually used by inspecting its sockets property. Fixes: https://github.com/nodejs/node/issues/23281 PR-URL: https://github.com/nodejs/node/pull/25170 Reviewed-By: James M Snell <jasnell@gmail.com>
2018-12-20http: add maxHeaderSize propertycjihrig
This commit exposes the value of --max-http-header-size as a property of the http module. PR-URL: https://github.com/nodejs/node/pull/24860 Reviewed-By: Richard Lau <riclau@uk.ibm.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Michael Dawson <michael_dawson@ca.ibm.com> Reviewed-By: Shelley Vohr <codebytere@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
2018-07-13http: allow url and options to be passed to http*.request and http*.getSam Ruby
Fixes: https://github.com/nodejs/node/issues/20795 PR-URL: https://github.com/nodejs/node/pull/21616 Reviewed-By: Tiancheng "Timothy" Gu <timothygu99@gmail.com> Reviewed-By: Ron Korving <ron@ronkorving.nl> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
2018-03-25http: support server options on createServerWes Todd
PR-URL: https://github.com/nodejs/node/pull/19461 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Evan Lucas <evanlucas@me.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
2018-03-22http: use more destructuringTobias Nießen
PR-URL: https://github.com/nodejs/node/pull/19481 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Jackson Tian <shyvo1987@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
2017-10-16lib: use destructuring for some constantsWeijia Wang
This change is to unify the declaration for constants into using destructuring on the top-level-module scope, reducing some redundant code. PR-URL: https://github.com/nodejs/node/pull/16063 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Tobias Nießen <tniessen@tnie.de> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Gibson Fahnestock <gibfahn@gmail.com>
2017-03-20http: use more efficient module.exports patternJames M Snell
PR-URL: https://github.com/nodejs/node/pull/11594 Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Sakthipriyan Vairamani <thechargingvolcano@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
2017-03-10meta: restore original copyright headerJames M Snell
A prior io.js era commit inappropriately removed the original copyright statements from the source. This restores those in any files still remaining from that edit. Ref: https://github.com/nodejs/TSC/issues/174 Ref: https://github.com/nodejs/node/pull/10599 PR-URL: https://github.com/nodejs/node/pull/10155 Note: This PR was required, reviewed-by and approved by the Node.js Foundation Legal Committee and the TSC. There is no `Approved-By:` meta data.
2016-10-18http: name anonymous functions in httpmaasencioh
Refs: https://github.com/nodejs/node/issues/8913 PR-URL: https://github.com/nodejs/node/pull/9055 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Franziska Hinkelmann <franziska.hinkelmann@gmail.com> Reviewed-By: Michaël Zasso <targos@protonmail.com>
2016-08-29http: remove deprecated Client interfaceBrian White
PR-URL: https://github.com/nodejs/node/pull/8104 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
2015-09-23lib,src: remove usage of events.EventEmitterSakthipriyan Vairamani
The `events` module already exports `EventEmitter` constructor function So, we don't have to use `events.EventEmitter` to access it. Refer: https://github.com/nodejs/node/pull/2896 PR-URL: https://github.com/nodejs/node/pull/2921 Reviewed-By: Roman Reiss <me@silverwind.io> Reviewed-By: Michaël Zasso <mic.besace@gmail.com>
2015-07-03util: prepend '(node) ' to deprecation messagesSakthipriyan Vairamani
Changes included in this commit are 1. Making the deprecation messages consistent. The messages will be in the following format x is deprecated. Use y instead. If there is no alternative for `x`, then the ` Use y instead.` part will not be there in the message. 2. All the internal deprecation messages are printed with the prefix `(node) `, except when the `--trace-deprecation` flag is set. Fixes: https://github.com/nodejs/io.js/issues/1883 PR-URL: https://github.com/nodejs/io.js/pull/1892 Reviewed-By: Roman Reiss <me@silverwind.io>
2015-02-02http: replace util._extend() with [].slice()Jonathan Ong
PR-URL: https://github.com/iojs/io.js/pull/634 Reviewed-BY: Nicu Micleușanu <micnic90@gmail.com> Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Stephen Belanger <admin@stephenbelanger.com>
2015-01-21lib: use const to define constantscjihrig
This commit replaces a number of var statements throughout the lib code with const statements. PR-URL: https://github.com/iojs/io.js/pull/541 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
2015-01-12Remove excessive copyright/license boilerplateisaacs
The copyright and license notice is already in the LICENSE file. There is no justifiable reason to also require that it be included in every file, since the individual files are not individually distributed except as part of the entire package.
2014-11-22lib: turn on strict modeBen Noordhuis
Turn on strict mode for the files in the lib/ directory. It helps catch bugs and can have a positive effect on performance. PR-URL: https://github.com/node-forward/node/pull/64 Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Fedor Indutny <fedor@indutny.com>
2014-09-05lib: unexport http.parsersBen Noordhuis
Unexport the http.parsers freelist. It was originally exported by Ryan in commit 0003c701 but the commit log doesn't mention why and it's never been documented. It's unclear if there are any users. The lifecycle of parser objects changed recently and it seems better to not let people shoot themselves in the foot so easily. If it turns out there are actually users, we can always re-export it again - probably under a slightly different name, to force people to update their code to the new way of things. Reviewed-by: Trevor Norris <trev.norris@gmail.com>
2014-06-11lib: remove unused variablesBrian White
Signed-off-by: Fedor Indutny <fedor@indutny.com>
2014-02-26http, https: don't depend on `globalAgent`Nathan Rajlich
For the `request()` and `get()` functions. I could never really understand why these two functions go through agent first... Especially since the user could be passing `agent: false` or a different Agent instance completely, in which `globalAgent` will be completely bypassed. Moved the relevant logic from `Agent#request()` into the `ClientRequest` constructor. Incidentally, this commit fixes #7012 (which was the original intent of this commit).
2013-10-28http: expose supported methodsBen Noordhuis
Expose the list of supported HTTP methods as a property on the 'http' module object. Fixes #6422.
2013-08-15lib: remove unused variables and functionsBrian White
2013-08-05http: Fix overlooked agent.globalAgent exportisaacs
Noticed by @bnoordhuis in https://github.com/joyent/node/pull/5991#discussion_r5575946
2013-07-09http: Add agent.get/request methodsisaacs
2013-05-15http: don't escape request path, reject bad charsBen Noordhuis
Commit 38149bb changes http.get() and http.request() to escape unsafe characters. However, that creates an incompatibility with v0.10 that is difficult to work around: if you escape the path manually, then in v0.11 it gets escaped twice. Change lib/http.js so it no longer tries to fix up bad request paths, simply reject them with an exception. The actual check is rather basic right now. The full check for illegal characters is difficult to implement efficiently because it requires a few characters of lookahead. That's why it currently only checks for spaces because those are guaranteed to create an invalid request. Fixes #5474.
2013-04-17http: split Client into _http_client.jsTimothy J Fontaine
2013-04-17http: move Server and ServerResponse outTimothy J Fontaine
2013-04-17http: move OutgoingMessage into it's own fileTimothy J Fontaine
2013-04-17http: move parsers into _http_common.jsTimothy J Fontaine
2013-04-17http: move IncomingMessage into its own fileTimothy J Fontaine
2013-04-17http: split Agent into its own fileTimothy J Fontaine
2013-04-12http: escape unsafe characters in request pathBen Noordhuis
Make http.request() and friends escape unsafe characters in the request path. That is, a request for '/foo bar' is now escaped as '/foo%20bar'. Before this commit, the path was used as-is in the request status line, creating an invalid HTTP request ("GET /foo bar HTTP/1.1"). Fixes #4381.
2013-04-08http: Support write(data, 'hex')isaacs
We were assuming that any string can be concatenated safely to CRLF. However, for hex, base64, or binary encoded writes, this is not the case, and results in sending the incorrect response. An unusual edge case, but certainly a bug.
2013-04-03http: Remove legacy ECONNRESET workaround codeisaacs
Fix #5179
2013-04-02http client: Ensure socket cleanup on response endisaacs
If an http response has an 'end' handler that throws, then the socket will never be released back into the pool. Granted, we do NOT guarantee that throwing will never have adverse effects on Node internal state. Such a guarantee cannot be reasonably made in a shared-global mutable-state side-effecty language like JavaScript. However, in this case, it's a rather trivial patch to increase our resilience a little bit, so it seems like a win. There is no semantic change in this case, except that some event listeners are removed, and the `'free'` event is emitted on nextTick, so that you can schedule another request which will re-use the same socket. From the user's point of view, there should be no detectable difference. Closes #5107
2013-03-14http: Don't hot-path end() for large buffersisaacs
The benefits of the hot-path optimization below start to fall off when the buffer size gets up near 128KB, because the cost of the copy is more than the cost of the extra write() call. Switch to the write/end method at that point. Heuristics and magic numbers are awful, but slow http responses are worse. Fix #4975
2013-03-10stream: Don't emit 'end' unless read() calledisaacs
This solves the problem of calling `readable.pipe(writable)` after the readable stream has already emitted 'end', as often is the case when writing simple HTTP proxies. The spirit of streams2 is that things will work properly, even if you don't set them up right away on the first tick. This approach breaks down, however, because pipe()ing from an ended readable will just do nothing. No more data will ever arrive, and the writable will hang open forever never being ended. However, that does not solve the case of adding a `on('end')` listener after the stream has received the EOF chunk, if it was the first chunk received (and thus, length was 0, and 'end' got emitted). So, with this, we defer the 'end' event emission until the read() function is called. Also, in pipe(), if the source has emitted 'end' already, we call the cleanup/onend function on nextTick. Piping from an already-ended stream is thus the same as piping from a stream that is in the process of ending. Updates many tests that were relying on 'end' coming immediately, even though they never read() from the req. Fix #4942
2013-03-10http: ServerRequest does not timeout after 'end'koichik
Fixes #4967
2013-03-10http: Do not setTimeout a not-yet-existent socketisaacs
Fixes #4967
2013-03-09http: check if incoming parser has already been freedhc
Fix #4948 This adds a check before setting the incoming parser to null. Under certain circumstances it'll already be set to null by freeParser(). Otherwise this will cause node to crash as it tries to set null on something that is already null.
2013-03-08Revert "http: check if incoming parser has already been freed"isaacs
This reverts commit 9f4c3b0d45f858d3d3021ef4b8edebf6005008ff.
2013-03-08http: check if incoming parser has already been freedhheennrryy@gmail.com
Fix #4948 This adds a check before setting the incoming parser to null. Under certain circumstances it'll already be set to null by freeParser(). Otherwise this will cause node to crash as it tries to set null on something that is already null.
2013-03-06http: More useful setTimeout API on serverisaacs
This adds the following to HTTP: * server.setTimeout(msecs, callback) Sets all new connections to time out after the specified time, at which point it emits 'timeout' on the server, passing the socket as an argument. In this way, timeouts can be handled in one place consistently. * req.setTimeout(), res.setTimeout() Essentially an alias to req/res.socket.setTimeout(), but without having to delve into a "buried" object. Adds a listener on the req/res object, but not on the socket. * server.timeout Number of milliseconds before incoming connections time out. (Default=1000*60*2, as before.) Furthermore, if the user sets up their own timeout listener on either the server, the request, or the response, then the default behavior (destroying the socket) is suppressed. Fix #3460
2013-03-06http: fix multiple timeout eventsEugene Girshov
Fixed up slightly by @isaacs so as not to miss 'timeout' events in some cases.
2013-03-02Merge remote-tracking branch 'origin/v0.8'Ben Noordhuis
Conflicts: doc/api/http.markdown test/simple/test-crypto.js
2013-03-01events: add check for listeners lengthTrevor Norris
Ability to return just the length of listeners for a given type, using EventEmitter.listenerCount(emitter, event). This will be a lot cheaper than creating a copy of the listeners array just to check its length.
2013-03-01http: use socket.once, not socket.onBen Noordhuis
Register the 'close' event listener with .once(), not .on(). It doesn't matter in the grand scheme of things because the listener doesn't keep references to any heavy-weight objects but using .once() for a oneshot listener is something of a best practice.
2013-02-28stream: There is no _read cb, there is only pushisaacs
This makes it so that `stream.push(chunk)` is the only way to signal the end of reading, removing the confusing disparity between the callback-style _read method, and the fact that most real-world streams do not have a 1:1 corollation between the "please give me data" event, and the actual arrival of a chunk of data. It is still possible, of course, to implement a `CallbackReadable` on top of this. Simply provide a method like this as the callback: function readCallback(er, chunk) { if (er) stream.emit('error', er); else stream.push(chunk); } However, *only* fs streams actually would behave in this way, so it makes not a lot of sense to make TCP, TLS, HTTP, and all the rest have to bend into this uncomfortable paradigm.
2013-02-28Merge remote-tracking branch 'origin/v0.8'Ben Noordhuis
Conflicts: AUTHORS ChangeLog deps/uv/src/unix/pipe.c lib/http.js src/node_version.h
2013-02-26http: fix case in 505 response status lineBen Noordhuis
Fixes #4850.
2013-02-25http: Do not free the wrong parser on socket closeisaacs
This appears to fix #4673. That bug is very hard to reproduce, so it's hard to tell for certain, but this approach is more correct anyway. Hat-tip: @dougwilson