Skip to content

Commit ecb4d07

Browse files
committed
proxy_agent: Improve documentation
1 parent 3efd515 commit ecb4d07

File tree

1 file changed

+27
-18
lines changed

1 file changed

+27
-18
lines changed

src/node/proxy_agent.ts

+27-18
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,25 @@ import * as proxyagent from "proxy-agent"
1515
*/
1616

1717
/**
18-
* monkeyPatch patches the node HTTP/HTTPS library to route all requests through our
19-
* custom agent from the proxyAgent package.
18+
* monkeyPatch patches the node http and https modules to route all requests through the
19+
* agent we get from the proxy-agent package.
20+
*
21+
* We do not support $HTTPS_PROXY here as it's equivalent in proxy-agent.
22+
* See the mapping at https://www.npmjs.com/package/proxy-agent
23+
*
24+
* I guess with most proxies support both HTTP and HTTPS proxying on the same port and
25+
* so two variables aren't required anymore. And there's plenty of SOCKS proxies too where
26+
* it wouldn't make sense to have two variables.
27+
*
28+
* It's the most performant/secure setup as using a HTTP proxy for HTTP requests allows
29+
* for caching but then using a HTTPS proxy for HTTPS requests gives full end to end
30+
* security.
31+
*
32+
* See https://stackoverflow.com/a/10442767/4283659 for HTTP vs HTTPS proxy.
33+
* To be clear, both support HTTP/HTTPS resources, the difference is in how they fetch
34+
* them.
2035
*/
2136
export function monkeyPatch(vscode: boolean): void {
22-
// We do not support HTTPS_PROXY here to avoid confusion. proxy-agent will automatically
23-
// use the correct protocol to connect to the proxy depending on the requested URL.
24-
//
25-
// We could implement support ourselves to allow people to configure the proxy used for
26-
// HTTPS vs HTTP but there doesn't seem to be much value in that.
27-
//
28-
// At least of right now, it'd just be plain confusing to support HTTPS_PROXY when proxy-agent
29-
// will still use HTTP to hit it for HTTP requests.
3037
const proxyURL = process.env.HTTP_PROXY || process.env.http_proxy
3138
if (!proxyURL) {
3239
return
@@ -47,14 +54,16 @@ export function monkeyPatch(vscode: boolean): void {
4754
pa = new (proxyagent as any).default(proxyURL)
4855
}
4956

50-
/**
51-
* None of our code ever passes in a explicit agent to the http modules but VS Code's
52-
* does sometimes but only when a user sets the http.proxy configuration.
53-
* See https://code.visualstudio.com/docs/setup/network#_legacy-proxy-server-support
54-
*
55-
* Even if they do, it's probably the same proxy so we should be fine! And those are
56-
* deprecated anyway.
57-
*/
57+
// None of our code ever passes in a explicit agent to the http modules but VS Code's
58+
// does sometimes but only when a user sets the http.proxy configuration.
59+
// See https://code.visualstudio.com/docs/setup/network#_legacy-proxy-server-support
60+
//
61+
// Even if they do, it's probably the same proxy so we should be fine! And those are
62+
// deprecated anyway. In fact, they implemented it incorrectly as they won't retrieve
63+
// HTTPS resources over a HTTP proxy which is perfectly valid! Both HTTP and HTTPS proxies
64+
// support HTTP/HTTPS resources.
65+
//
66+
// See https://stackoverflow.com/a/10442767/4283659
5867
const http = require("http")
5968
const https = require("https")
6069
http.globalAgent = pa

0 commit comments

Comments
 (0)