diff --git src/wp-admin/edit-form-blocks.php src/wp-admin/edit-form-blocks.php
index d998a11dad..8f281c4102 100644
--- src/wp-admin/edit-form-blocks.php
+++ src/wp-admin/edit-form-blocks.php
@@ -49,6 +49,7 @@ $preload_paths = array(
 	sprintf( '/wp/v2/%s/%s?context=edit', $rest_base, $post->ID ),
 	sprintf( '/wp/v2/types/%s?context=edit', $post_type ),
 	sprintf( '/wp/v2/users/me?post_type=%s&context=edit', $post_type ),
+	array( '/wp/v2/media', 'OPTIONS' ),
 );
 
 /*
diff --git src/wp-includes/rest-api.php src/wp-includes/rest-api.php
index e1d8919c8d..3a81ec7128 100644
--- src/wp-includes/rest-api.php
+++ src/wp-includes/rest-api.php
@@ -1343,12 +1343,22 @@ function rest_preload_api_request( $memo, $path ) {
 		return $memo;
 	}
 
+	$method = 'GET';
+	if ( is_array( $path ) ) {
+		$method = end( $path );
+		$path   = reset( $path );
+
+		if ( ! in_array( $method, array( 'GET', 'OPTIONS' ), true ) ) {
+			$method = 'GET';
+		}
+	}
+
 	$path_parts = parse_url( $path );
 	if ( false === $path_parts ) {
 		return $memo;
 	}
 
-	$request = new WP_REST_Request( 'GET', $path_parts['path'] );
+	$request = new WP_REST_Request( $method, $path_parts['path'] );
 	if ( ! empty( $path_parts['query'] ) ) {
 		parse_str( $path_parts['query'], $query_params );
 		$request->set_query_params( $query_params );
@@ -1367,10 +1377,19 @@ function rest_preload_api_request( $memo, $path ) {
 			$data['_links'] = $links;
 		}
 
-		$memo[ $path ] = array(
-			'body'    => $data,
-			'headers' => $response->headers,
-		);
+		if ( 'OPTIONS' === $method ) {
+			$response = rest_send_allow_header( $response, $server, $request );
+
+			$memo[ $method ][ $path ] = array(
+				'body'    => $data,
+				'headers' => $response->headers,
+			);
+		} else {
+			$memo[ $path ] = array(
+				'body'    => $data,
+				'headers' => $response->headers,
+			);
+		}
 	}
 
 	return $memo;
diff --git tests/phpunit/tests/rest-api.php tests/phpunit/tests/rest-api.php
index d30eb421c5..c82d94fff7 100644
--- tests/phpunit/tests/rest-api.php
+++ tests/phpunit/tests/rest-api.php
@@ -629,4 +629,25 @@ class Tests_REST_API extends WP_UnitTestCase {
 	function test_rest_preload_api_request_no_notices_php_52() {
 		$this->assertTrue( is_array( rest_preload_api_request( 0, '/' ) ) );
 	}
+
+	function test_rest_preload_api_request_with_method() {
+		$rest_server = $GLOBALS['wp_rest_server'];
+		$GLOBALS['wp_rest_server'] = null;
+
+		$preload_paths = array(
+			'/wp/v2/types',
+			array( '/wp/v2/media', 'OPTIONS' ),
+		);
+
+		$preload_data = array_reduce(
+			$preload_paths,
+			'rest_preload_api_request',
+			array()
+		);
+
+		$this->assertSame( array_keys( $preload_data ), array( '/wp/v2/types', 'OPTIONS' ) );
+		$this->assertTrue( isset( $preload_data['OPTIONS']['/wp/v2/media'] ) );
+
+		$GLOBALS['wp_rest_server'] = $rest_server;
+	}
 }
