Я хочу добавить заголовок ответа http ко всем моим ответам в моем приложении. Я только что создал новое промежуточное ПО, чтобы сделать это следующим образом:
namespace Ibbr\Http\Middleware;
use Closure;
class XFrameOptionsHeader
{
public function handle($request, Closure $next)
{
$response = $next($request);
$response->header('X-Frame-Options', 'deny');
return $response;
}
}
Затем добавил его в свой Kernel.php
protected $middlewareGroups = [
'web' => [
\Ibbr\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
// \Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\Ibbr\Http\Middleware\VerifyCsrfToken::class,
\Ibbr\Http\Middleware\XFrameOptionsHeader::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
protected $routeMiddleware = [
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \Ibbr\Http\Middleware\RedirectIfAuthenticated::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verificaCookieArquivo' => \Ibbr\Http\Middleware\VerificaCookieArquivo::class,
'xFrameOptionsHeader' => \Ibbr\Http\Middleware\XFrameOptionsHeader::class,
]
и в определении маршрутов у меня есть:
Route::group(['middleware'=>['verificaCookieArquivo']], function(){
Route::get('/storage/{filename}', 'PagesController@getArquivo');
});
Route::group(['middleware'=>['web','xFrameOptionsHeader']], function(){
Route::get('/', 'PagesController@getIndex');
// more routes...
});
Всякий раз, когда я вызываю любой маршрут во второй группе ['web','xFrameOptionsHeader']
, он работает нормально и возвращает новый заголовок http. Но когда я вызываю маршрут /storage/{filename}
, он терпит неудачу с ошибкой
Вызов неопределенного метода Symfony\Component\HttpFoundation\BinaryFileResponse::header()
Итак, прежде всего, прежде чем рассматривать, существует ли функция заголовка в этом контексте, я нахожу более странным, что это промежуточное ПО даже вызывается в этой ситуации, когда я думал, что оно вызовет только verificaCookieArquivo
mid. Почему это происходит и как решить? Кстати, я использую laravel-5.7, но для этого нет тега.
middlewareGroups
? - person Wreigh   schedule 03.09.2018web
промежуточного программного обеспечения решает проблему.'middleware'=>['web','verificaCookieArquivo']
- person Saman   schedule 03.09.2018