延续:Setting response headers with middleware in 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
标题?
答案 0 :(得分:0)
答案 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作为第二个 参数可以强制使用相同类型的多个标题。
...意思是,它不是"用它取而代之的"像str_replace这样的项目类型。如果您在第一个参数中键入的字符串与另一个标题项类似,则它将替换为您自动键入的任何内容。
旁注:我也尝试将响应函数的第三个参数设置为包含X-Powered-By标头的数组,但无效。