diff --git a/core/lib/Drupal/Core/Form/FormSubmitter.php b/core/lib/Drupal/Core/Form/FormSubmitter.php
index fea8f54..7bf45a9 100644
--- a/core/lib/Drupal/Core/Form/FormSubmitter.php
+++ b/core/lib/Drupal/Core/Form/FormSubmitter.php
@@ -169,7 +169,10 @@ public function redirectForm($form_state) {
       }
 
       $form_state['redirect_route']->setAbsolute();
-      return new RedirectResponse($form_state['redirect_route']->toString());
+      // According to RFC 7231, 303 See Other status code must be used
+      // to redirect user agent (and not default 302 Found).
+      // @see http://tools.ietf.org/html/rfc7231#section-6.4.4
+      return new RedirectResponse($form_state['redirect_route']->toString(), Response::HTTP_SEE_OTHER);
     }
 
     // Only invoke a redirection if redirect value was not set to FALSE.
@@ -188,7 +191,7 @@ public function redirectForm($form_state) {
             $status_code = $form_state['redirect'][2];
           }
           else {
-            $status_code = 302;
+            $status_code = Response::HTTP_SEE_OTHER;
           }
           return new RedirectResponse($this->urlGenerator->generateFromPath($form_state['redirect'][0], $options), $status_code);
         }
@@ -200,7 +203,7 @@ public function redirectForm($form_state) {
             install_goto($form_state['redirect']);
           }
           else {
-            return new RedirectResponse($this->urlGenerator->generateFromPath($form_state['redirect'], array('absolute' => TRUE)));
+            return new RedirectResponse($this->urlGenerator->generateFromPath($form_state['redirect'], array('absolute' => TRUE)), Response::HTTP_SEE_OTHER);
           }
         }
       }
@@ -209,7 +212,7 @@ public function redirectForm($form_state) {
         'query' => $request->query->all(),
         'absolute' => TRUE,
       ));
-      return new RedirectResponse($url);
+      return new RedirectResponse($url, Response::HTTP_SEE_OTHER);
     }
   }
 
diff --git a/core/modules/simpletest/src/Tests/SimpleTestTest.php b/core/modules/simpletest/src/Tests/SimpleTestTest.php
index b2fffb3..9d16df3 100755
--- a/core/modules/simpletest/src/Tests/SimpleTestTest.php
+++ b/core/modules/simpletest/src/Tests/SimpleTestTest.php
@@ -108,7 +108,7 @@ function testInternalBrowser() {
       $this->assertNotEqual($old_user_id, $this->container->get('current_user')->id(), 'Current user service updated.');
       $headers = $this->drupalGetHeaders(TRUE);
       $this->assertEqual(count($headers), 2, 'There was one intermediate request.');
-      $this->assertTrue(strpos($headers[0][':status'], '302') !== FALSE, 'Intermediate response code was 302.');
+      $this->assertTrue(strpos($headers[0][':status'], '303') !== FALSE, 'Intermediate response code was 303.');
       $this->assertFalse(empty($headers[0]['location']), 'Intermediate request contained a Location header.');
       $this->assertEqual($this->getUrl(), $headers[0]['location'], 'HTTP redirect was followed');
       $this->assertFalse($this->drupalGetHeader('Location'), 'Headers from intermediate request were reset.');
