Visualizzazione risultati 1 fino 5 di 5

Discussione: [php] [apache] doppio max-age, chi ce lo mette?

  1. #1
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,261

    Predefinito [php] [apache] doppio max-age, chi ce lo mette?

    Immaginetta nella firma con testo dinamico:

    Siccome il contenuto ad esso riferito viene aggiornato ogni giorno (almeno), ho pensato di aggiungere degli header allo script php che la genera, per permettere il caching dell'immagine giusto per 24h. Così:
    Codice PHP:
    // output dell'immagine
    header ('Cache-Control: must-revalidate, max-age=86400');
    header ('Last-Modified: ' . date('D, d M Y H:i:s', $ts) . ' GMT');
    header ("Content-type: image/png");
    Il problema è che nella risposta del server mi ritrovo definiti due max-age, di cui probabilmente il secondo prende la precedenza:
    Codice:
    D:\Desktop>wget -S http://dreadnaut.altervista.org/daily-img.php
    --20:45:33--  http://dreadnaut.altervista.org/daily-img.php
               => `daily-img.php'
    Resolving dreadnaut.altervista.org... 78.46.62.14
    Connecting to dreadnaut.altervista.org|78.46.62.14|:80... connected.
    HTTP request sent, awaiting response...
      HTTP/1.1 200 OK
      Date: Thu, 09 Dec 2010 20:45:24 GMT
      Server: Apache
      Cache-Control: must-revalidate, max-age=86400, max-age=2592000
      Last-Modified: Thu, 09 Dec 2010 21:23:22 GMT
      Expires: Sat, 08 Jan 2011 20:45:24 GMT
      Content-Length: 2148
      Keep-Alive: timeout=1, max=100
      Connection: Keep-Alive
      Content-Type: image/png
    Length: 2.148 (2.1K) [image/png]
    
    100%[====================================>] 2.148         --.--K/s
    
    20:45:33 (19.83 MB/s) - `daily-img.php' saved [2148/2148]
    Darei la colpa al server, ma non ne sono certo. C'è un modo per evitare che il secondo valore venga aggiunto in automatico?

  2. #2
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Non mi è mai capitato.
    Però ho pensato che potresti impostare a true il secondo argomento della funzione header ( per rimpiazzare l'header se è già impostato ).

    P.s. Effettivamente anche io negli header inviati da daily-img.php leggo:
    Cache-Control:must-revalidate, max-age=86400, max-age=2592000
    Ah, per ottimizzare l'utilizzo della cache potresti restituire un header 304 ( not modified ), se $_SERVER['HTTP_IF_MODIFIED_SINCE'] è impostato.

    Codice PHP:
    <?php
    if(isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])){
    header('Last-Modified: ' . $_SERVER['HTTP_IF_MODIFIED_SINCE'], true, 304);
    die();
    }

    // headers per il caching
    // script che genera immagine
    ?>
    Ultima modifica di javascripter : 10-12-2010 alle ore 16.20.14

  3. #3
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,261

    Predefinito

    Citazione Originalmente inviato da javascripter Visualizza messaggio
    Però ho pensato che potresti impostare a true il secondo argomento della funzione header ( per rimpiazzare l'header se è già impostato ).
    Quel pezzo sembra venir aggiunto dopo l'esecuzione dello script, quindi resettare il campo non aiuta

    Citazione Originalmente inviato da javascripter Visualizza messaggio
    Ah, per ottimizzare l'utilizzo della cache potresti restituire un header 304 ( not modified )
    Saggio, solo che io sto cercando di fare l'opposto: diminuire il tempo in cui resta nella cache, non aumentarlo Vorrei 24h invece dei 30g che AlterVista (o qualcosa di mezzo) sembra forzare.

    Fra parentesi, potrei andare di no-cache, ma è una soluzione un po' pastrocchia.

  4. #4
    L'avatar di andreafallico
    andreafallico non è connesso Super Moderatore
    Data registrazione
    02-06-2009
    Messaggi
    1,981

    Predefinito

    Devi aggiungere Expires
    Codice PHP:
    header("Expires: $date GMT");
    e il max-age=2592000 non viene inserito.

  5. #5
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,261

    Predefinito

    Perfetto, grazie!

    Curiosità: sorgente di questa informazione? Avevo scavato qua e la in documentazioni varie, ma non avevo trovato nulla a proposito.

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •