diff --git a/pkg/vm/bin/kernel_service.dart b/pkg/vm/bin/kernel_service.dart
index 84825db..90dd842 100644
--- a/pkg/vm/bin/kernel_service.dart
+++ b/pkg/vm/bin/kernel_service.dart
@@ -38,7 +38,8 @@
 import 'package:kernel/kernel.dart' show Component, Procedure;
 import 'package:kernel/target/targets.dart' show TargetFlags;
 import 'package:kernel/target/vm.dart' show VmTarget;
-import 'package:vm/incremental_compiler.dart';
+import '../lib/incremental_compiler.dart';
+import '../lib/http_filesystem.dart';
 
 final bool verbose = new bool.fromEnvironment('DFE_VERBOSE');
 const String platformKernelFile = 'virtual_platform_kernel.dill';
@@ -514,11 +515,9 @@
 /// frontend.
 FileSystem _buildFileSystem(List sourceFiles, List<int> platformKernel,
     String multirootFilepaths, String multirootScheme) {
-  FileSystem fileSystem;
+  FileSystem fileSystem = new HttpAwareFileSystem(StandardFileSystem.instance);
 
-  if (sourceFiles.isEmpty && platformKernel == null) {
-    fileSystem = StandardFileSystem.instance;
-  } else {
+  if (!sourceFiles.isEmpty || platformKernel != null) {
     MemoryFileSystem memoryFileSystem =
         new MemoryFileSystem(Uri.parse('file:///'));
     if (sourceFiles != null) {
@@ -533,7 +532,7 @@
           .entityForUri(Uri.parse(platformKernelFile))
           .writeAsBytesSync(platformKernel);
     }
-    fileSystem = new HybridFileSystem(memoryFileSystem);
+    fileSystem = new HybridFileSystem(memoryFileSystem, fileSystem);
   }
 
   if (multirootFilepaths != null) {
diff --git a/pkg/vm/lib/http_filesystem.dart b/pkg/vm/lib/http_filesystem.dart
new file mode 100644
index 0000000..ed036cd
--- /dev/null
+++ b/pkg/vm/lib/http_filesystem.dart
@@ -0,0 +1,67 @@
+import 'dart:async';
+import 'dart:io' as io;
+
+import 'package:front_end/src/api_unstable/build_integration.dart';
+
+class HttpAwareFileSystem implements FileSystem {
+  FileSystem original;
+
+  HttpAwareFileSystem(this.original);
+
+  @override
+  FileSystemEntity entityForUri(Uri uri) {
+    if (uri.scheme == 'http' || uri.scheme == 'https') {
+      return new HttpFileSystemEntity(this, uri);
+    } else {
+      return original.entityForUri(uri);
+    }
+  }
+}
+
+class HttpFileSystemEntity implements FileSystemEntity {
+  HttpAwareFileSystem fileSystem;
+  Uri uri;
+
+  HttpFileSystemEntity(this.fileSystem, this.uri);
+
+  @override
+  Future<bool> exists() async {
+    return connectAndRun((io.HttpClient httpClient) async {
+      io.HttpClientRequest request = await httpClient.headUrl(uri);
+      io.HttpClientResponse response = await request.close();
+      return response.statusCode == io.HttpStatus.ok;
+    });
+  }
+
+  @override
+  Future<List<int>> readAsBytes() async {
+    return connectAndRun((io.HttpClient httpClient) async {
+      io.HttpClientRequest request = await httpClient.getUrl(uri);
+      io.HttpClientResponse response = await request.close();
+      if (response.statusCode != io.HttpStatus.ok) {
+        throw new FileSystemException(uri, response.toString());
+      }
+      List<List<int>> list = await response.toList();
+      return list.expand((list) => list).toList();
+    });
+  }
+
+  @override
+  Future<String> readAsString() async {
+    return String.fromCharCodes(await readAsBytes());
+  }
+
+  T connectAndRun<T>(T body(io.HttpClient httpClient)) {
+    io.HttpClient httpClient;
+    try {
+      httpClient = new io.HttpClient();
+      // Set timeout to be shorter than anticipated OS default
+      httpClient.connectionTimeout = const Duration(seconds: 5);
+      return body(httpClient);
+    } on Exception catch (e) {
+      throw new FileSystemException(uri, e.toString());
+    } finally {
+      httpClient?.close(force: true);
+    }
+  }
+}
diff --git a/runtime/vm/dart_api_impl_test.cc b/runtime/vm/dart_api_impl_test.cc
index ef393a7..a4ff9b6 100644
--- a/runtime/vm/dart_api_impl_test.cc
+++ b/runtime/vm/dart_api_impl_test.cc
@@ -6853,7 +6853,7 @@
       "foo1:///main.dart",
       /* multiroot_filepaths= */ "/bar,/baz",
       /* multiroot_scheme= */ "foo");
-  EXPECT_ERROR(lib, "Compilation failed foo1");
+  EXPECT_ERROR(lib, "Compilation failed FileSystemException(uri=foo1:");
 }
 
 void NewNativePort_send123(Dart_Port dest_port_id, Dart_CObject* message) {
diff --git a/tests/standalone_2/standalone_2.status b/tests/standalone_2/standalone_2.status
index 20dc2b5..965c602 100644
--- a/tests/standalone_2/standalone_2.status
+++ b/tests/standalone_2/standalone_2.status
@@ -94,12 +94,6 @@
 [ $runtime == none && !$strong ]
 io/process_exit_negative_test: Fail, OK # Must be run to exit with non-zero exit code.
 
-# These tests spawn a process that imports using a http URL, since
-# spawned processes now run in Dart2 mode the tests fail as http URL imports
-# is not supported by the front end.
-[ $runtime == vm && ($compiler == app_jit || $compiler == none) ]
-http_launch_test: RuntimeError # Issue 33388
-
 [ $system == linux && ($runtime == flutter || $runtime == vm) ]
 io/http_basic_test: Pass, Slow, Timeout # Issue 28046, These tests might be slow on an opt counter threshold bot. They also time out on the bot occasionally => flaky test issue 28046
 io/http_launch_test: Pass, Slow, Timeout # Issue 28046, These tests might be slow on an opt counter threshold bot. They also time out on the bot occasionally => flaky test issue 28046
diff --git a/tests/standalone_2/standalone_2_kernel.status b/tests/standalone_2/standalone_2_kernel.status
index 0804201..201fe64 100644
--- a/tests/standalone_2/standalone_2_kernel.status
+++ b/tests/standalone_2/standalone_2_kernel.status
@@ -11,7 +11,6 @@
 # to add them.
 
 [ $compiler == app_jitk ]
-http_launch_test: RuntimeError # Issue 33388
 io/directory_test: RuntimeError
 io/file_error_test: RuntimeError
 io/file_test: RuntimeError
@@ -69,7 +68,6 @@
 io/web_socket_ping_test: Crash, Pass
 
 [ $compiler == dartk && $runtime == vm && $strong ]
-http_launch_test: RuntimeError # Issue 33388
 io/http_client_request_test: Pass, Timeout
 io/http_compression_test: RuntimeError
 io/platform_resolved_executable_test/03: Pass, RuntimeError
