Index: src/wp-admin/includes/post.php
===================================================================
--- src/wp-admin/includes/post.php	(revision 42970)
+++ src/wp-admin/includes/post.php	(working copy)
@@ -1780,6 +1780,9 @@
 			return 0;
 		}
 
+		// Add a revision if the content is significantly different.
+		wp_create_revision_for_autosave( $old_autosave, $new_autosave );
+
 		/**
 		 * Fires before an autosave is stored.
 		 *
@@ -1894,6 +1897,9 @@
 	}
 
 	if ( ! wp_check_post_lock( $post->ID ) && get_current_user_id() == $post->post_author && ( 'auto-draft' == $post->post_status || 'draft' == $post->post_status ) ) {
+		// Add a revision if the content is significantly different.
+		wp_create_revision_for_autosave( $post, wp_slash( $post_data ) );
+
 		// Drafts and auto-drafts are just overwritten by autosave for the same user if the post is not locked
 		return edit_post( wp_slash( $post_data ) );
 	} else {
Index: src/wp-includes/revision.php
===================================================================
--- src/wp-includes/revision.php	(revision 42970)
+++ src/wp-includes/revision.php	(working copy)
@@ -768,3 +768,62 @@
 
 	return true;
 }
+
+/**
+ * Create a revision when the autosave content is significantly different.
+ *
+ * If the autosave content is significantly different from the current post or the previous autosave,
+ * create a revision from the old data.
+ *
+ * @since 5.0.0
+ *
+ * @param WP_Post $post          The current post or the previous autosave revision.
+ * @param array   $autosave_data The autosave data.
+ */
+function wp_create_revision_for_autosave( $post, $autosave_data ) {
+
+	if ( ! wp_revisions_enabled( $post ) ) {
+		return;
+	}
+
+	$post_data = get_object_vars( $post );
+
+	if ( $post_data['post_type'] === 'revision' ) {
+		// If the old post is a revision, need to merge it with the actual post.
+		$parent_post = $this->get_parent( $post_data['post_parent'] );
+		foreach ( array_keys( _wp_post_revision_fields( $parent_post ) ) as $field ) {
+			if ( isset( $post_data[ $field ] ) ) {
+				$parent_post->$field = $post_data[ $field ];
+			}
+		}
+		$post_data = get_object_vars( $parent_post );
+	}
+
+	$old_length = strlen( $post_data['post_content'] );
+
+	if ( $old_length > 1000 ) {
+		$difference = 250;
+	} elseif ( $old_length > 500 ) {
+		$difference = (int) $old_length * 0.2;
+	} elseif ( $old_length > 50 ) {
+		$difference = (int) $old_length * 0.3;
+	} else {
+		$difference = (int) $old_length * 0.5;
+	}
+
+	$size_diff = strlen( $autosave_data['post_content'] ) - $old_length;
+	$create_revision = absint( $size_diff ) > $difference;
+
+	/**
+	 * Filter whether a revision is created when an autosave is made via the REST API.
+	 *
+	 * @since 5.0.0
+	 *
+	 * @param bool  $create_revision Create a revision?
+	 * @param array $post_data       The current post data.
+	 * @param int   $size_diff       The calculated autosave difference.
+	 */
+	if ( apply_filters( 'wp_create_revision_for_autosave', $create_revision, $post_data, $size_diff ) ) {
+		_wp_put_post_revision( $post_data );
+	}
+}
