diff --git a/core/includes/common.inc b/core/includes/common.inc
index e0d1861..257c997 100644
--- a/core/includes/common.inc
+++ b/core/includes/common.inc
@@ -4651,15 +4651,15 @@ function _drupal_bootstrap_full($skip = FALSE) {
  *
  * @see drupal_page_header()
  */
-function drupal_page_set_cache($body) {
+function drupal_page_set_cache($response, $request) {
   global $base_root;
 
   if (drupal_page_is_cacheable()) {
     $cache = (object) array(
-      'cid' => $base_root . request_uri(),
+      'cid' => $base_root . $request->getRequestUri(),
       'data' => array(
-        'path' => current_path(),
-        'body' => $body,
+        'path' => $request->getQueryString(),
+        'body' => $response->getContent(),
         'title' => drupal_get_title(),
         'headers' => array(),
       ),
@@ -4668,17 +4668,11 @@ function drupal_page_set_cache($body) {
       'created' => REQUEST_TIME,
     );
 
-    // Restore preferred header names based on the lower-case names returned
-    // by drupal_get_http_header().
-    $header_names = _drupal_set_preferred_header_name();
-    foreach (drupal_get_http_header() as $name_lower => $value) {
-      $cache->data['headers'][$header_names[$name_lower]] = $value;
-      if ($name_lower == 'expires') {
-        // Use the actual timestamp from an Expires header if available.
-        $date = new DrupalDateTime($value);
-        $cache->expire = $date->getTimestamp();
-      }
-    }
+    $cache->data['headers'] = $response->headers->all();
+
+    // Use the actual timestamp from an Expires header if available.
+    $date = new DrupalDateTime($response->getExpires());
+    $cache->expire = $date->getTimestamp();
 
     if ($cache->data['body']) {
       if (config('system.performance')->get('response.gzip') && extension_loaded('zlib')) {
diff --git a/core/lib/Drupal/Core/EventSubscriber/FinishResponseSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/FinishResponseSubscriber.php
index c5c491c..535ba0d 100644
--- a/core/lib/Drupal/Core/EventSubscriber/FinishResponseSubscriber.php
+++ b/core/lib/Drupal/Core/EventSubscriber/FinishResponseSubscriber.php
@@ -46,6 +46,7 @@ public function onRespond(FilterResponseEvent $event) {
       return;
     }
 
+    $request = $event->getRequest();
     $response = $event->getResponse();
 
     // Set the X-UA-Compatible HTTP header to force IE to use the most recent
@@ -92,7 +93,7 @@ public function onRespond(FilterResponseEvent $event) {
     // Commit the user session, if needed.
     drupal_session_commit();
     $max_age = config('system.performance')->get('cache.page.max_age');
-    if ($max_age > 0 && ($cache = drupal_page_set_cache($response->getContent()))) {
+    if ($max_age > 0 && ($cache = drupal_page_set_cache($response, $request))) {
       drupal_serve_page_from_cache($cache);
       // drupal_serve_page_from_cache() already printed the response.
       $response->setContent('');
