Php get all request header

How to get HTTP headers in PHP

You have already know that generally you send external API request, you also need to send Content-Type in header. Some API only accepts request if you sent proper headers. When the API call succeed, the server also send headers in response.

Headers are the additional data which are send with the request and response. Generally the header data contains information about data-type, request source and authentication credentials etc.

You may want to get information about headers and validate request. PHP gives you several ways to get headers from request and response.

In this article, we will discuss few ways how to get headers from request and response sent by server.

CURL request:

The first and widely used to get headers from request is using PHP curl. This method also used to get headers from all type of request.

Here is the below example how you can get headers array:

This will return header array in response:

Array
(
[0] => HTTP/2 301
[1] => location: https://www.google.com/
[2] => content-type: text/html; charset=UTF-8
[3] => date: Tue, 10 Aug 2021 11:45:33 GMT
[4] => expires: Thu, 09 Sep 2021 11:45:33 GMT
[5] => cache-control: public, max-age=2592000
[6] => server: gws
[7] => content-length: 220
[8] => x-xss-protection: 0
[9] => x-frame-options: SAMEORIGIN
[10] => alt-svc: h3=»:443″; ma=2592000,h3-29=»:443″; ma=2592000,h3-T051=»:443″; ma=2592000,h3-Q050=»:443″; ma=2592000,h3-Q046=»:443″; ma=2592000,h3-Q043=»:443″; ma=2592000,quic=»:443″; ma=2592000; v=»46,43″
[11] =>
[12] =>
)

Читайте также:  Java detect version at runtime

You can convert headers in key:value format using below loop.

$data = []; foreach ($headers as $value) < $parts = explode(':', $value); if (count($parts) === 2) < $data[trim($parts[0])] = trim($parts[1]); >> print_r($data);

Array
(
[content-type] => text/html; charset=UTF-8
[cache-control] => public, max-age=2592000
[server] => gws
[content-length] => 220
[x-xss-protection] => 0
[x-frame-options] => SAMEORIGIN
)

apache_request_headers() function

apache_request_headers() function returns all headers for current request. The function returns associative array of all the HTTP headers in the current request. It returns false on failure.

This will return response for my localhost web request:

Array
(
[Host] => localhost
[Connection] => keep-alive
[Cache-Control] => max-age=0
[sec-ch-ua] => «Chromium»;v=»92″, » Not A;Brand»;v=»99″, «Google Chrome»;v=»92″
[sec-ch-ua-mobile] => ?0
[Upgrade-Insecure-Requests] => 1
[User-Agent] => Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36
[Accept] => text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
[Sec-Fetch-Site] => none
[Sec-Fetch-Mode] => navigate
[Sec-Fetch-User] => ?1
[Sec-Fetch-Dest] => document
[Accept-Encoding] => gzip, deflate, br
[Accept-Language] => en-GB,en-US;q=0.9,en;q=0.8
)

get_headers() function

get_headers() function returns all response headers sent by the server.

Below example shows the response headers for Google homepage:

It will return the array of headers sent by Google server:

Array
(
[0] => HTTP/1.0 200 OK
[1] => Date: Tue, 10 Aug 2021 12:01:20 GMT
[2] => Expires: -1
[3] => Cache-Control: private, max-age=0
[4] => Content-Type: text/html; charset=ISO-8859-1
[5] => P3P: CP=»This is not a P3P policy! See g.co/p3phelp for more info.»
[6] => Server: gws
[7] => X-XSS-Protection: 0
[8] => X-Frame-Options: SAMEORIGIN
[9] => Set-Cookie: 1P_JAR=2021-08-10-12; expires=Thu, 09-Sep-2021 12:01:20 GMT; path=/; domain=.google.com; Secure
[10] => Set-Cookie: NID=221=SEbyqqBM0d_cZ4I1qqC6o7sLHRQOpWg7qRdWMat3qN2ROYtC_XgyHQYfLZeMoKH9EiSNh_mglxQBtpJPkQnRiaFiEdvVn0MUypVN6VshIN16-OOaMU3JFZ3leCaioetNW0c5H8YfrUst2dIlBud4dRzoWA-YmnhjnsPbeOD_f9Q; expires=Wed, 09-Feb-2022 12:01:20 GMT; path=/; domain=.google.com; HttpOnly
[11] => Alt-Svc: h3=»:443″; ma=2592000,h3-29=»:443″; ma=2592000,h3-T051=»:443″; ma=2592000,h3-Q050=»:443″; ma=2592000,h3-Q046=»:443″; ma=2592000,h3-Q043=»:443″; ma=2592000,quic=»:443″; ma=2592000; v=»46,43″
[12] => Accept-Ranges: none
[13] => Vary: Accept-Encoding
)

I hope you liked the article and help in your web development.

Источник

getallheaders

This function is an alias for apache_request_headers() . Please read the apache_request_headers() documentation for more information on how this function works.

Parameters

This function has no parameters.

Return Values

An associative array of all the HTTP headers in the current request, or false on failure.

Changelog

Version Description
7.3.0 This function became available in the FPM SAPI.

Examples

Example #1 getallheaders() example

foreach ( getallheaders () as $name => $value ) echo » $name : $value \n» ;
>

See Also

User Contributed Notes 9 notes

it could be useful if you using nginx instead of apache

if (! function_exists ( ‘getallheaders’ ))
<
function getallheaders ()
<
$headers = [];
foreach ( $_SERVER as $name => $value )
<
if ( substr ( $name , 0 , 5 ) == ‘HTTP_’ )
<
$headers [ str_replace ( ‘ ‘ , ‘-‘ , ucwords ( strtolower ( str_replace ( ‘_’ , ‘ ‘ , substr ( $name , 5 )))))] = $value ;
>
>
return $headers ;
>
>
?>

A simple approach to dealing with case insenstive headers (as per RFC2616) is via the built in array_change_key_case() function:

$headers = array_change_key_case(getallheaders(), CASE_LOWER);

There’s a polyfill for this that can be downloaded or installed via composer:

Beware that RFC2616 (HTTP/1.1) defines header fields as case-insensitive entities. Therefore, array keys of getallheaders() should be converted first to lower- or uppercase and processed such.

dont forget to add the content_type and content_lenght if your are uploading file:

function emu_getallheaders () <
foreach ( $_SERVER as $name => $value )
<
if ( substr ( $name , 0 , 5 ) == ‘HTTP_’ )
<
$name = str_replace ( ‘ ‘ , ‘-‘ , ucwords ( strtolower ( str_replace ( ‘_’ , ‘ ‘ , substr ( $name , 5 )))));
$headers [ $name ] = $value ;
> else if ( $name == «CONTENT_TYPE» ) <
$headers [ «Content-Type» ] = $value ;
> else if ( $name == «CONTENT_LENGTH» ) <
$headers [ «Content-Length» ] = $value ;
>
>
return $headers ;
>
?>

chears magno c. heck

apache_request_headers replicement for nginx

if (! function_exists ( ‘apache_request_headers’ )) <
function apache_request_headers () <
foreach( $_SERVER as $key => $value ) <
if ( substr ( $key , 0 , 5 )== «HTTP_» ) <
$key = str_replace ( » » , «-» , ucwords ( strtolower ( str_replace ( «_» , » » , substr ( $key , 5 )))));
$out [ $key ]= $value ;
>else <
$out [ $key ]= $value ;
>
>
return $out ;
>
>
?>

warning, at least on php-fpm 8.2.1 and nginx, getallheaders() will return «Content-Length» and «Content-Type» both containing emptystring, even for requests without any of these 2 headers. you can do something like

retrieve token from header:

function getAuthorizationHeader () $headers = null ;
if (isset( $_SERVER [ ‘Authorization’ ])) $headers = trim ( $_SERVER [ «Authorization» ]);
>
elseif (isset( $_SERVER [ ‘HTTP_AUTHORIZATION’ ])) $headers = trim ( $_SERVER [ «HTTP_AUTHORIZATION» ]);
>
elseif ( function_exists ( ‘apache_request_headers’ )) $requestHeaders = apache_request_headers ();
$requestHeaders = array_combine ( array_map ( ‘ucwords’ , array_keys ( $requestHeaders )), array_values ( $requestHeaders ));

if (isset( $requestHeaders [ ‘Authorization’ ])) $headers = trim ( $requestHeaders [ ‘Authorization’ ]);
>
>

function getBearerToken () $headers = getAuthorizationHeader ();

if (!empty( $headers )) if ( preg_match ( ‘/Bearer\s(\S+)/’ , $headers , $matches )) return $matches [ 1 ];
>
>

