Ogni volta che torno nella storia sul mio sito web laravel, la risposta che vedo è questa:laravel 5 e strano bug: le parentesi graffe sul retro
{}
Quando vado avanti a dove ero prima di questo, mostra anche quelle parentesi.
Il problema non si verifica se avvio Strumenti di sviluppo in Chrome con l'opzione Disattiva cache. Il Content-Type
di ciò che viene restituito è effettivamente application/json
. In Firefox non c'è questo problema.
Succede perché uno dei miei Middlewares. Ho scritto il middleware AjaxJson per tradurre tutte le richieste Ajax in risposta JSON. Stranamente, quando torno indietro nella storia, Google Chrome fa questa richiesta Ajax. Esso contiene questa intestazione:
X-richiesta-Con: XMLHttpRequest
E quindi $request->ajax()
rendimenti true
.
Questo è il mio middleware:
<?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());
}
}
Che cosa sto facendo di sbagliato?
UPDATE
ho scoperto no-store
rapporto qualità-Cache-Control
intestazione di risposta. Impedisce a Chrome di utilizzare la cache quando si fa clic sul pulsante Indietro. Ho creato un middleware per impostare Cache-Control
in questo modo:
Cache-Control: private, max-age = 0, no-cache, no-store
Per favore fatemi sapere ragazzi, se si sa modo migliore per risolvere questo problema.
Come è diverso da quello che ho fatto? –
Esistono due tipi di middleware: 1. I middleware chiamati prima che la richiesta arrivi ai controller. 2. Il middleware chiamato dopo la richiesta arriva ai controller. Quindi chiamando '$ next ($ request);' immediatamente nel metodo handle sta applicando il middleware dopo tutto. – manix
Ok, ora capisco il tuo punto. Il problema era qualcosa di completamente diverso però, aggiornerò presto questo argomento. –