diff --git a/core/includes/bootstrap.inc b/core/includes/bootstrap.inc index 8d0989836c503b8cbf5b22571079300ad50b424a..055301c24d9b3ad84ee15c62464295076f6e7cf3 100644 --- a/core/includes/bootstrap.inc +++ b/core/includes/bootstrap.inc @@ -4,6 +4,7 @@ * Functions that need to be loaded on every Drupal request. */ +use Drupal\Component\Datetime\DateTimePlus; use Drupal\Component\Utility\Crypt; use Drupal\Component\Utility\Environment; use Drupal\Component\Utility\String; @@ -572,7 +573,7 @@ function drupal_page_header() { $default_headers = array( 'Expires' => 'Sun, 19 Nov 1978 05:00:00 GMT', - 'Last-Modified' => gmdate(DATE_RFC1123, REQUEST_TIME), + 'Last-Modified' => gmdate(DateTimePlus::RFC7231, REQUEST_TIME), 'Cache-Control' => 'no-cache, must-revalidate, post-check=0, pre-check=0', 'ETag' => '"' . REQUEST_TIME . '"', ); diff --git a/core/lib/Drupal/Component/Datetime/DateTimePlus.php b/core/lib/Drupal/Component/Datetime/DateTimePlus.php index 4c4122c4c65d074ec5111d6aac2e2ee9a613d228..fedab23ee3624a736148a421de08da94e3402f54 100644 --- a/core/lib/Drupal/Component/Datetime/DateTimePlus.php +++ b/core/lib/Drupal/Component/Datetime/DateTimePlus.php @@ -30,6 +30,15 @@ class DateTimePlus extends \DateTime { const FORMAT = 'Y-m-d H:i:s'; + /** + * A RFC7231 Compliant date. + * + * http://tools.ietf.org/html/rfc7231#section-7.1.1.1 + * + * Example: Sun, 06 Nov 1994 08:49:37 GMT + */ + const RFC7231 = 'D, d M Y H:i:s \G\M\T'; + /** * An array of possible date parts. */ diff --git a/core/lib/Drupal/Core/EventSubscriber/FinishResponseSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/FinishResponseSubscriber.php index 7a98950e5c018d61ec958e0733740ff2d10acbe1..eb3960050aa5aba21b3fea237f09af09bd394930 100644 --- a/core/lib/Drupal/Core/EventSubscriber/FinishResponseSubscriber.php +++ b/core/lib/Drupal/Core/EventSubscriber/FinishResponseSubscriber.php @@ -7,6 +7,7 @@ namespace Drupal\Core\EventSubscriber; +use Drupal\Component\Datetime\DateTimePlus; use Drupal\Core\Config\Config; use Drupal\Core\Config\ConfigFactoryInterface; use Drupal\Core\Language\LanguageManager; @@ -179,7 +180,7 @@ protected function setResponseCacheable(Response $response, Request $request) { // Last-Modified and an ETag header on the response. if (!$response->headers->has('Last-Modified')) { $timestamp = REQUEST_TIME; - $response->setLastModified(new \DateTime(gmdate(DATE_RFC1123, REQUEST_TIME))); + $response->setLastModified(new \DateTime(gmdate(DateTimePlus::RFC7231, REQUEST_TIME))); } else { $timestamp = $response->getLastModified()->getTimestamp(); diff --git a/core/modules/aggregator/src/Plugin/aggregator/fetcher/DefaultFetcher.php b/core/modules/aggregator/src/Plugin/aggregator/fetcher/DefaultFetcher.php index ff2f1a38a469bbed50dfa70b067b8d3255984f23..ce3669651640d2f721f7a5809a1f5b7695821fe1 100644 --- a/core/modules/aggregator/src/Plugin/aggregator/fetcher/DefaultFetcher.php +++ b/core/modules/aggregator/src/Plugin/aggregator/fetcher/DefaultFetcher.php @@ -9,6 +9,7 @@ use Drupal\aggregator\Plugin\FetcherInterface; use Drupal\aggregator\FeedInterface; +use Drupal\Component\Datetime\DateTimePlus; use Drupal\Core\Plugin\ContainerFactoryPluginInterface; use GuzzleHttp\ClientInterface; use GuzzleHttp\Exception\RequestException; @@ -65,7 +66,7 @@ public function fetch(FeedInterface $feed) { $request->addHeader('If-None-Match', $feed->getEtag()); } if ($feed->getLastModified()) { - $request->addHeader('If-Modified-Since', gmdate(DATE_RFC1123, $feed->getLastModified())); + $request->addHeader('If-Modified-Since', gmdate(DateTimePlus::RFC7231, $feed->getLastModified())); } try { diff --git a/core/modules/aggregator/tests/modules/aggregator_test/src/Controller/AggregatorTestRssController.php b/core/modules/aggregator/tests/modules/aggregator_test/src/Controller/AggregatorTestRssController.php index 28d024bfb348935cbcffa314996b4e289a4ec2d3..067d669ae7d9c9b1e1a08eeaedc1e75f243e8010 100644 --- a/core/modules/aggregator/tests/modules/aggregator_test/src/Controller/AggregatorTestRssController.php +++ b/core/modules/aggregator/tests/modules/aggregator_test/src/Controller/AggregatorTestRssController.php @@ -6,6 +6,7 @@ namespace Drupal\aggregator_test\Controller; +use Drupal\Component\Datetime\DateTimePlus; use Drupal\Core\Controller\ControllerBase; use Drupal\Component\Utility\Crypt; use Symfony\Component\HttpFoundation\Response; @@ -41,7 +42,7 @@ public function testFeed($use_last_modified, $use_etag, Request $request) { // Send appropriate response. We respond with a 304 not modified on either // etag or on last modified. if ($use_last_modified) { - $response->headers->set('Last-Modified', gmdate(DATE_RFC1123, $last_modified)); + $response->headers->set('Last-Modified', gmdate(DateTimePlus::RFC7231, $last_modified)); } if ($use_etag) { $response->headers->set('ETag', $etag); diff --git a/core/modules/system/src/Tests/Bootstrap/PageCacheTest.php b/core/modules/system/src/Tests/Bootstrap/PageCacheTest.php index f487a1e8d2429a8b716511d7188c4501b102b5c9..55f7d1a53ae25c4d69d894511891d0ba61c77056 100644 --- a/core/modules/system/src/Tests/Bootstrap/PageCacheTest.php +++ b/core/modules/system/src/Tests/Bootstrap/PageCacheTest.php @@ -7,6 +7,7 @@ namespace Drupal\system\Tests\Bootstrap; +use Drupal\Component\Datetime\DateTimePlus; use Symfony\Component\Routing\RequestContext; use Drupal\simpletest\WebTestBase; use Drupal\Core\Cache\Cache; @@ -141,7 +142,7 @@ function testConditionalRequests() { $this->assertResponse(200, 'Conditional request without If-None-Match returned 200 OK.'); $this->assertEqual($this->drupalGetHeader('X-Drupal-Cache'), 'HIT', 'Page was cached.'); - $this->drupalGet('', array(), array('If-Modified-Since: ' . gmdate(DATE_RFC1123, strtotime($last_modified) + 1), 'If-None-Match: ' . $etag)); + $this->drupalGet('', array(), array('If-Modified-Since: ' . gmdate(DateTimePlus::RFC7231, strtotime($last_modified) + 1), 'If-None-Match: ' . $etag)); $this->assertResponse(200, 'Conditional request with new a If-Modified-Since date newer than Last-Modified returned 200 OK.'); $this->assertEqual($this->drupalGetHeader('X-Drupal-Cache'), 'HIT', 'Page was cached.'); diff --git a/core/modules/toolbar/toolbar.module b/core/modules/toolbar/toolbar.module index f427f8407f6890481ce105d575508fbb344f3cdc..a8b4f0815c96c909d5973d64c35e62722cbf72ec 100644 --- a/core/modules/toolbar/toolbar.module +++ b/core/modules/toolbar/toolbar.module @@ -5,13 +5,13 @@ * Administration toolbar for quick access to top level administration items. */ -use Drupal\Component\Utility\String; use Drupal\Core\Cache\Cache; use Drupal\Core\Render\Element; use Drupal\Core\Routing\RouteMatchInterface; use Drupal\Core\Template\Attribute; +use Drupal\Component\Datetime\DateTimePlus; use Drupal\Component\Utility\Crypt; -use Symfony\Component\HttpFoundation\Response; +use Drupal\Component\Utility\String; use Drupal\menu_link\MenuLinkInterface; use Drupal\user\RoleInterface; use Drupal\user\UserInterface; @@ -139,7 +139,7 @@ function _toolbar_initialize_page_cache() { // accesses the callback URL again (e.g., after clearing the browser cache or // when force-reloading a Drupal page). $max_age = 3600 * 24 * 365; - drupal_add_http_header('Expires', gmdate(DATE_RFC1123, REQUEST_TIME + $max_age)); + drupal_add_http_header('Expires', gmdate(DateTimePlus::RFC7231, REQUEST_TIME + $max_age)); drupal_add_http_header('Cache-Control', 'private, max-age=' . $max_age); }