diff --git a/app/code/Magento/PageCache/Block/Javascript.php b/app/code/Magento/PageCache/Block/Javascript.php
index bfc3b4a1a1e8b64e376b0889fa5bd75a4bfb08fe..980436b677bd3b51b23aaff170c32994e4b312a6 100644
--- a/app/code/Magento/PageCache/Block/Javascript.php
+++ b/app/code/Magento/PageCache/Block/Javascript.php
@@ -27,9 +27,10 @@ class Javascript extends \Magento\Framework\View\Element\Template
             ),
             'handles' => $this->_layout->getUpdate()->getHandles(),
             'originalRequest' => [
-                'route' => $this->getRequest()->getRouteName(),
+                'route'      => $this->getRequest()->getRouteName(),
                 'controller' => $this->getRequest()->getControllerName(),
-                'action' => $this->getRequest()->getActionName(),
+                'action'     => $this->getRequest()->getActionName(),
+                'uri'        => $this->getRequest()->getRequestUri(),
             ],
             'versionCookieName' => \Magento\Framework\App\PageCache\Version::COOKIE_NAME
         ];
diff --git a/app/code/Magento/PageCache/Controller/Block/Render.php b/app/code/Magento/PageCache/Controller/Block/Render.php
index 1544cca2cfacb36dfa57fa75fd8ae1138e42a8f5..789fb1b696fe0b824666f3f19a0e22dc0f3ea7a2 100644
--- a/app/code/Magento/PageCache/Controller/Block/Render.php
+++ b/app/code/Magento/PageCache/Controller/Block/Render.php
@@ -24,12 +24,15 @@ class Render extends \Magento\PageCache\Controller\Block
         $currentRoute = $this->getRequest()->getRouteName();
         $currentControllerName = $this->getRequest()->getControllerName();
         $currentActionName = $this->getRequest()->getActionName();
+        $currentRequestUri = $this->getRequest()->getRequestUri();
 
         $origRequest = $this->getRequest()->getParam('originalRequest');
         $origRequest = json_decode($origRequest, true);
         $this->getRequest()->setRouteName($origRequest['route']);
         $this->getRequest()->setControllerName($origRequest['controller']);
         $this->getRequest()->setActionName($origRequest['action']);
+        $this->getRequest()->setRequestUri($origRequest['uri']);
+
         /** @var \Magento\Framework\View\Element\BlockInterface[] $blocks */
         $blocks = $this->_getBlocks();
         $data = [];
@@ -41,6 +44,7 @@ class Render extends \Magento\PageCache\Controller\Block
         $this->getRequest()->setRouteName($currentRoute);
         $this->getRequest()->setControllerName($currentControllerName);
         $this->getRequest()->setActionName($currentActionName);
+        $this->getRequest()->setRequestUri($currentRequestUri);
 
         $this->getResponse()->setPrivateHeaders(\Magento\PageCache\Helper\Data::PRIVATE_MAX_AGE_CACHE);
         $this->translateInline->processResponseBody($data);
diff --git a/app/code/Magento/PageCache/Test/Unit/Block/JavascriptTest.php b/app/code/Magento/PageCache/Test/Unit/Block/JavascriptTest.php
index 56a23aa1ac84f28e78958214c2e6db5b2c190e70..5cac08b148cf2c401bf2b58fc2b7450b805be74b 100644
--- a/app/code/Magento/PageCache/Test/Unit/Block/JavascriptTest.php
+++ b/app/code/Magento/PageCache/Test/Unit/Block/JavascriptTest.php
@@ -54,12 +54,14 @@ class JavascriptTest extends \PHPUnit_Framework_TestCase
                 'getControllerName',
                 'getModuleName',
                 'getActionName',
+                'getRequestUri',
                 'getParam',
                 'setParams',
                 'getParams',
                 'setModuleName',
                 'isSecure',
                 'setActionName',
+                'setRequestUri',
                 'getCookie'
             ],
             [],
@@ -122,6 +124,9 @@ class JavascriptTest extends \PHPUnit_Framework_TestCase
         $this->requestMock->expects($this->once())
             ->method('getActionName')
             ->will($this->returnValue('action'));
