0

続き: Lumen のミドルウェアを使用した応答ヘッダーの設定

Lumen で次の例外ハンドラーを使用すると、(メソッドの 3 番目のパラメーター) の既定値が trueX-Powered-Byであっても、ヘッダーが複製されます (以下のように手動で設定しても機能しません)。$replaceheader()

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

設定

Exposure_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 マニュアルによると、ヘッダーには引数が 1 つしかないことに注意してください。

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

オプションの replace パラメータは、ヘッダーが以前の同様のヘッダーを置き換えるか、同じタイプの 2 番目のヘッダーを追加するかを示します。デフォルトでは置き換えられますが、2 番目の引数として FALSE を渡すと、同じタイプの複数のヘッダーを強制できます。

ソース: http://php.net/manual/en/function.header.php

... つまり、str_replace のような「これをあれで置き換える」タイプのアイテムではありません。最初の引数に入力した文字列が別のヘッダー項目に似ている場合、自動的に入力したものに置き換えられます。

補足: また、応答関数の 3 番目の引数を、X-Powered-By ヘッダーを含む配列に設定しようとしましたが、役に立ちませんでした。

于 2015-05-27T20:44:09.233 に答える