diff --git a/composer.lock b/composer.lock
index 959558421e8cd141b1c4e05d3b087ed4868fee2b..14af35207b3fe9339cb7e49cdf84784b6d3a1032 100644
--- a/composer.lock
+++ b/composer.lock
@@ -457,7 +457,7 @@
             "dist": {
                 "type": "path",
                 "url": "core",
-                "reference": "1135d82ca80e22e7f25b1bd9a8613cae5ae06372"
+                "reference": "768f1baa1d20571f5f326b64ec749ddd5d1039fc"
             },
             "require": {
                 "asm89/stack-cors": "^1.1",
@@ -494,7 +494,7 @@
                 "symfony/http-kernel": "^4.4",
                 "symfony/polyfill-iconv": "^1.0",
                 "symfony/process": "^4.4",
-                "symfony/psr-http-message-bridge": "^1.2.0",
+                "symfony/psr-http-message-bridge": "^2.0",
                 "symfony/routing": "^4.4",
                 "symfony/serializer": "^4.4",
                 "symfony/translation": "^4.4",
@@ -2930,16 +2930,16 @@
         },
         {
             "name": "symfony/psr-http-message-bridge",
-            "version": "v1.3.0",
+            "version": "v2.0.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/psr-http-message-bridge.git",
-                "reference": "9d3e80d54d9ae747ad573cad796e8e247df7b796"
+                "reference": "ce709cd9c90872c08c2427b45739d5f3c781ab4f"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/9d3e80d54d9ae747ad573cad796e8e247df7b796",
-                "reference": "9d3e80d54d9ae747ad573cad796e8e247df7b796",
+                "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/ce709cd9c90872c08c2427b45739d5f3c781ab4f",
+                "reference": "ce709cd9c90872c08c2427b45739d5f3c781ab4f",
                 "shasum": ""
             },
             "require": {
@@ -2949,8 +2949,7 @@
             },
             "require-dev": {
                 "nyholm/psr7": "^1.1",
-                "symfony/phpunit-bridge": "^4.4 || ^5.0",
-                "zendframework/zend-diactoros": "^1.4.1 || ^2.0"
+                "symfony/phpunit-bridge": "^4.4 || ^5.0"
             },
             "suggest": {
                 "nyholm/psr7": "For a super lightweight PSR-7/17 implementation"
@@ -2958,7 +2957,7 @@
             "type": "symfony-bridge",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.3-dev"
+                    "dev-master": "2.0-dev"
                 }
             },
             "autoload": {
@@ -2991,7 +2990,7 @@
                 "psr-17",
                 "psr-7"
             ],
