From 908c29cb974dcb39a0e931508e55ae017385b7cf Mon Sep 17 00:00:00 2001 From: epriestley Date: Sat, 9 Apr 2016 03:39:17 -0700 Subject: [PATCH] (stable) When proxying cluster HTTP requests, forward only selected headers In the live cluster, some subset of the forwarded headers are creating some issues for HTTP repository operations. --- src/aphront/AphrontRequest.php | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/src/aphront/AphrontRequest.php b/src/aphront/AphrontRequest.php index 3a95b0ebda..9305d6b48b 100644 --- a/src/aphront/AphrontRequest.php +++ b/src/aphront/AphrontRequest.php @@ -754,14 +754,26 @@ final class AphrontRequest extends Phobject { // NOTE: apache_request_headers() might provide a nicer way to do this, // but isn't available under FCGI until PHP 5.4.0. foreach ($_SERVER as $key => $value) { - if (preg_match('/^HTTP_/', $key)) { - // Unmangle the header as best we can. - $key = substr($key, strlen('HTTP_')); - $key = str_replace('_', ' ', $key); - $key = strtolower($key); - $key = ucwords($key); - $key = str_replace(' ', '-', $key); + if (!preg_match('/^HTTP_/', $key)) { + continue; + } + // Unmangle the header as best we can. + $key = substr($key, strlen('HTTP_')); + $key = str_replace('_', ' ', $key); + $key = strtolower($key); + $key = ucwords($key); + $key = str_replace(' ', '-', $key); + + // By default, do not forward headers. + $should_forward = false; + + // Forward "X-Hgarg-..." headers. + if (preg_match('/^X-Hgarg-/', $key)) { + $should_forward = true; + } + + if ($should_forward) { $headers[] = array($key, $value); $seen[$key] = true; }