Laravel 自定义请求标头未填充

Mub*_*bas 1 php laravel

我正在使用邮递员向我的项目发出请求,如下所示:

Request Headers:
cache-control:"no-cache"
postman-token:"65b35825-8c35-47ae-ad03-159d3da08e95"
partner_key:"123456789"
partner_secret:"123456789"
business_external_id:"123456789"
user-agent:"PostmanRuntime/6.4.1"
accept:"*/*"
host:"loyaltybro.local"
accept-encoding:"gzip, deflate"
Run Code Online (Sandbox Code Playgroud)

我对“partner_key”、“partner_secret”、“business_external_id”感兴趣。

在我的代码中,我记录收到的标头,如下所示:

public function handle($request, Closure $next)
{   
    $headers = $request->headers->all();
    \Log::info($headers);
    ...
}
Run Code Online (Sandbox Code Playgroud)

这是日志输出。

local.INFO: array (
  'cache-control' => 
  array (
    0 => 'no-cache',
  ),
  'postman-token' => 
  array (
    0 => '65b35825-8c35-47ae-ad03-159d3da08e95',
  ),
  'user-agent' => 
  array (
    0 => 'PostmanRuntime/6.4.1',
  ),
  'accept' => 
  array (
    0 => '*/*',
  ),
  'host' => 
  array (
    0 => 'loyaltybro.local',
  ),
  'accept-encoding' => 
  array (
    0 => 'gzip, deflate',
  ),
  'connection' => 
  array (
    0 => 'keep-alive',
  ),
) 
Run Code Online (Sandbox Code Playgroud)

没有“partner_key”、“partner_secret”、“business_external_id”。

为什么他们没有人居住?

Jer*_*dev 6

nginx 和 apache 中默认都会删除带下划线的标头。

http://httpd.apache.org/docs/trunk/new_features_2_4.html

标头到环境变量的转换比以前更加严格,以减轻一些可能通过标头注入进行的跨站点脚本攻击。包含无效字符(包括下划线)的标头现在会被静默删除。

https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/?highlight=disappearing%20http%20headers#missing-disappearing-http-headers

如果你没有显式地设置 underscores_in_headers on;,NGINX 将默默地删除带有下划线的 HTTP 标头(根据 HTTP 标准,这是完全有效的)。这样做是为了防止将标头映射到 CGI 变量时出现歧义,因为在此过程中破折号和下划线都映射到下划线。