-            "time": "2019-11-25T19:33:50+00:00"
+            "time": "2020-01-02T08:07:11+00:00"
         },
         {
             "name": "symfony/routing",
diff --git a/composer/Metapackage/CoreRecommended/composer.json b/composer/Metapackage/CoreRecommended/composer.json
index 82783170abf6d76ea66d390b91d909234f29706b..2ded49860d460d48947189bbac3afd1d7adec857 100644
--- a/composer/Metapackage/CoreRecommended/composer.json
+++ b/composer/Metapackage/CoreRecommended/composer.json
@@ -51,7 +51,7 @@
         "symfony/polyfill-php72": "v1.14.0",
         "symfony/polyfill-php73": "v1.14.0",
         "symfony/process": "v4.4.4",
-        "symfony/psr-http-message-bridge": "v1.3.0",
+        "symfony/psr-http-message-bridge": "v2.0.0",
         "symfony/routing": "v4.4.4",
         "symfony/serializer": "v4.4.4",
         "symfony/service-contracts": "v2.0.1",
diff --git a/core/composer.json b/core/composer.json
index 430d352091e8123248cb42658dc72de88ecf2dfd..6e4adfeeb1db02b25819d040aa8b093139c33389 100644
--- a/core/composer.json
+++ b/core/composer.json
@@ -40,7 +40,7 @@
         "stack/builder": "^1.0",
         "egulias/email-validator": "^2.0",
         "masterminds/html5": "^2.1",
-        "symfony/psr-http-message-bridge": "^1.2.0",
+        "symfony/psr-http-message-bridge": "^2.0",
         "laminas/laminas-diactoros": "^2.1",
         "composer/semver": "^1.0",
         "asm89/stack-cors": "^1.1",
diff --git a/core/core.services.yml b/core/core.services.yml
index cbfeefe9ef289966aa49a2100100358e61c352a0..f6bdc1d18688449f241a2a7e38cd1a4548bdd7cf 100644
--- a/core/core.services.yml
+++ b/core/core.services.yml
@@ -786,8 +786,21 @@ services:
        - { name: http_middleware, priority: 250 }
   psr7.http_foundation_factory:
     class: Symfony\Bridge\PsrHttpMessage\Factory\HttpFoundationFactory
+  psr17.server_request_factory:
+    class: Laminas\Diactoros\ServerRequestFactory
+    public: false
+  psr17.stream_factory:
+    class: Laminas\Diactoros\StreamFactory
+    public: false
+  psr17.uploaded_file_factory:
+    class: Laminas\Diactoros\UploadedFileFactory
+    public: false
+  psr17.response_factory:
+    class: Laminas\Diactoros\ResponseFactory
+    public: false
   psr7.http_message_factory:
-    class: Symfony\Bridge\PsrHttpMessage\Factory\DiactorosFactory
+    class: Symfony\Bridge\PsrHttpMessage\Factory\PsrHttpFactory
+    arguments: ['@psr17.server_request_factory', '@psr17.stream_factory', '@psr17.uploaded_file_factory', '@psr17.response_factory']
   language_manager:
     class: Drupal\Core\Language\LanguageManager
     arguments: ['@language.default']
diff --git a/core/tests/Drupal/Tests/Core/Controller/ControllerResolverTest.php b/core/tests/Drupal/Tests/Core/Controller/ControllerResolverTest.php
index 8ea1fe1325dbb4a06e775948a34246b409de424c..ce7b4698f9fe985f7b8b90467714068070302063 100644
--- a/core/tests/Drupal/Tests/Core/Controller/ControllerResolverTest.php
+++ b/core/tests/Drupal/Tests/Core/Controller/ControllerResolverTest.php
@@ -12,12 +12,16 @@
 use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
 use Drupal\Core\Routing\RouteMatchInterface;
 use Drupal\Tests\UnitTestCase;
+use Laminas\Diactoros\ResponseFactory;
+use Laminas\Diactoros\ServerRequestFactory;
+use Laminas\Diactoros\StreamFactory;
+use Laminas\Diactoros\UploadedFileFactory;
+use Symfony\Bridge\PsrHttpMessage\Factory\PsrHttpFactory;
 use Symfony\Component\DependencyInjection\ContainerAwareInterface;
 use Symfony\Component\DependencyInjection\ContainerAwareTrait;
 use Symfony\Component\DependencyInjection\ContainerBuilder;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 use Symfony\Component\HttpFoundation\Request;
-use Symfony\Bridge\PsrHttpMessage\Factory\DiactorosFactory;
 use Psr\Http\Message\ServerRequestInterface;
 
 /**
@@ -56,7 +60,7 @@ protected function setUp() {
     $this->container = new ContainerBuilder();
     $class_resolver = new ClassResolver();
     $class_resolver->setContainer($this->container);
-    $this->httpMessageFactory = new DiactorosFactory();
+    $this->httpMessageFactory = new PsrHttpFactory(new ServerRequestFactory(), new StreamFactory(), new UploadedFileFactory(), new ResponseFactory());
     $this->controllerResolver = new ControllerResolver($this->httpMessageFactory, $class_resolver);
   }
 
diff --git a/core/tests/Drupal/Tests/Listeners/DeprecationListenerTrait.php b/core/tests/Drupal/Tests/Listeners/DeprecationListenerTrait.php
index 86b67dcfd7c5e2b2ac958a2bd57d8eac0159accf..f77e63d3ad95fccd4c153eb642a57a226a29a7c8 100644
--- a/core/tests/Drupal/Tests/Listeners/DeprecationListenerTrait.php
+++ b/core/tests/Drupal/Tests/Listeners/DeprecationListenerTrait.php
@@ -139,11 +139,6 @@ public static function getSkippedDeprecations() {
     return [
       // The following deprecation message is skipped for testing purposes.
       '\Drupal\Tests\SkippedDeprecationTest deprecation',
-      // These deprecations are triggered by symfony/psr-http-message-factory
-      // 1.2, which can be installed if you update dependencies on php 7 or
-      // higher.
-      'The "Symfony\Bridge\PsrHttpMessage\Factory\DiactorosFactory" class is deprecated since symfony/psr-http-message-bridge 1.2, use PsrHttpFactory instead.',
-      'The "psr7.http_message_factory" service relies on the deprecated "Symfony\Bridge\PsrHttpMessage\Factory\DiactorosFactory" class. It should either be deprecated or its implementation upgraded.',
       // This deprecation comes from behat/mink-browserkit-driver when updating
       // symfony/browser-kit to 4.3+.
       'The "Symfony\Component\BrowserKit\Response::getStatus()" method is deprecated since Symfony 4.3, use getStatusCode() instead.',