Browse Source

Provide access to content-* headers via header()

The content-* headers are not prefixed with HTTP_ like most other
headers.

Refs #9027
Mark Story 9 years ago
parent
commit
67ad9beec3
2 changed files with 9 additions and 2 deletions
  1. 4 1
      src/Network/Request.php
  2. 5 1
      tests/TestCase/Network/RequestTest.php

+ 4 - 1
src/Network/Request.php

@@ -893,7 +893,10 @@ class Request implements ArrayAccess
      */
     public function header($name)
     {
-        $name = 'HTTP_' . str_replace('-', '_', $name);
+        $name = str_replace('-', '_', $name);
+        if (strtoupper(substr($name, 0, 8)) !== 'CONTENT_') {
+            $name = 'HTTP_' . $name;
+        }
         return $this->env($name);
     }
 

+ 5 - 1
tests/TestCase/Network/RequestTest.php

@@ -1038,11 +1038,15 @@ class RequestTest extends TestCase
     {
         $request = new Request(['environment' => [
             'HTTP_HOST' => 'localhost',
-            'HTTP_USER_AGENT' => 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-ca) AppleWebKit/534.8+ (KHTML, like Gecko) Version/5.0 Safari/533.16'
+            'HTTP_USER_AGENT' => 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-ca) AppleWebKit/534.8+ (KHTML, like Gecko) Version/5.0 Safari/533.16',
+            'CONTENT_TYPE' => 'application/json',
+            'CONTENT_LENGTH' => 1337,
         ]]);
 
         $this->assertEquals($request->env('HTTP_HOST'), $request->header('host'));
         $this->assertEquals($request->env('HTTP_USER_AGENT'), $request->header('User-Agent'));
+        $this->assertEquals($request->env('CONTENT_LENGTH'), $request->header('content-length'));
+        $this->assertEquals($request->env('CONTENT_TYPE'), $request->header('content-type'));
     }
 
     /**