每当我在我的Laravel网站上回顾历史时,我看到的反应是:
{}当我向前走到我之前的位置时,它也显示了这些牙套。
如果我在Chrome中启动带有禁用缓存选项的开发工具,问题就不会发生。返回内容的Content-Type确实是application/json。在Firefox中没有这样的问题。
发生这种事是因为我的一个中间人。我编写了AjaxJson中间件,将所有Ajax请求转换为JSON响应。奇怪的是,当我回顾历史时,Google提出了这个请求-- 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:
缓存-控制:私有,最大年龄=0,无缓存,无存储
如果你们知道更好的解决这个问题的方法,请告诉我。
发布于 2016-09-07 14:23:02
试着在验证后处理请求:
public function handle($request, Closure $next)
{
if ($request->ajax()) {
return response()->json($response->getOriginalContent(), $response->status());
}
return $next($request);
}https://stackoverflow.com/questions/37556431
复制相似问题