diff --git a/core/lib/Drupal/Core/Cache/CacheableRedirectResponse.php b/core/lib/Drupal/Core/Cache/CacheableRedirectResponse.php
new file mode 100644
index 0000000..7d949ff
--- /dev/null
+++ b/core/lib/Drupal/Core/Cache/CacheableRedirectResponse.php
@@ -0,0 +1,26 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Core\Cache\CacheableResponse.
+ */
+
+namespace Drupal\Core\Cache;
+
+use Symfony\Component\HttpFoundation\RedirectResponse;
+
+/**
+ * A RedirectResponse that contains and can expose cacheability metadata.
+ *
+ * Supports Drupal's caching concepts: cache tags for invalidation and cache
+ * contexts for variations.
+ *
+ * @see \Drupal\Core\Cache\Cache
+ * @see \Drupal\Core\Cache\CacheableMetadata
+ * @see \Drupal\Core\Cache\CacheableResponseTrait
+ */
+class CacheableRedirectResponse extends RedirectResponse implements CacheableResponseInterface {
+
+  use CacheableResponseTrait;
+
+}
diff --git a/core/lib/Drupal/Core/EventSubscriber/RedirectLeadingSlashesSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/RedirectLeadingSlashesSubscriber.php
index 51ebbc2..84bdda1 100644
--- a/core/lib/Drupal/Core/EventSubscriber/RedirectLeadingSlashesSubscriber.php
+++ b/core/lib/Drupal/Core/EventSubscriber/RedirectLeadingSlashesSubscriber.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\Core\EventSubscriber;
 
-use Symfony\Component\HttpFoundation\RedirectResponse;
+use Drupal\Core\Cache\CacheableRedirectResponse;
 use Symfony\Component\HttpKernel\Event\GetResponseEvent;
 use Symfony\Component\HttpKernel\KernelEvents;
 use Symfony\Component\EventDispatcher\EventSubscriberInterface;
@@ -39,7 +39,7 @@ public function redirect(GetResponseEvent $event) {
       if ($qs) {
         $qs = '?' . $qs;
       }
-      $event->setResponse(new RedirectResponse($request->getUriForPath($path) . $qs));
+      $event->setResponse(new CacheableRedirectResponse($request->getUriForPath($path) . $qs));
     }
   }
 
diff --git a/core/lib/Drupal/Core/Routing/UrlGeneratorTrait.php b/core/lib/Drupal/Core/Routing/UrlGeneratorTrait.php
index 5a63105..5f1aa7d 100644
--- a/core/lib/Drupal/Core/Routing/UrlGeneratorTrait.php
+++ b/core/lib/Drupal/Core/Routing/UrlGeneratorTrait.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\Core\Routing;
 
-use Symfony\Component\HttpFoundation\RedirectResponse;
+use Drupal\Core\Cache\CacheableRedirectResponse;
 
 /**
  * Wrapper methods for the Url Generator.
@@ -35,8 +35,8 @@
    * @return string
    *   The generated URL for the given route.
    */
-  protected function url($route_name, $route_parameters = array(), $options = array()) {
-    return $this->getUrlGenerator()->generateFromRoute($route_name, $route_parameters, $options);
+  protected function url($route_name, $route_parameters = array(), $options = array(), $collect_bubbleable_metadata = FALSE) {
+    return $this->getUrlGenerator()->generateFromRoute($route_name, $route_parameters, $options, $collect_bubbleable_metadata);
   }
 
   /**
@@ -57,8 +57,9 @@ protected function url($route_name, $route_parameters = array(), $options = arra
    */
   protected function redirect($route_name, array $route_parameters = [], array $options = [], $status = 302) {
     $options['absolute'] = TRUE;
-    $url = $this->url($route_name, $route_parameters, $options);
-    return new RedirectResponse($url, $status);
+    $url = $this->url($route_name, $route_parameters, $options, TRUE);
+    $response = new CacheableRedirectResponse($url->getGeneratedUrl(), $status);
+    return $response->addCacheableDependency($url);
   }
 
   /**
