diff --git a/CHANGELOG.md b/CHANGELOG.md
index f9fea4f..b84f491 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -79,6 +79,11 @@
 - Remove remaining support for `.packages` files. The flag
   `--legacy-packages-file` is no longer supported.
 
+#### dart2js
+
+- **Breaking change** [49473](https://github.com/dart-lang/sdk/issues/49473):
+  dart2js no longer supports HTTP URIs as inputs.
+
 ### Core libraries
 
 #### `dart:io`
diff --git a/pkg/compiler/lib/src/source_file_provider.dart b/pkg/compiler/lib/src/source_file_provider.dart
index 8813a7f..667f25f 100644
--- a/pkg/compiler/lib/src/source_file_provider.dart
+++ b/pkg/compiler/lib/src/source_file_provider.dart
@@ -34,8 +34,6 @@
 
     if (resourceUri.isScheme('file')) {
       return _readFromFile(resourceUri, inputKind);
-    } else if (resourceUri.isScheme('http') || resourceUri.isScheme('https')) {
-      return _readFromHttp(resourceUri, inputKind);
     } else {
       throw ArgumentError("Unknown scheme in uri '$resourceUri'");
     }
@@ -125,45 +123,6 @@
     return Future.value(input);
   }
 
-  Future<api.Input<List<int>>> _readFromHttp(
-      Uri resourceUri, api.InputKind inputKind) {
-    assert(resourceUri.isScheme('http'));
-    HttpClient client = HttpClient();
-    return client
-        .getUrl(resourceUri)
-        .then((HttpClientRequest request) => request.close())
-        .then((HttpClientResponse response) {
-      if (response.statusCode != HttpStatus.ok) {
-        String msg = 'Failure getting $resourceUri: '
-            '${response.statusCode} ${response.reasonPhrase}';
-        throw msg;
-      }
-      return response.toList();
-    }).then((List<List<int>> splitContent) {
-      int totalLength = splitContent.fold(0, (int old, List list) {
-        return old + list.length;
-      });
-      Uint8List result = Uint8List(totalLength);
-      int offset = 0;
-      for (List<int> contentPart in splitContent) {
-        result.setRange(offset, offset + contentPart.length, contentPart);
-        offset += contentPart.length;
-      }
-      dartCharactersRead += totalLength;
-      api.Input<List<int>> input;
-      switch (inputKind) {
-        case api.InputKind.UTF8:
-          input = utf8SourceFiles[resourceUri] = CachingUtf8BytesSourceFile(
-              resourceUri, resourceUri.toString(), result);
-          break;
-        case api.InputKind.binary:
-          input = binarySourceFiles[resourceUri] = Binary(resourceUri, result);
-          break;
-      }
-      return input;
-    });
-  }
-
   relativizeUri(Uri uri) => fe.relativizeUri(cwd, uri, isWindows);
 
   SourceFile<List<int>> getUtf8SourceFile(Uri resourceUri) {
