diff --git a/core/modules/aggregator/lib/Drupal/aggregator/Plugin/aggregator/fetcher/DefaultFetcher.php b/core/modules/aggregator/lib/Drupal/aggregator/Plugin/aggregator/fetcher/DefaultFetcher.php
index adb1960..0b3ff8f 100644
--- a/core/modules/aggregator/lib/Drupal/aggregator/Plugin/aggregator/fetcher/DefaultFetcher.php
+++ b/core/modules/aggregator/lib/Drupal/aggregator/Plugin/aggregator/fetcher/DefaultFetcher.php
@@ -44,6 +44,12 @@ public function fetch(Feed $feed) {
 
     try {
       $response = $request->send();
+
+      // The feed has not changed.
+      if ($response->getStatusCode() == 304) {
+        return FALSE;
+      }
+
       $feed->source_string = $response->getBody(TRUE);
       $feed->etag = $response->getEtag();
       $feed->modified = strtotime($response->getLastModified());
diff --git a/core/modules/aggregator/lib/Drupal/aggregator/Tests/FeedFetcherPluginTest.php b/core/modules/aggregator/lib/Drupal/aggregator/Tests/FeedFetcherPluginTest.php
index 3209880..6d02830 100644
--- a/core/modules/aggregator/lib/Drupal/aggregator/Tests/FeedFetcherPluginTest.php
+++ b/core/modules/aggregator/lib/Drupal/aggregator/Tests/FeedFetcherPluginTest.php
@@ -48,4 +48,19 @@ public function testfetch() {
     // Fetch should fail due to feed name.
     $this->assertTrue(empty($feed->items));
   }
+
+  /**
+   * Test Not-Modified handling.
+   */
+  public function testNotModified() {
+    // Create feed with local url.
+    $feed_url = url('aggregator/test-feed/1/1', array(
+      'absolute' => TRUE,
+    ));
+    $feed = $this->createFeed($feed_url);
+    $this->updateFeedItems($feed);
+    $this->updateFeedItems($feed);
+    $this->assertNoText('The feed from ' . $feed->label() . ' seems to be broken because of error');
+    $this->assertText('There is no new syndicated content from ' . $feed->label() . '.');
+  }
 }
