Всякий раз, когда я возвращаюсь в историю на моем веб-сайте Laravel, я вижу следующее:
{}
Когда я продвигаюсь туда, где был до этого, он также показывает эти фигурные скобки.
Проблема не возникает, если я запустил Инструменты разработчика в Chrome с параметром «Отключить кеш». Content-Type
того, что возвращается, действительно является application/json
. В Firefox нет такой проблемы.
Это происходит потому, что один из моих Middlewares. Я написал промежуточное программное обеспечение AjaxJson, чтобы перевести все запросы Ajax на ответ JSON. Как ни странно, когда я возвращаюсь в историю, Google Chrome делает этот запрос Ajax. Он содержит этот заголовок:
X-Requested-With: XMLHttpRequest
И поэтому $request->ajax()
возвращает true
.
Это мое промежуточное ПО:
<?php namespace App\Http\Middleware; use Closure; use Illuminate\Http\Response; class AjaxJson { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { $response = $next($request); if (!$request->ajax()) { return $response; } if (!$response instanceof Response) { return $response; } return response()->json($response->getOriginalContent(), $response->status()); } }
Что я делаю не так?
Я узнал о no-store
для заголовка ответа Cache-Control
. Это предотвращает использование кеша Chrome при нажатии кнопки «Назад». Я создал промежуточное ПО, чтобы установить Cache-Control
следующим образом:
Cache-Control: private, max-age = 0, no-cache, no-store
Пожалуйста, дайте мне знать, ребята, если вы знаете лучший способ решить эту проблему.
Попробуйте обработать запрос после проверки:
public function handle($request, Closure $next) { if ($request->ajax()) { return response()->json($response->getOriginalContent(), $response->status()); } return $next($request); }