Por alguna razón Laravel parece ser la manipulación de los encabezados de respuesta ‘Cache-Control» en el último momento. Quiero hacer caché del navegador es posible.

class TestController extends Controller
{

    public function getTest()
    {
        $response = new \Illuminate\Http\Response('test', 200, array(
            'Cache-Control' => 'max-age='.(config('imagecache.lifetime')*60).', public',
            'Content-Length' => strlen('test'),
        ));

        $response->setLastModified(new \DateTime('now'));
        $response->setExpires(\Carbon\Carbon::now()->addMinutes(config('imagecache.lifetime')));

        return $response;
     }
}

Incluso cuando yo uso una ‘después de middleware’ y morir y volcado de la respuesta, todavía me sale esto, lo que parece ser cierto para mí.

Response {#625 
  +original: "test"
  +exception: null
  +headers: ResponseHeaderBag {#626 
    #computedCacheControl: array:2 [▼
      "max-age" => "2592000"
      "public" => true
    ]
    #cookies: []
    #headerNames: array:5 [▶]
    #headers: array:5 [▼
      "cache-control" => array:1 [▼
        0 => "max-age=2592000, public"
      ]
      "content-length" => array:1 [▼
        0 => 4
      ]
      "date" => array:1 [▶]
      "last-modified" => array:1 [▼
        0 => "Sun, 16 Aug 2015 15:42:08 GMT"
      ]
      "expires" => array:1 [▶]
    ]
    #cacheControl: array:2 [▼
      "max-age" => "2592000"
      "public" => true
    ]
  }
  #content: "test"
  #version: "1.0"
  #statusCode: 200
  #statusText: "OK"
  #charset: null
}

El método $respuesta->isCacheable() ela devuelve true. Pero cuando recibo la respuesta, Firebug muestra lo siguiente:

Cache-Control   
no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection  
Keep-Alive
Content-Type    
text/html
Date    
Sun, 16 Aug 2015 15:42:08 GMT
Expires 
Thu, 19 Nov 1981 08:52:00 GMT
Keep-Alive  
timeout=5, max=98
Pragma  
no-cache
Server  
Apache/2.4.10 (Win32) OpenSSL/1.0.1i PHP/5.5.15
Transfer-Encoding   
chunked
X-Powered-By    
PHP/5.5.15

Yo uso xampp, pero en este mismo servidor, cuando acabo de cargar una página html (no Laravel/PHP), no envía estos encabezados Cache-Control.

¿Cómo puedo lograr que el navegador no recibir los encabezados Cache-Control «no-store, no-cache» cuando me puse la última modificación y caduca encabezados?

Gracias!

OriginalEl autor Riesjart | 2015-09-02

2 Comentarios

  1. 4

    Creo que su fantasma cache-control de los encabezados están llegando desde PHP.

    http://php.net/manual/en/function.session-cache-limiter.php

    cuando php.ini ha sesión.cache_limiter conjunto para nocache (por defecto), PHP establece los siguientes encabezados:

    Expires: Thu, 19 Nov 1981 08:52:00 GMT 
    Cache-Control: no-store,no-cache, must-revalidate, post-check=0, pre-check=0 
    Pragma: no-cache

    He estado luchando con cache-control en laravel en apache para un par de días ahora: he descubierto que el establecimiento de los encabezados dentro de laravel añadido simplemente ellos en el conjunto de encabezados por php.ini. He intentado establecer algunas reglas en apache.conf con el fin de permitir el almacenamiento en caché de .js y .los archivos css que se accede a través de laravel, mientras que la prevención de la caché de peticiones .archivos php, pero estas reglas no como apache ver cualquier archivo que se sirve a través de laravel como un .archivo php (porque es la que se accede a través de index.php).

    Al final me decidí por la configuración de la sesión.cache_limiter » en php.ini (con lo que pasar PHPs manejo de los encabezados de caché), y añadiendo lo siguiente filters.php aplicación:después (de)

         /*
         * Custom cache headers for js and css files
         */
        if ($request->is('*.js') || $request->is('*.css')){
            $response->header("pragma", "private");
            $response->header("Cache-Control", " private, max-age=86400");
        } else {
            $response->header("pragma", "no-cache");
            $response->header("Cache-Control", "no-store,no-cache, must-revalidate, post-check=0, pre-check=0");
        }

    OriginalEl autor Geoff Salmon

  2. 0

    Aunque no sé su configuración exacta, supongo que esto es debido a su configuración de Apache, como los valores de encabezado puede ser sobrescrito no.

    Echar un vistazo a través de todos los archivos de configuración de Apache y mirar hacia fuera para las líneas que comienzan con Header Set Cache-Control, por ejemplo, Header Set Cache-Control "no-store, no-cache, must-revalidate, post-check=0, pre-check=0"

    Probable que una directiva se establece que solo afectan a sus archivos PHP, que sería la razón por la que otros se entregan los archivos con otras cabeceras.

    Sin embargo: tener cuidado a la hora de cambiar esto. Tal vez usted querrá establecer por razones de seguridad. Considerar la problemas con la caché dinámica, el contenido autenticado por proxies (enlace para los detalles).

    Gracias por su respuesta. Como yo estaba tratando de usar el ‘Laravel manera’, yo no he probado esto: header(‘Cache-Control: max-age=’ . config(‘imagecache.toda la vida’)*60) . ‘público’); Ahora lo hice y parece que funciona. Pero aún así, cuando trato de ponerlo en el IlluminateResponse objeto, todavía tengo la misma situación como se describió en el primer post anterior. ¿Todavía crees que puede tener que ver con la configuración de Apache?

    OriginalEl autor Jan D

Dejar respuesta

Please enter your comment!
Please enter your name here