diff --git a/doc/api/deprecations.md b/doc/api/deprecations.md index ca1a0c6ba4b4ca..638879cb53d9ee 100644 --- a/doc/api/deprecations.md +++ b/doc/api/deprecations.md @@ -2051,12 +2051,15 @@ expose values under these names. ### DEP0109: `http`, `https`, and `tls` support for invalid URLs -Type: Runtime +Type: End-of-Life Some previously supported (but strictly invalid) URLs were accepted through the [`http.request()`][], [`http.get()`][], [`https.request()`][], diff --git a/lib/_http_client.js b/lib/_http_client.js index cdf728aa65846d..f3fbf363c69f97 100644 --- a/lib/_http_client.js +++ b/lib/_http_client.js @@ -42,7 +42,6 @@ const { } = primordials; const net = require('net'); -const url = require('url'); const assert = require('internal/assert'); const { once } = require('internal/util'); const { @@ -98,27 +97,12 @@ class HTTPClientAsyncResource { } } -let urlWarningEmitted = false; function ClientRequest(input, options, cb) { FunctionPrototypeCall(OutgoingMessage, this); if (typeof input === 'string') { const urlStr = input; - try { - input = urlToHttpOptions(new URL(urlStr)); - } catch (err) { - input = url.parse(urlStr); - if (!input.hostname) { - throw err; - } - if (!urlWarningEmitted && !process.noDeprecation) { - urlWarningEmitted = true; - process.emitWarning( - `The provided URL ${urlStr} is not a valid URL, and is supported ` + - 'in the http module solely for compatibility.', - 'DeprecationWarning', 'DEP0109'); - } - } + input = urlToHttpOptions(new URL(urlStr)); } else if (input && input[searchParamsSymbol] && input[searchParamsSymbol][searchParamsSymbol]) { // url.URL instance diff --git a/lib/https.js b/lib/https.js index 79ac6c6bd58707..080efe40faabba 100644 --- a/lib/https.js +++ b/lib/https.js @@ -37,7 +37,6 @@ const { require('internal/util').assertCrypto(); const tls = require('tls'); -const url = require('url'); const { Agent: HttpAgent } = require('_http_agent'); const { Server: HttpServer, @@ -296,27 +295,12 @@ Agent.prototype._evictSession = function _evictSession(key) { const globalAgent = new Agent(); -let urlWarningEmitted = false; function request(...args) { let options = {}; if (typeof args[0] === 'string') { const urlStr = ArrayPrototypeShift(args); - try { - options = urlToHttpOptions(new URL(urlStr)); - } catch (err) { - options = url.parse(urlStr); - if (!options.hostname) { - throw err; - } - if (!urlWarningEmitted && !process.noDeprecation) { - urlWarningEmitted = true; - process.emitWarning( - `The provided URL ${urlStr} is not a valid URL, and is supported ` + - 'in the https module solely for compatibility.', - 'DeprecationWarning', 'DEP0109'); - } - } + options = urlToHttpOptions(new URL(urlStr)); } else if (args[0] && args[0][searchParamsSymbol] && args[0][searchParamsSymbol][searchParamsSymbol]) { // url.URL instance diff --git a/lib/tls.js b/lib/tls.js index 49c7d245171b10..eae34a4239145c 100644 --- a/lib/tls.js +++ b/lib/tls.js @@ -55,7 +55,6 @@ const { isArrayBufferView } = require('internal/util/types'); const net = require('net'); const { getOptionValue } = require('internal/options'); -const url = require('url'); const { getRootCertificates, getSSLCiphers } = internalBinding('crypto'); const { Buffer } = require('buffer'); const EventEmitter = require('events'); @@ -230,7 +229,6 @@ function check(hostParts, pattern, wildcards) { return true; } -let urlWarningEmitted = false; exports.checkServerIdentity = function checkServerIdentity(hostname, cert) { const subject = cert.subject; const altNames = cert.subjectaltname; @@ -246,21 +244,7 @@ exports.checkServerIdentity = function checkServerIdentity(hostname, cert) { if (StringPrototypeStartsWith(name, 'DNS:')) { ArrayPrototypePush(dnsNames, StringPrototypeSlice(name, 4)); } else if (StringPrototypeStartsWith(name, 'URI:')) { - let uri; - try { - uri = new URL(StringPrototypeSlice(name, 4)); - } catch { - const slicedName = StringPrototypeSlice(name, 4); - uri = url.parse(slicedName); - if (!urlWarningEmitted && !process.noDeprecation) { - urlWarningEmitted = true; - process.emitWarning( - `The URI ${slicedName} found in cert.subjectaltname ` + - 'is not a valid URI, and is supported in the tls module ' + - 'solely for compatibility.', - 'DeprecationWarning', 'DEP0109'); - } - } + const uri = new URL(StringPrototypeSlice(name, 4)); // TODO(bnoordhuis) Also use scheme. ArrayPrototypePush(uriNames, uri.hostname); diff --git a/test/parallel/test-http-deprecated-urls.js b/test/parallel/test-http-deprecated-urls.js deleted file mode 100644 index 5bb9f66ebe7126..00000000000000 --- a/test/parallel/test-http-deprecated-urls.js +++ /dev/null @@ -1,33 +0,0 @@ -/* eslint-disable node-core/crypto-check */ - -'use strict'; - -const common = require('../common'); - -const http = require('http'); -const modules = { http }; - -const deprecations = [ - ['The provided URL http://[www.nodejs.org] is not a valid URL, and is supported ' + - 'in the http module solely for compatibility.', - 'DEP0109'], -]; - -if (common.hasCrypto) { - const https = require('https'); - modules.https = https; - deprecations.push( - ['The provided URL https://[www.nodejs.org] is not a valid URL, and is supported ' + - 'in the https module solely for compatibility.', - 'DEP0109'], - ); -} - -common.expectWarning('DeprecationWarning', deprecations); - -Object.keys(modules).forEach((module) => { - const doNotCall = common.mustNotCall( - `${module}.request should not connect to ${module}://[www.nodejs.org]` - ); - modules[module].request(`${module}://[www.nodejs.org]`, doNotCall).abort(); -}); diff --git a/test/parallel/test-tls-check-server-identity.js b/test/parallel/test-tls-check-server-identity.js index deeeecdec9ec50..ad79d93a3df6fd 100644 --- a/test/parallel/test-tls-check-server-identity.js +++ b/test/parallel/test-tls-check-server-identity.js @@ -30,13 +30,6 @@ const util = require('util'); const tls = require('tls'); -common.expectWarning('DeprecationWarning', [ - ['The URI http://[a.b.a.com]/ found in cert.subjectaltname ' + - 'is not a valid URI, and is supported in the tls module ' + - 'solely for compatibility.', - 'DEP0109'], -]); - const tests = [ // False-y values. { @@ -282,13 +275,6 @@ const tests = [ error: 'Host: a.b.a.com. is not in the cert\'s altnames: ' + 'URI:http://*.b.a.com/' }, - // Invalid URI - { - host: 'a.b.a.com', cert: { - subjectaltname: 'URI:http://[a.b.a.com]/', - subject: {} - } - }, // IP addresses { host: 'a.b.a.com', cert: {