diff --git a/core/core.services.yml b/core/core.services.yml
index e791572..15dc6a7 100644
--- a/core/core.services.yml
+++ b/core/core.services.yml
@@ -1039,6 +1039,7 @@ services:
     arguments: ['@path.alias_manager', '@path.current']
   route_access_response_subscriber:
     class: Drupal\Core\EventSubscriber\RouteAccessResponseSubscriber
+    arguments: ['@access_manager', '@current_user']
     tags:
       - { name: event_subscriber }
   client_error_response_subscriber:
diff --git a/core/lib/Drupal/Core/EventSubscriber/DefaultExceptionHtmlSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/DefaultExceptionHtmlSubscriber.php
index 770b96f..4e4ccb6 100644
--- a/core/lib/Drupal/Core/EventSubscriber/DefaultExceptionHtmlSubscriber.php
+++ b/core/lib/Drupal/Core/EventSubscriber/DefaultExceptionHtmlSubscriber.php
@@ -7,7 +7,6 @@
 
 namespace Drupal\Core\EventSubscriber;
 
-use Drupal\Core\Routing\AccessAwareRouterInterface;
 use Drupal\Core\Routing\RedirectDestinationInterface;
 use Drupal\Core\Url;
 use Drupal\Core\Utility\Error;
@@ -137,9 +136,6 @@ protected function makeSubrequest(GetResponseForExceptionEvent $event, $url, $st
       try {
         // Persist the 'exception' attribute to the subrequest.
         $sub_request->attributes->set('exception', $request->attributes->get('exception'));
-        // Persist the access result attribute to the subrequest, so that the
-        // error page inherits the access result of the master request.
-        $sub_request->attributes->set(AccessAwareRouterInterface::ACCESS_RESULT, $request->attributes->get(AccessAwareRouterInterface::ACCESS_RESULT));
 
         // Carry over the session to the subrequest.
         if ($session = $request->getSession()) {
diff --git a/core/lib/Drupal/Core/EventSubscriber/RouteAccessResponseSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/RouteAccessResponseSubscriber.php
index 16bc905..89e2319 100644
--- a/core/lib/Drupal/Core/EventSubscriber/RouteAccessResponseSubscriber.php
+++ b/core/lib/Drupal/Core/EventSubscriber/RouteAccessResponseSubscriber.php
@@ -7,28 +7,48 @@
 
 namespace Drupal\Core\EventSubscriber;
 
+use Drupal\Core\Access\AccessManagerInterface;
 use Drupal\Core\Cache\CacheableResponseInterface;
-use Drupal\Core\Routing\AccessAwareRouterInterface;
+use Drupal\Core\Session\AccountInterface;
+use Symfony\Cmf\Component\Routing\RouteObjectInterface;
+use Symfony\Component\EventDispatcher\EventSubscriberInterface;
 use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
 use Symfony\Component\HttpKernel\KernelEvents;
-use Symfony\Component\EventDispatcher\EventSubscriberInterface;
+use Symfony\Component\Routing\Matcher\RequestMatcherInterface;
 
 /**
  * Response subscriber to bubble the route's access result's cacheability.
- *
- * During routing, access checking is performed. The corresponding access result
- * is stored in the Request object's attributes, just like the matching route
- * object is. In case of a cacheable response, the route's access result also
- * determined the content of the response, and therefore the cacheability of the
- * route's access result should also be applied to the resulting response.
- *
- * @see \Drupal\Core\Routing\AccessAwareRouterInterface::ACCESS_RESULT
- * @see \Drupal\Core\Routing\AccessAwareRouter::matchRequest()
- * @see \Drupal\Core\Routing\AccessAwareRouter::checkAccess()
  */
 class RouteAccessResponseSubscriber implements EventSubscriberInterface {
 
   /**
+   * The menu link access service.
+   *
+   * @var \Drupal\Core\Access\AccessManagerInterface
+   */
+  protected $accessManager;
+
+  /**
+   * The current user object.
+   *
+   * @var \Drupal\Core\Session\AccountInterface
+   */
+  protected $currentUser;
+
+  /**
+   * Constructs the route access response subscriber.
+   *
+   * @param \Drupal\Core\Access\AccessManagerInterface $access_manager
+   *   The menu link access service.
+   * @param \Drupal\Core\Session\AccountInterface $current_user
+   *   The current user object.
+   */
+  public function __construct(AccessManagerInterface $access_manager, AccountInterface $current_user) {
+    $this->accessManager = $access_manager;
+    $this->currentUser = $current_user;
+  }
+
+  /**
    * Bubbles the route's access result' cacheability metadata.
    *
    * @param \Symfony\Component\HttpKernel\Event\FilterResponseEvent $event
@@ -45,8 +65,10 @@ public function onRespond(FilterResponseEvent $event) {
     }
 
     $request = $event->getRequest();
-    $access_result = $request->attributes->get(AccessAwareRouterInterface::ACCESS_RESULT);
-    $response->addCacheableDependency($access_result);
+    if ($request->attributes->has(RouteObjectInterface::ROUTE_OBJECT)) {
+      $access = $this->accessManager->checkRequest($request, $this->currentUser, TRUE);
+      $response->addCacheableDependency($access);
+    }
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Routing/AccessAwareRouter.php b/core/lib/Drupal/Core/Routing/AccessAwareRouter.php
index 8a115b2..19acf8a 100644
--- a/core/lib/Drupal/Core/Routing/AccessAwareRouter.php
+++ b/core/lib/Drupal/Core/Routing/AccessAwareRouter.php
@@ -104,11 +104,6 @@ protected function checkAccess(Request $request) {
     // The cacheability (if any) of this request's access check result must be
     // applied to the response.
     $access_result = $this->accessManager->checkRequest($request, $this->account, TRUE);
-    // Allow a master request to set the access result for a subrequest: if an
-    // access result attribute is already set, don't overwrite it.
-    if (!$request->attributes->has(AccessAwareRouterInterface::ACCESS_RESULT)) {
-      $request->attributes->set(AccessAwareRouterInterface::ACCESS_RESULT, $access_result);
-    }
     if (!$access_result->isAllowed()) {
       throw new AccessDeniedHttpException();
     }
diff --git a/core/lib/Drupal/Core/Routing/AccessAwareRouterInterface.php b/core/lib/Drupal/Core/Routing/AccessAwareRouterInterface.php
index 0fc82b8..a7339d3 100644
--- a/core/lib/Drupal/Core/Routing/AccessAwareRouterInterface.php
+++ b/core/lib/Drupal/Core/Routing/AccessAwareRouterInterface.php
@@ -16,11 +16,6 @@
 interface AccessAwareRouterInterface extends RouterInterface, RequestMatcherInterface {
 
   /**
-   * Attribute name of the access result for the request..
-   */
-  const ACCESS_RESULT = '_access_result';
-
-  /**
    * {@inheritdoc}
    *
    * @throws \Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException
diff --git a/core/tests/Drupal/Tests/Core/Routing/AccessAwareRouterTest.php b/core/tests/Drupal/Tests/Core/Routing/AccessAwareRouterTest.php
index b343e3b..0debe78 100644
--- a/core/tests/Drupal/Tests/Core/Routing/AccessAwareRouterTest.php
+++ b/core/tests/Drupal/Tests/Core/Routing/AccessAwareRouterTest.php
@@ -83,7 +83,6 @@ public function testMatchRequestAllowed() {
     $parameters = $this->router->matchRequest($request);
     $expected = [
       RouteObjectInterface::ROUTE_OBJECT => $this->route,
-      AccessAwareRouterInterface::ACCESS_RESULT => $access_result,
     ];
     $this->assertSame($expected, $request->attributes->all());
     $this->assertSame($expected, $parameters);
@@ -103,9 +102,7 @@ public function testMatchRequestDenied() {
       ->with($request)
       ->willReturn($access_result);
     $parameters = $this->router->matchRequest($request);
-    $expected = [
-      AccessAwareRouterInterface::ACCESS_RESULT => $access_result,
-    ];
+    $expected = [];
     $this->assertSame($expected, $request->attributes->all());
     $this->assertSame($expected, $parameters);
   }