+        $this->requestMock->expects($this->once())
+            ->method('getRequestUri')
+            ->will($this->returnValue('uri'));
         $this->urlBuilderMock->expects($this->once())
             ->method('getUrl')
             ->willReturn($url);
@@ -153,10 +158,11 @@ class JavascriptTest extends \PHPUnit_Framework_TestCase
      * @param string $route
      * @param string $controller
      * @param string $action
+     * @param string $uri
      * @param string $expectedResult
      * @dataProvider getScriptOptionsPrivateContentDataProvider
      */
-    public function testGetScriptOptionsPrivateContent($url, $route, $controller, $action, $expectedResult)
+    public function testGetScriptOptionsPrivateContent($url, $route, $controller, $action, $uri, $expectedResult)
     {
         $handles = [
             'some',
@@ -179,6 +185,10 @@ class JavascriptTest extends \PHPUnit_Framework_TestCase
             ->method('getActionName')
             ->will($this->returnValue($action));
 
+        $this->requestMock->expects($this->once())
+            ->method('getRequestUri')
+            ->will($this->returnValue($uri));
+
         $this->urlBuilderMock->expects($this->once())
             ->method('getUrl')
             ->willReturn($url);
@@ -191,14 +201,17 @@ class JavascriptTest extends \PHPUnit_Framework_TestCase
 
     public function getScriptOptionsPrivateContentDataProvider()
     {
+        // @codingStandardsIgnoreStart
         return [
             'http' => [
-                'url' => 'http://some-name.com/page_cache/block/render',
-                'route' => 'route',
-                'controller' => 'controller',
-                'action' => 'action',
-                'expectedResult' => '~"originalRequest":{"route":"route","controller":"controller","action":"action"}~'
+                'url'            => 'http://some-name.com/page_cache/block/render',
+                'route'          => 'route',
+                'controller'     => 'controller',
+                'action'         => 'action',
+                'uri'            => 'uri',
+                'expectedResult' => '~"originalRequest":{"route":"route","controller":"controller","action":"action","uri":"uri"}~'
             ],
         ];
+        //@codingStandardsIgnoreEnd
     }
 }
diff --git a/app/code/Magento/PageCache/Test/Unit/Controller/Block/RenderTest.php b/app/code/Magento/PageCache/Test/Unit/Controller/Block/RenderTest.php
index 0bd7fcee22587e778d4cf4d8a849cfa9b030d11a..a9493a7a4c3abb2b6ff6472ccfce3007d0089ea2 100644
--- a/app/code/Magento/PageCache/Test/Unit/Controller/Block/RenderTest.php
+++ b/app/code/Magento/PageCache/Test/Unit/Controller/Block/RenderTest.php
@@ -88,11 +88,11 @@ class RenderTest extends \PHPUnit_Framework_TestCase
     public function testExecuteNoParams()
     {
         $this->requestMock->expects($this->once())->method('isAjax')->will($this->returnValue(true));
-        $this->requestMock->expects($this->at(8))
+        $this->requestMock->expects($this->at(10))
             ->method('getParam')
             ->with($this->equalTo('blocks'), $this->equalTo(''))
             ->will($this->returnValue(''));
-        $this->requestMock->expects($this->at(9))
+        $this->requestMock->expects($this->at(11))
             ->method('getParam')
             ->with($this->equalTo('handles'), $this->equalTo(''))
             ->will($this->returnValue(''));
@@ -103,7 +103,7 @@ class RenderTest extends \PHPUnit_Framework_TestCase
     {
         $blocks = ['block1', 'block2'];
         $handles = ['handle1', 'handle2'];
-        $originalRequest = '{"route":"route","controller":"controller","action":"action"}';
+        $originalRequest = '{"route":"route","controller":"controller","action":"action","uri":"uri"}';
         $expectedData = ['block1' => 'data1', 'block2' => 'data2'];
 
         $blockInstance1 = $this->getMock(
@@ -136,15 +136,18 @@ class RenderTest extends \PHPUnit_Framework_TestCase
             ->method('getActionName')
             ->will($this->returnValue('render'));
         $this->requestMock->expects($this->at(4))
+            ->method('getRequestUri')
+            ->will($this->returnValue('uri'));
+        $this->requestMock->expects($this->at(5))
             ->method('getParam')
             ->with($this->equalTo('originalRequest'))
             ->will($this->returnValue($originalRequest));
 
-        $this->requestMock->expects($this->at(8))
+        $this->requestMock->expects($this->at(10))
             ->method('getParam')
             ->with($this->equalTo('blocks'), $this->equalTo(''))
             ->will($this->returnValue(json_encode($blocks)));
-        $this->requestMock->expects($this->at(9))
+        $this->requestMock->expects($this->at(11))
             ->method('getParam')
             ->with($this->equalTo('handles'), $this->equalTo(''))
             ->will($this->returnValue(json_encode($handles)));
diff --git a/dev/tests/integration/testsuite/Magento/Framework/Url/Helper/DataTest.php b/dev/tests/integration/testsuite/Magento/Framework/Url/Helper/DataTest.php
index ce94b1e855a8acbcf54132c42c930a80783fa932..d40ef433bcc0a6c958bded00ad3a9a6bc78e7173 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/Url/Helper/DataTest.php
+++ b/dev/tests/integration/testsuite/Magento/Framework/Url/Helper/DataTest.php
@@ -14,8 +14,6 @@ class DataTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
-        $_SERVER['HTTP_HOST'] = 'example.com';
-        $_SERVER['REQUEST_URI'] = '/fancy_uri';
         $this->_helper = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
             'Magento\Framework\Url\Helper\Data'
         );
@@ -23,12 +21,12 @@ class DataTest extends \PHPUnit_Framework_TestCase
 
     public function testGetCurrentBase64Url()
     {
-        $this->assertEquals('aHR0cDovL2xvY2FsaG9zdDo4MQ,,', $this->_helper->getCurrentBase64Url());
+        $this->assertEquals('aHR0cDovL2xvY2FsaG9zdDo4MS8,', $this->_helper->getCurrentBase64Url());
     }
 
     public function testGetEncodedUrl()
     {
-        $this->assertEquals('aHR0cDovL2xvY2FsaG9zdDo4MQ,,', $this->_helper->getEncodedUrl());
+        $this->assertEquals('aHR0cDovL2xvY2FsaG9zdDo4MS8,', $this->_helper->getEncodedUrl());
         $this->assertEquals('aHR0cDovL2V4YW1wbGUuY29tLw,,', $this->_helper->getEncodedUrl('http://example.com/'));
     }
 }
diff --git a/lib/internal/Magento/Framework/Test/Unit/UrlTest.php b/lib/internal/Magento/Framework/Test/Unit/UrlTest.php
index baa556bb19f789d773d6c48fdf9ac454ac19f951..c5bcc5175ab5dbe63db53e0ea4fcad888e96c8fa 100644
--- a/lib/internal/Magento/Framework/Test/Unit/UrlTest.php
+++ b/lib/internal/Magento/Framework/Test/Unit/UrlTest.php
@@ -121,7 +121,7 @@ class UrlTest extends \PHPUnit_Framework_TestCase
     public function testGetCurrentUrl($httpHost, $url)
     {
         $requestMock = $this->getRequestMock();
-        $requestMock->expects($this->once())->method('getServer')->with('REQUEST_URI')->willReturn('/fancy_uri');
+        $requestMock->expects($this->once())->method('getRequestUri')->willReturn('/fancy_uri');
         $requestMock->expects($this->once())->method('getScheme')->will($this->returnValue('http'));
         $requestMock->expects($this->once())->method('getHttpHost')->will($this->returnValue($httpHost));
         $model = $this->getUrlModel(['request' => $requestMock]);
diff --git a/lib/internal/Magento/Framework/Url.php b/lib/internal/Magento/Framework/Url.php
index 7d4c4c33399ac0ae5ee53379727681a291cc7bfd..a300ebe01f4858c06dd598d769d1352ed79394d8 100644
--- a/lib/internal/Magento/Framework/Url.php
+++ b/lib/internal/Magento/Framework/Url.php
@@ -1045,7 +1045,7 @@ class Url extends \Magento\Framework\Object implements \Magento\Framework\UrlInt
                 $port = ':' . $httpHostWithPort[1];
             }
         }
-        return $this->_request->getScheme() . '://' . $httpHost . $port . $this->_request->getServer('REQUEST_URI');
+        return $this->_request->getScheme() . '://' . $httpHost . $port . $this->_request->getRequestUri();
     }
 
     /**