0

续:在 Lumen 中用中间件设置响应头

在 Lumen 中使用以下异常处理程序时,X-Powered-By会重复标头,即使$replace(方法的第三个参数header())默认为 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标题的重复?

4

2 回答 2

0

暴露_php =关闭

在您的 php.ini 中以删除

X-Powered-By: PHP/5.6.3

暴露_php

于 2015-05-24T19:24:25.270 回答
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 标头的数组,但无济于事。

于 2015-05-27T20:44:09.233 回答