diff --git a/core/modules/search/lib/Drupal/search/Tests/SearchRankingTest.php b/core/modules/search/lib/Drupal/search/Tests/SearchRankingTest.php
index a57e483..85db2e7 100644
--- a/core/modules/search/lib/Drupal/search/Tests/SearchRankingTest.php
+++ b/core/modules/search/lib/Drupal/search/Tests/SearchRankingTest.php
@@ -81,12 +81,11 @@ class SearchRankingTest extends SearchTestBase {
     // Then View one of the nodes a bunch of times.
     // Manually calling statistics.php, simulating ajax behavior.
     $nid = $nodes['views'][1]->nid;
-    $post = http_build_query(array('nid' => $nid));
-    $headers = array('Content-Type' => 'application/x-www-form-urlencoded');
+    $query = http_build_query(array('nid' => $nid));
     global $base_url;
-    $stats_path = $base_url . '/' . drupal_get_path('module', 'statistics'). '/statistics.php';
+    $stats_path = $base_url . '/' . drupal_get_path('module', 'statistics'). '/statistics.php?' . $query;
     for ($i = 0; $i < 5; $i ++) {
-      drupal_http_request($stats_path, array('method' => 'POST', 'data' => $post, 'headers' => $headers, 'timeout' => 10000));
+      drupal_http_request($stats_path, array('method' => 'GET', 'timeout' => 10000));
     }
 
     // Test each of the possible rankings.
diff --git a/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsAdminTest.php b/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsAdminTest.php
index a24ec95..7421736 100644
--- a/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsAdminTest.php
+++ b/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsAdminTest.php
@@ -80,11 +80,10 @@ class StatisticsAdminTest extends WebTestBase {
     $this->drupalGet('node/' . $this->test_node->nid);
     // Manually calling statistics.php, simulating ajax behavior.
     $nid = $this->test_node->nid;
-    $post = http_build_query(array('nid' => $nid));
-    $headers = array('Content-Type' => 'application/x-www-form-urlencoded');
+    $query = http_build_query(array('nid' => $nid));
     global $base_url;
-    $stats_path = $base_url . '/' . drupal_get_path('module', 'statistics'). '/statistics.php';
-    drupal_http_request($stats_path, array('method' => 'POST', 'data' => $post, 'headers' => $headers, 'timeout' => 10000));
+    $stats_path = $base_url . '/' . drupal_get_path('module', 'statistics'). '/statistics.php?' . $query;
+    drupal_http_request($stats_path, array('method' => 'GET', 'timeout' => 10000));
 
     $this->drupalGet('admin/reports/pages');
     $this->assertText('node/1', t('Test node found.'));
@@ -92,11 +91,11 @@ class StatisticsAdminTest extends WebTestBase {
     // Hit the node again (the counter is incremented after the hit, so
     // "1 view" will actually be shown when the node is hit the second time).
     $this->drupalGet('node/' . $this->test_node->nid);
-    drupal_http_request($stats_path, array('method' => 'POST', 'data' => $post, 'headers' => $headers, 'timeout' => 10000));
+    drupal_http_request($stats_path, array('method' => 'GET', 'timeout' => 10000));
     $this->assertText('1 view', t('Node is viewed once.'));
 
     $this->drupalGet('node/' . $this->test_node->nid);
-    drupal_http_request($stats_path, array('method' => 'POST', 'data' => $post, 'headers' => $headers, 'timeout' => 10000));
+    drupal_http_request($stats_path, array('method' => 'GET', 'timeout' => 10000));
     $this->assertText('2 views', t('Node is viewed 2 times.'));
   }
 
@@ -109,11 +108,10 @@ class StatisticsAdminTest extends WebTestBase {
     $this->drupalGet('node/' . $this->test_node->nid);
     // Manually calling statistics.php, simulating ajax behavior.
     $nid = $this->test_node->nid;
-    $post = http_build_query(array('nid' => $nid));
-    $headers = array('Content-Type' => 'application/x-www-form-urlencoded');
+    $query = http_build_query(array('nid' => $nid));
     global $base_url;
-    $stats_path = $base_url . '/' . drupal_get_path('module', 'statistics'). '/statistics.php';
-    drupal_http_request($stats_path, array('method' => 'POST', 'data' => $post, 'headers' => $headers, 'timeout' => 10000));
+    $stats_path = $base_url . '/' . drupal_get_path('module', 'statistics'). '/statistics.php?' . $query;
+    drupal_http_request($stats_path, array('method' => 'GET', 'timeout' => 10000));
 
     $result = db_select('node_counter', 'n')
       ->fields('n', array('nid'))
@@ -177,13 +175,12 @@ class StatisticsAdminTest extends WebTestBase {
     $this->drupalGet('node/' . $this->test_node->nid);
     // Manually calling statistics.php, simulating ajax behavior.
     $nid = $this->test_node->nid;
-    $post = http_build_query(array('nid' => $nid));
-    $headers = array('Content-Type' => 'application/x-www-form-urlencoded');
+    $query = http_build_query(array('nid' => $nid));
     global $base_url;
-    $stats_path = $base_url . '/' . drupal_get_path('module', 'statistics'). '/statistics.php';
-    drupal_http_request($stats_path, array('method' => 'POST', 'data' => $post, 'headers' => $headers, 'timeout' => 10000));
+    $stats_path = $base_url . '/' . drupal_get_path('module', 'statistics'). '/statistics.php?' . $query;
+    drupal_http_request($stats_path, array('method' => 'GET', 'timeout' => 10000));
     $this->drupalGet('node/' . $this->test_node->nid);
-    drupal_http_request($stats_path, array('method' => 'POST', 'data' => $post, 'headers' => $headers, 'timeout' => 10000));
+    drupal_http_request($stats_path, array('method' => 'GET', 'timeout' => 10000));
     $this->assertText('1 view', t('Node is viewed once.'));
 
     $this->drupalGet('admin/reports/pages');
diff --git a/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsLoggingTest.php b/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsLoggingTest.php
index 7526afb..cdee08f 100644
--- a/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsLoggingTest.php
+++ b/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsLoggingTest.php
@@ -76,11 +76,10 @@ class StatisticsLoggingTest extends WebTestBase {
     $this->drupalGet($path);
     // Manually calling statistics.php, simulating ajax behavior.
     $nid = $this->node->nid;
-    $post = http_build_query(array('nid' => $nid));
-    $headers = array('Content-Type' => 'application/x-www-form-urlencoded');
+    $query = http_build_query(array('nid' => $nid));
     global $base_url;
-    $stats_path = $base_url . '/' . drupal_get_path('module', 'statistics'). '/statistics.php';
-    drupal_http_request($stats_path, array('method' => 'POST', 'data' => $post, 'headers' => $headers, 'timeout' => 10000));
+    $stats_path = $base_url . '/' . drupal_get_path('module', 'statistics'). '/statistics.php?' . $query;
+    drupal_http_request($stats_path, array('method' => 'GET', 'timeout' => 10000));
     $this->assertIdentical($this->drupalGetHeader('X-Drupal-Cache'), 'MISS', t('Testing an uncached page.'));
     $log = db_query('SELECT * FROM {accesslog}')->fetchAll(PDO::FETCH_ASSOC);
     $this->assertTrue(is_array($log) && count($log) == 1, t('Page request was logged.'));
@@ -91,7 +90,7 @@ class StatisticsLoggingTest extends WebTestBase {
     // Verify logging of a cached page.
     $this->drupalGet($path);
     // Manually calling statistics.php, simulating ajax behavior.
-    drupal_http_request($stats_path, array('method' => 'POST', 'data' => $post, 'headers' => $headers, 'timeout' => 10000));
+    drupal_http_request($stats_path, array('method' => 'GET', 'timeout' => 10000));
     $this->assertIdentical($this->drupalGetHeader('X-Drupal-Cache'), 'HIT', t('Testing a cached page.'));
     $log = db_query('SELECT * FROM {accesslog}')->fetchAll(PDO::FETCH_ASSOC);
     $this->assertTrue(is_array($log) && count($log) == 2, t('Page request was logged.'));
@@ -103,7 +102,7 @@ class StatisticsLoggingTest extends WebTestBase {
     $this->drupalLogin($this->auth_user);
     $this->drupalGet($path);
     // Manually calling statistics.php, simulating ajax behavior.
-    drupal_http_request($stats_path, array('method' => 'POST', 'data' => $post, 'headers' => $headers, 'timeout' => 10000));
+    drupal_http_request($stats_path, array('method' => 'GET', 'timeout' => 10000));
     $log = db_query('SELECT * FROM {accesslog}')->fetchAll(PDO::FETCH_ASSOC);
     // Check the 6th item since login and account pages are also logged
     $this->assertTrue(is_array($log) && count($log) == 6, t('Page request was logged.'));
diff --git a/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsReportsTest.php b/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsReportsTest.php
index 184af5d..245b65d 100644
--- a/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsReportsTest.php
+++ b/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsReportsTest.php
@@ -75,11 +75,10 @@ class StatisticsReportsTest extends StatisticsTestBase {
     $this->drupalGet('node/' . $node->nid);
     // Manually calling statistics.php, simulating ajax behavior.
     $nid = $node->nid;
-    $post = http_build_query(array('nid' => $nid));
-    $headers = array('Content-Type' => 'application/x-www-form-urlencoded');
+    $query = http_build_query(array('nid' => $nid));
     global $base_url;
-    $stats_path = $base_url . '/' . drupal_get_path('module', 'statistics'). '/statistics.php';
-    drupal_http_request($stats_path, array('method' => 'POST', 'data' => $post, 'headers' => $headers, 'timeout' => 10000));
+    $stats_path = $base_url . '/' . drupal_get_path('module', 'statistics'). '/statistics.php?' . $query;
+    drupal_http_request($stats_path, array('method' => 'GET', 'timeout' => 10000));
 
     // Configure and save the block.
     $block = block_load('statistics', 'popular');
diff --git a/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsTokenReplaceTest.php b/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsTokenReplaceTest.php
index 0f68140..64fd161 100644
--- a/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsTokenReplaceTest.php
+++ b/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsTokenReplaceTest.php
@@ -34,11 +34,10 @@ class StatisticsTokenReplaceTest extends StatisticsTestBase {
     $this->drupalGet('node/' . $node->nid);
     // Manually calling statistics.php, simulating ajax behavior.
     $nid = $node->nid;
-    $post = http_build_query(array('nid' => $nid));
-    $headers = array('Content-Type' => 'application/x-www-form-urlencoded');
+    $query = http_build_query(array('nid' => $nid));
     global $base_url;
-    $stats_path = $base_url . '/' . drupal_get_path('module', 'statistics'). '/statistics.php';
-    drupal_http_request($stats_path, array('method' => 'POST', 'data' => $post, 'headers' => $headers, 'timeout' => 10000));
+    $stats_path = $base_url . '/' . drupal_get_path('module', 'statistics'). '/statistics.php?' . $query;
+    drupal_http_request($stats_path, array('method' => 'GET', 'timeout' => 10000));
     $statistics = statistics_get($node->nid);
 
     // Generate and test tokens.
diff --git a/core/modules/statistics/statistics.js b/core/modules/statistics/statistics.js
index e7bb837..cb2963d 100644
--- a/core/modules/statistics/statistics.js
+++ b/core/modules/statistics/statistics.js
@@ -2,14 +2,19 @@
 
   "use strict";
 
-  $(document).ready(function() {
-    var nid = Drupal.settings.statistics.nid;
-    var basePath = Drupal.settings.basePath;
+  var nid = Drupal.settings.statistics.nid;
+  Drupal.stats = function(){
     $.ajax({
-      type: "POST",
+      type: "GET",
       cache: false,
-      url: basePath+"core/modules/statistics/statistics.php",
-      data: "nid="+nid
+      url: Drupal.settings.statistics.logger,
+      data: "nid="+nid,
+      error: function(jqXHR, textStatus, errorThrown){
+       if(jqXHR.status<400){
+        window.setTimeout(Drupal.stats, Drupal.settings.statistics.retry);
+       }
+      }
     });
-  });
+  };
+  Drupal.stats();
 })(jQuery);
diff --git a/core/modules/statistics/statistics.module b/core/modules/statistics/statistics.module
index c07a1c8..e42de06 100644
--- a/core/modules/statistics/statistics.module
+++ b/core/modules/statistics/statistics.module
@@ -104,7 +104,13 @@ function statistics_permission() {
 function statistics_node_view(Node $node, $view_mode) {
   if (!empty($node->nid) && $view_mode == 'full') {
     $node->content['#attached']['library'][] = array('statistics', 'drupal.statistics');
-    $settings = array('nid' => $node->nid);
+    $settings = array(
+      'nid' => $node->nid,
+      'logger' => base_path() . drupal_get_path('module', 'statistics') . '/statistics.php',
+      // Timeout between logging attempts, in milliseconds.
+      // @todo: add this to settings screen?
+      'retry' => 100,
+    );
     $node->content['#attached']['js'][] = array(
       'data' => array('statistics' => $settings),
       'type' => 'setting',
diff --git a/core/modules/statistics/statistics.php b/core/modules/statistics/statistics.php
index 87e3dae..6872650 100644
--- a/core/modules/statistics/statistics.php
+++ b/core/modules/statistics/statistics.php
@@ -17,7 +17,7 @@ include_once DRUPAL_ROOT . '/core/includes/bootstrap.inc';
 drupal_bootstrap(DRUPAL_BOOTSTRAP_VARIABLES);
 
 if (config('statistics.settings')->get('count_content_views')) {
-  $nid = filter_input(INPUT_POST, 'nid', FILTER_VALIDATE_INT);
+  $nid = filter_input(INPUT_GET, 'nid', FILTER_VALIDATE_INT);
   if ($nid) {
     db_merge('node_counter')
       ->key(array('nid' => $nid))