Due to the else part.
>else <
$out[$key]=$value;
All server Variables are added to the headers list, and that’s not the desired outcome.

  • Apache Functions
    • apache_​child_​terminate
    • apache_​get_​modules
    • apache_​get_​version
    • apache_​getenv
    • apache_​lookup_​uri
    • apache_​note
    • apache_​request_​headers
    • apache_​response_​headers
    • apache_​setenv
    • getallheaders
    • virtual

    Источник

    How to Read Request Headers in PHP

    When typing a URL in the browser’s address bar and trying to access it, an HTTP request is sent to the server by the browser. It encompasses information in a text-record state including the type, the capabilities, user’s operation system, the browser generating the request, and more.

    Getting the request header, the web server sends an HTTP response head to the client.

    Below, we will show you how to read any request header in PHP.

    Using the getallheaders() Function

    To achieve what was described above, you can use the getllheaders() function.

    Let’s check out an example with its output:

     foreach (getallheaders() as $name => $value) < echo "$name: $value 
    "
    ; > ?>
    Host: 127.0.0.3:2025 Connection: keep-alive Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36 Accept: text/html, application/xhtml+xml, application/xml;q=0.9, image/webp, image/apng, */*;q=0.8 Accept-Encoding: gzip, deflate, br Accept-Language: en-US, en;q=0.9

    Using apache_request_headers() Function

    Now, let’s check out an example of using another helpful method that is the apache_request_headers() function:

     $header = apache_request_headers(); foreach ($header as $headers => $value) < echo "$headers: $value 
    \n"
    ; > ?>

    The output will look as follows:

    Host: 127.0.0.6:2027 Connection: keep-alive Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36 Accept: text/html, application/xhtml+xml, application/xml;q=0.9, image/webp, image/apng, */*;q=0.8 Accept-Encoding: gzip, deflate, br Accept-Language: en-US, en;q=0.9

    Describing HTTP Headers

    An HTTP header is considered a code, which transfers the data between the browser and the web server.

    Generally, HTTP headers are used for the communication between the client and the server in both of the directions.

    Источник

    getallheaders

    Функция getallheaders() является псевдонимом для функции apache_request_headers() . Эта функция возвращает ассоциативный массив, содержащий все заголовки текущего HTTP-запроса. Для получения более подробных сведений о работе этой функции обратитесь к описанию функции apache_request_headers() .

    Замечание: В PHP 4.3.0 функция getallheaders() стала псевдонимом для функции apache_request_headers() . Соответствующим образом, она была переименована. Это связано с тем, что эта функция работоспособна только в том случае, если PHP был собран в качестве модуля Apache.

    Array ( [Host] => htmlweb.ru [X-Forwarded-Proto] => https [Connection] => close [User-Agent] => Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.67 Safari/537.36 [Accept] => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 [Accept-Language] => ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3 [Accept-Charset] => windows-1251,utf-8;q=0.7,*;q=0.7 [Referer] => https://htmlweb.ru/ )

    Пример. Эмулятор функции getallheaders():

    // Эмуляция функции getallheaders() для PHP установленного как не как модуль Apach. if (!function_exists("getallheaders")) < function getallheaders() < $ar=[]; if(isset($_SERVER['HTTP_HOST'])) $ar['Host']=$_SERVER['HTTP_HOST']; if(isset($_SERVER['HTTP_USER_AGENT'])) $ar['User-Agent']=$_SERVER['HTTP_USER_AGENT']; if(isset($_SERVER['HTTP_ACCEPT'])) $ar['Accept']=$_SERVER['HTTP_ACCEPT']; if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) $ar['Accept-Language']=$_SERVER['HTTP_ACCEPT_LANGUAGE']; if(isset($_SERVER['HTTP_ACCEPT_ENCODING'])) $ar['Accept-Encoding']=$_SERVER['HTTP_ACCEPT_ENCODING']; if(isset($_SERVER['HTTP_ACCEPT_CHARSET'])) $ar['Accept-Charset']=$_SERVER['HTTP_ACCEPT_CHARSET']; if(isset($_SERVER['HTTP_KEEP_ALIVE'])) $ar['Keep-Alive']=$_SERVER['HTTP_KEEP_ALIVE']; if(isset($_SERVER['HTTP_CONNECTION'])) $ar['Connection']=$_SERVER['HTTP_CONNECTION']; if(isset($_SERVER['HTTP_REFERER'])) $ar['Referer']=$_SERVER['HTTP_REFERER']; if(isset($_SERVER['HTTP_COOKIE'])) $ar['Cookie']=$_SERVER['HTTP_COOKIE']; if(isset($_SERVER['HTTP_IF_MODIFIED_SINCE']))$ar['If-Modified-Since']=$_SERVER['HTTP_IF_MODIFIED_SINCE']; if(isset($_SERVER['HTTP_IF_NONE_MATCH'])) $ar['If-None-Match']=$_SERVER['HTTP_IF_NONE_MATCH']; // если я какие-то параметры забыл, добавьте их сами return $ar; >// эмулируем синоним функции apache_request_headers: if (!function_exists("apache_request_headers")) < function apache_request_headers() < return getallheaders(); >>

    Источник

Оцените статью