响应头重复(流明)

时间:2015-05-23 08:17:37

标签: php http-headers lumen

延续:Setting response headers with middleware in Lumen

在Lumen中使用以下异常处理程序时,X-Powered-By标头是重复的,即使$replaceheader()方法的第三个参数)默认为true(即使手动设置它) ,如下所示,不起作用。)

public function render($request, Exception $e)
{
    if ($e instanceof \Symfony\Component\HttpKernel\Exception\NotFoundHttpException)
    {
        return response(view('not-found'), 404)->header('X-Powered-By', env('APP_NAME')."/".env('APP_VER'), true);
    }

    return parent::render($e);
}

回复标题:

HTTP/1.0 404 Not Found
Date: Sat, 23 May 2015 08:05:13 GMT
Server: Apache
X-Powered-By: PHP/5.6.3
Cache-Control: no-cache
X-Powered-By: AppName/1.0.0
Connection: close
Content-Type: text/html; charset=UTF-8

唯一有效的方法是在调用header_remove('X-Powered-By')之前使用->header。由于相应地设置了$replace参数,我不应该这样做。

有没有更好的方法可以防止重复X-Powered-By标题?

2 个答案:

答案 0 :(得分:0)

设置

expose_php = Off
在你的php.ini中

以便删除

X-Powered-By: PHP/5.6.3

expose_php

答案 1 :(得分:0)

我无法使用方法链接,但是,如果我这样做:

header('X-Powered-By: '.env('APP_NAME')."/".env('APP_VER'));
return response(view('not-found'), 404);

......它按你的意愿工作。但请注意,根据PHP手册,标题中只有一个参数:

void header ( string $string [, bool $replace = true [, int $http_response_code ]] )
  

可选的replace参数指示标头是否应该   替换以前的类似标头,或添加相同的第二个标头   类型。默认情况下它将替换,但如果你传入FALSE作为第二个   参数可以强制使用相同类型的多个标题。

     

来源:http://php.net/manual/en/function.header.php

...意思是,它不是"用它取而代之的"像str_replace这样的项目类型。如果您在第一个参数中键入的字符串与另一个标题项类似,则它将替换为您自动键入的任何内容。

旁注:我也尝试将响应函数的第三个参数设置为包含X-Powered-By标头的数组,但无效。