{"id":4282,"date":"2010-08-26T14:00:20","date_gmt":"2010-08-26T12:00:20","guid":{"rendered":"https:\/\/www.artera.net\/it\/blog\/?p=4282"},"modified":"2023-02-27T14:55:44","modified_gmt":"2023-02-27T14:55:44","slug":"utilizzare-la-cache-dei-browser-con-gli-etag-in-php","status":"publish","type":"post","link":"https:\/\/www.artera.net\/it\/sviluppo\/utilizzare-la-cache-dei-browser-con-gli-etag-in-php\/","title":{"rendered":"Utilizzare la cache dei browser con gli ETag in PHP"},"content":{"rendered":"<p><img decoding=\"async\" class=\"alignleft size-full wp-image-4312\" title=\"Utilizzare la Cache dei browser con gli Etag\" src=\"https:\/\/www.artera.net\/wp-content\/uploads\/2010\/08\/Button-Refresh-icon1.png\" alt=\"Utilizzare la Cache dei browser con gli Etag\" width=\"110\" height=\"110\" style=\"margin-right:10px;\"\/>Di tecniche per sfruttare la <strong>cache interna dei browser<\/strong> ne esistono molte. La pi\u00f9 semplice prevede di <strong>impostare una &#8220;scadenza&#8221;<\/strong> alla risorsa in questione e il browser continuer\u00e0 ad utilizzare la copia scaricata in precedenza fino a tale data, ma cosa succede quando il contenuto di questa risorsa viene modificato?<\/p>\n<p>In questo caso il browser non \u00e8 in grado di notare la differenza e continuer\u00e0 a utilizzare la copia in cache fino a quando questa non scade.<\/p>\n<p>Un trucco che si pu\u00f2 utilizzare \u00e8 quello di cambiare l&#8217;url della risorsa, rinominando il file o <strong>aggiungendo una variabile<\/strong> (ES: http:\/\/www.artera.it\/immagine.png?version=2), in questo caso il browser sar\u00e0 costretto a scaricare il nuovo file perch\u00e9 viene considerato una risorsa completamente nuova della quale non ha nessuna versione in cache.<\/p>\n<p>Questo sistema risulta tuttavia scomodo perch\u00e9 ad ogni aggiornamento bisogna anche modificarne tutti i riferimenti sul sito, ma fortunatamente esiste un&#8217;alternativa valida fornita dai browser, ovvero gli ETag.<\/p>\n<h2>Come funzionano<\/h2>\n<p>Gli <strong>ETag<\/strong> sono un identificativo fornito dal web-server al browser che identifica univocamente una specifica versione di una risorsa situata ad un dato URL.<\/p>\n<p>Il funzionamento \u00e8 molto semplice: Quando il browser richiede una risorsa il server web include all&#8217;interno degli header una particolare stringa univoca, ad esempio &#8220;ABCDEFG&#8221; (l&#8217;ETag).<\/p>\n<p>Il browser salva quindi la risorsa in cache ricordandosi questa stringa per il futuro.<\/p>\n<p>Ad una successiva richiesta il browser dir\u00e0 al server (simulazione in linguaggio umano) \u00ab<em>mi serve la risorsa X, considera che ho gi\u00e0 la versione &#8220;ABCDEFG&#8221;<\/em>\u00bb, il server trova la risorsa X e ne verifica la versione, se \u00e8 la stessa risponder\u00e0 al browser dicendo \u00ab<em>la risorsa non \u00e8 stata modificata<\/em>\u00bb (HTTP\/1.0 304 Not Modified) senza inviare altri dati e quindi con notevole risparmio di banda, altrimenti invier\u00e0 la nuova versione con il nuovo ETag e il browser invalider\u00e0 la copia di cache precedente.<\/p>\n<h2>ETag automatici per le risorse statiche in Apache<\/h2>\n<p>Apache supporta la <strong>generazione automatica di un ETag<\/strong> per le risorse statiche utilizzando parametri come dimensione del file e data di ultima modifica per capire quando una risorsa \u00e8 stata modificata.<\/p>\n<p>Abilitare questa funzionalit\u00e0 \u00e8 molto semplice, basta inserire la direttiva <a href=\"http:\/\/httpd.apache.org\/docs\/2.2\/mod\/core.html#fileetag\">FileETag<\/a> riga all&#8217;interno del file .htaccess o in un blocco  del file di configurazione di Apache.<\/p>\n<p>[code gutter=&#8221;false&#8221;]<br \/>\nFileETag MTime Size<br \/>\n[\/code]<\/p>\n<h2>ETag in PHP<\/h2>\n<p>Vediamo come <strong>generare in PHP degli ETag<\/strong> da fornire al browser per fare cache di contenuti generati dinamicamente.<\/p>\n<p>Nel nostro esempio svilupperemo una pagina PHP che prende l&#8217;immagine &#8220;<em>sfondo.png<\/em>&#8220;, gli sovrappone una scritta ricevuta in GET, e invia il risultato al browser<br \/>\nEcco come si presenta lo script senza l&#8217;uso degli ETag.<\/p>\n<p>[php]<br \/>\n&lt;?php<br \/>\nif (empty($_GET[&#8216;s&#8217;]) {<br \/>\n  header(&#8216;HTTP\/1.0 400 Bad Request&#8217;);<br \/>\n  exit;<br \/>\n}<\/p>\n<p>$im = imagecreatefromstring( file_get_contents(&quot;sfondo.png&quot;) );<br \/>\n$color = imagecolorallocate($im, 0, 0, 0);<br \/>\nimagestring($im, 2, 0, 0, $_GET[&#8216;s&#8217;], $color);<\/p>\n<p>header(&#8216;Content-type: image\/png&#8217;);<br \/>\nimagepng($im);<br \/>\nimagedestroy($im);<br \/>\n[\/php]<\/p>\n<p>Dal codice si evince che se non viene modificata l&#8217;immagine &#8220;<em>sfondo.png<\/em>&#8221; e se il testo fornito come parametro resta identico allora anche l&#8217;immagine finale sar\u00e0 identica e quindi sarebbe meglio che il browser utilizzasse la sua cache.<\/p>\n<p>Dobbiamo quindi generare un ETag in base a questi parametri ma dato che la stringa di testo viene fornita tramite GET, al cambiare della stringa cambia anche l&#8217;URL e quindi non abbiamo bisogno di tenerlo in considerazione (Nota: diverse risorse possono avere lo stesso ETag senza creare problemi al browser che le salva in cache utilizzando sia l&#8217;URL che l&#8217;ETag come discriminanti).<\/p>\n<p>Per motivi di performance useremo anche noi, come Apache, dimensione e data di modifica del file &#8220;<em>sfondo.png<\/em>&#8221; anzich\u00e9 il suo contenuto per generare l&#8217;ETag (che deve avere le virgolette intorno).<\/p>\n<p>[php gutter=&#8221;false&#8221;]<br \/>\n$etag = filesize(&quot;sfondo.png&quot;).filemtime(&quot;sfondo.png&quot;);<br \/>\n$etag = &#8216;&quot;&#8217;.$etag.&#8217;&quot;&#8217;;<br \/>\n[\/php]<\/p>\n<p>Questo ETag verr\u00e0 inviato al browser, dopodich\u00e9 verifichiamo se il browser ci ha comunicato un ETag con l&#8217;header <em>HTTP_IF_NONE_MATCH<\/em> e se il tag corrisponde interrompiamo lo script.<\/p>\n<p>Il codice finale \u00e8 quindi:<\/p>\n<p>[php]<br \/>\n&lt;?php<br \/>\nif (empty($_GET[&#8216;s&#8217;]) {<br \/>\n  header(&#8216;HTTP\/1.0 400 Bad Request&#8217;);<br \/>\n  exit;<br \/>\n}<\/p>\n<p>\/\/ Calcolo un etag e lo comunico al client<br \/>\n$etag = filesize(&quot;sfondo.png&quot;).filemtime(&quot;sfondo.png&quot;);<br \/>\n$etag = &#8216;&quot;&#8217;.$etag.&#8217;&quot;&#8217;;<br \/>\nheader(&quot;Etag: $etag&quot;);<\/p>\n<p>\/\/ Verifico l&#8217;etag richiesto dal client ed eventualmente interrompo lo script<br \/>\nif (!empty($_SERVER[&#8216;HTTP_IF_NONE_MATCH&#8217;]) &amp;&amp;<br \/>\n    $_SERVER[&#8216;HTTP_IF_NONE_MATCH&#8217;]==$etag) {<br \/>\n  header(&#8216;HTTP\/1.0 304 Not Modified&#8217;);<br \/>\n  header(&#8216;Content-Length: 0&#8217;);<br \/>\n  exit;<br \/>\n}<\/p>\n<p>\/\/ Il browser non ha una copia in cache, quindi proseguo nella generazione dell&#8217;immagine<br \/>\n$im = imagecreatefromstring( file_get_contents(&quot;sfondo.png&quot;) );<br \/>\n$color = imagecolorallocate($im, 0, 0, 0);<br \/>\nimagestring($im, 2, 0, 0, $_GET[&#8216;s&#8217;], $color);<\/p>\n<p>header(&#8216;Content-type: image\/png&#8217;);<br \/>\nimagepng($im);<br \/>\nimagedestroy($im);<br \/>\n[\/php]<\/p>\n<h2>Verifichiamo il funzionamento con i Developer Tools di Chrome<\/h2>\n<p>Grazie ai <strong>Developer Tools di Chrome<\/strong> possiamo verificare gli header inviati e ricevuti dal browser e capire se il nostro codice sfrutta effettivamente la cache. La procedura che seguiremo \u00e8 facilmente riproducibile anche utilizzando Firefox+Firebug.<\/p>\n<p>Carichiamo il nostro script nel browser (nel nostro caso abbiamo utilizzato il nome banners.php) e apriamo i Developer Tools facendo clic col tasto destro e selezionando &#8220;<em>Ispeziona elemento<\/em>&#8220;.<\/p>\n<p>Selezionamo la pagina &#8220;<em>Resources<\/em>&#8221; dalle voci disponibili nell&#8217;area superiore e cerchiamo &#8220;<em>banners.php<\/em>&#8221; dall&#8217;elenco di risorse.<br \/>\nNel pannello di destra dovremmo vedere gli header della richiesta (assicuriamoci di aver selezionato la tab &#8220;<em>Headers<\/em>&#8220;) che mostrano lo status 200 e l&#8217;Etag generato.<\/p>\n<figure id=\"attachment_4301\" aria-describedby=\"caption-attachment-4301\" style=\"width: 590px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.artera.net\/wp-content\/uploads\/2010\/08\/etag-200.png\"><img fetchpriority=\"high\" decoding=\"async\" class=\"size-full wp-image-4301\" src=\"https:\/\/www.artera.net\/wp-content\/uploads\/2010\/08\/etag-200.png\" alt=\"Prima richiesta senza cache\" width=\"590\" height=\"443\" \/><\/a><figcaption id=\"caption-attachment-4301\" class=\"wp-caption-text\">Prima richiesta senza cache<\/figcaption><\/figure>\n<p>Se ricarichiamo la pagina (attenzione che F5 potrebbe svuotare la cache del browser) dovremmo vedere che ora la risposta contiene lo status 304 perch\u00e9 la risorsa risulta uguale a quella presente in cache e il caricamento sar\u00e0 di conseguenza istantaneo.<\/p>\n<figure id=\"attachment_4303\" aria-describedby=\"caption-attachment-4303\" style=\"width: 590px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.artera.net\/wp-content\/uploads\/2010\/08\/etag-304.png\"><img decoding=\"async\" class=\"size-full wp-image-4303\" src=\"https:\/\/www.artera.net\/wp-content\/uploads\/2010\/08\/etag-304.png\" alt=\"Il codice 304 dimostra che il browser ha sfruttato la cache\" width=\"590\" height=\"354\" \/><\/a><figcaption id=\"caption-attachment-4303\" class=\"wp-caption-text\">Il codice 304 dimostra che il browser ha sfruttato la cache<\/figcaption><\/figure>\n","protected":false},"excerpt":{"rendered":"<p><img decoding=\"async\" class=\"alignleft size-full wp-image-4312\" title=\"Utilizzare la Cache dei browser con gli Etag\" src=\"https:\/\/www.artera.net\/wp-content\/uploads\/2010\/08\/Button-Refresh-icon1.png\" alt=\"Utilizzare la Cache dei browser con gli Etag\" width=\"110\" height=\"110\" style=\"margin-right:10px;\"\/>Di tecniche per sfruttare la <strong>cache interna dei browser<\/strong> ne esistono molte. La pi\u00f9 semplice prevede di <strong>impostare una &#8220;scadenza&#8221;<\/strong> alla risorsa in questione e il browser continuer\u00e0 ad utilizzare la copia scaricata in precedenza fino a tale data, ma cosa succede quando il contenuto di questa risorsa viene modificato?<\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_eb_attr":"","footnotes":""},"categories":[108],"tags":[178,179,63],"class_list":["post-4282","post","type-post","status-publish","format-standard","hentry","category-sviluppo","tag-apache","tag-cache","tag-php"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>\u2022 Utilizzare la cache dei browser con gli ETag in PHP - Artera<\/title>\n<meta name=\"description\" content=\"Leggi dal blog: Utilizzare la cache dei browser con gli ETag in PHP. Contattaci per una partnership! Artera Swiss Premium Hosting news, articoli e notizie interessanti dal mondo digitale.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.artera.net\/it\/sviluppo\/utilizzare-la-cache-dei-browser-con-gli-etag-in-php\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u2022 Utilizzare la cache dei browser con gli ETag in PHP - Artera\" \/>\n<meta property=\"og:description\" content=\"Leggi dal blog: Utilizzare la cache dei browser con gli ETag in PHP. Contattaci per una partnership! Artera Swiss Premium Hosting news, articoli e notizie interessanti dal mondo digitale.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.artera.net\/it\/sviluppo\/utilizzare-la-cache-dei-browser-con-gli-etag-in-php\/\" \/>\n<meta property=\"og:site_name\" content=\"Artera\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/artera.net\/\" \/>\n<meta property=\"article:published_time\" content=\"2010-08-26T12:00:20+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-02-27T14:55:44+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.artera.net\/wp-content\/uploads\/2010\/08\/Button-Refresh-icon1.png\" \/>\n<meta name=\"author\" content=\"Sergio Ravera\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Sergio Ravera\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.artera.net\\\/it\\\/sviluppo\\\/utilizzare-la-cache-dei-browser-con-gli-etag-in-php\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.artera.net\\\/it\\\/sviluppo\\\/utilizzare-la-cache-dei-browser-con-gli-etag-in-php\\\/\"},\"author\":{\"name\":\"Sergio Ravera\",\"@id\":\"https:\\\/\\\/www.artera.net\\\/it\\\/#\\\/schema\\\/person\\\/48ffb6b3727677643fbfd3ecf0a10aa0\"},\"headline\":\"Utilizzare la cache dei browser con gli ETag in PHP\",\"datePublished\":\"2010-08-26T12:00:20+00:00\",\"dateModified\":\"2023-02-27T14:55:44+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.artera.net\\\/it\\\/sviluppo\\\/utilizzare-la-cache-dei-browser-con-gli-etag-in-php\\\/\"},\"wordCount\":973,\"commentCount\":4,\"publisher\":{\"@id\":\"https:\\\/\\\/www.artera.net\\\/it\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.artera.net\\\/it\\\/sviluppo\\\/utilizzare-la-cache-dei-browser-con-gli-etag-in-php\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.artera.net\\\/wp-content\\\/uploads\\\/2010\\\/08\\\/Button-Refresh-icon1.png\",\"keywords\":[\"Apache\",\"cache\",\"PHP\"],\"articleSection\":[\"Sviluppo\"],\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.artera.net\\\/it\\\/sviluppo\\\/utilizzare-la-cache-dei-browser-con-gli-etag-in-php\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.artera.net\\\/it\\\/sviluppo\\\/utilizzare-la-cache-dei-browser-con-gli-etag-in-php\\\/\",\"url\":\"https:\\\/\\\/www.artera.net\\\/it\\\/sviluppo\\\/utilizzare-la-cache-dei-browser-con-gli-etag-in-php\\\/\",\"name\":\"\u2022 Utilizzare la cache dei browser con gli ETag in PHP - Artera\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.artera.net\\\/it\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.artera.net\\\/it\\\/sviluppo\\\/utilizzare-la-cache-dei-browser-con-gli-etag-in-php\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.artera.net\\\/it\\\/sviluppo\\\/utilizzare-la-cache-dei-browser-con-gli-etag-in-php\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.artera.net\\\/wp-content\\\/uploads\\\/2010\\\/08\\\/Button-Refresh-icon1.png\",\"datePublished\":\"2010-08-26T12:00:20+00:00\",\"dateModified\":\"2023-02-27T14:55:44+00:00\",\"description\":\"Leggi dal blog: Utilizzare la cache dei browser con gli ETag in PHP. Contattaci per una partnership! Artera Swiss Premium Hosting news, articoli e notizie interessanti dal mondo digitale.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.artera.net\\\/it\\\/sviluppo\\\/utilizzare-la-cache-dei-browser-con-gli-etag-in-php\\\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.artera.net\\\/it\\\/sviluppo\\\/utilizzare-la-cache-dei-browser-con-gli-etag-in-php\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\\\/\\\/www.artera.net\\\/it\\\/sviluppo\\\/utilizzare-la-cache-dei-browser-con-gli-etag-in-php\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.artera.net\\\/wp-content\\\/uploads\\\/2010\\\/08\\\/Button-Refresh-icon1.png\",\"contentUrl\":\"https:\\\/\\\/www.artera.net\\\/wp-content\\\/uploads\\\/2010\\\/08\\\/Button-Refresh-icon1.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.artera.net\\\/it\\\/sviluppo\\\/utilizzare-la-cache-dei-browser-con-gli-etag-in-php\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.artera.net\\\/it\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Utilizzare la cache dei browser con gli ETag in PHP\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.artera.net\\\/it\\\/#website\",\"url\":\"https:\\\/\\\/www.artera.net\\\/it\\\/\",\"name\":\"Artera\",\"description\":\"Swiss Premium Hosting\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.artera.net\\\/it\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.artera.net\\\/it\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.artera.net\\\/it\\\/#organization\",\"name\":\"Artera\",\"url\":\"https:\\\/\\\/www.artera.net\\\/it\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\\\/\\\/www.artera.net\\\/it\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.artera.net\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/artera-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.artera.net\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/artera-logo.png\",\"width\":300,\"height\":77,\"caption\":\"Artera\"},\"image\":{\"@id\":\"https:\\\/\\\/www.artera.net\\\/it\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/artera.net\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/artera\\\/\",\"https:\\\/\\\/www.instagram.com\\\/artera_swiss\\\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.artera.net\\\/it\\\/#\\\/schema\\\/person\\\/48ffb6b3727677643fbfd3ecf0a10aa0\",\"name\":\"Sergio Ravera\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/618f2c20338bb422bd317eae8d6c9c097ba85d3f5a1da18e21ecf5da5ee3a448?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/618f2c20338bb422bd317eae8d6c9c097ba85d3f5a1da18e21ecf5da5ee3a448?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/618f2c20338bb422bd317eae8d6c9c097ba85d3f5a1da18e21ecf5da5ee3a448?s=96&d=mm&r=g\",\"caption\":\"Sergio Ravera\"},\"description\":\"Raised in a family tradition of merchants, my entrepreneurial spirit drove me to launch my first e-commerce venture in 1998. My vision and dedication led, in 2002, to the founding of Artera, now a leading brand in premium managed cloud hosting services. As Chief Executive Officer, I lead DHH Switzerland SA, part of the international DHH S.p.A. group, listed on the Milan Stock Exchange with the reference code (AIM \u2013 ISIN: IT0005203622). It is under this brand that the Artera brand continues to grow and thrive. In addition to my commitment to the business world, I am an active researcher in the field of new technologies, always fascinated by cutting-edge innovations in the industry.\",\"sameAs\":[\"https:\\\/\\\/www.linkedin.com\\\/in\\\/sergioravera\\\/\"],\"url\":\"https:\\\/\\\/www.artera.net\\\/it\\\/author\\\/sergio-ravera\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"\u2022 Utilizzare la cache dei browser con gli ETag in PHP - Artera","description":"Leggi dal blog: Utilizzare la cache dei browser con gli ETag in PHP. Contattaci per una partnership! Artera Swiss Premium Hosting news, articoli e notizie interessanti dal mondo digitale.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.artera.net\/it\/sviluppo\/utilizzare-la-cache-dei-browser-con-gli-etag-in-php\/","og_locale":"it_IT","og_type":"article","og_title":"\u2022 Utilizzare la cache dei browser con gli ETag in PHP - Artera","og_description":"Leggi dal blog: Utilizzare la cache dei browser con gli ETag in PHP. Contattaci per una partnership! Artera Swiss Premium Hosting news, articoli e notizie interessanti dal mondo digitale.","og_url":"https:\/\/www.artera.net\/it\/sviluppo\/utilizzare-la-cache-dei-browser-con-gli-etag-in-php\/","og_site_name":"Artera","article_publisher":"https:\/\/www.facebook.com\/artera.net\/","article_published_time":"2010-08-26T12:00:20+00:00","article_modified_time":"2023-02-27T14:55:44+00:00","og_image":[{"url":"https:\/\/www.artera.net\/wp-content\/uploads\/2010\/08\/Button-Refresh-icon1.png","type":"","width":"","height":""}],"author":"Sergio Ravera","twitter_card":"summary_large_image","twitter_misc":{"Scritto da":"Sergio Ravera","Tempo di lettura stimato":"5 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.artera.net\/it\/sviluppo\/utilizzare-la-cache-dei-browser-con-gli-etag-in-php\/#article","isPartOf":{"@id":"https:\/\/www.artera.net\/it\/sviluppo\/utilizzare-la-cache-dei-browser-con-gli-etag-in-php\/"},"author":{"name":"Sergio Ravera","@id":"https:\/\/www.artera.net\/it\/#\/schema\/person\/48ffb6b3727677643fbfd3ecf0a10aa0"},"headline":"Utilizzare la cache dei browser con gli ETag in PHP","datePublished":"2010-08-26T12:00:20+00:00","dateModified":"2023-02-27T14:55:44+00:00","mainEntityOfPage":{"@id":"https:\/\/www.artera.net\/it\/sviluppo\/utilizzare-la-cache-dei-browser-con-gli-etag-in-php\/"},"wordCount":973,"commentCount":4,"publisher":{"@id":"https:\/\/www.artera.net\/it\/#organization"},"image":{"@id":"https:\/\/www.artera.net\/it\/sviluppo\/utilizzare-la-cache-dei-browser-con-gli-etag-in-php\/#primaryimage"},"thumbnailUrl":"https:\/\/www.artera.net\/wp-content\/uploads\/2010\/08\/Button-Refresh-icon1.png","keywords":["Apache","cache","PHP"],"articleSection":["Sviluppo"],"inLanguage":"it-IT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.artera.net\/it\/sviluppo\/utilizzare-la-cache-dei-browser-con-gli-etag-in-php\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.artera.net\/it\/sviluppo\/utilizzare-la-cache-dei-browser-con-gli-etag-in-php\/","url":"https:\/\/www.artera.net\/it\/sviluppo\/utilizzare-la-cache-dei-browser-con-gli-etag-in-php\/","name":"\u2022 Utilizzare la cache dei browser con gli ETag in PHP - Artera","isPartOf":{"@id":"https:\/\/www.artera.net\/it\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.artera.net\/it\/sviluppo\/utilizzare-la-cache-dei-browser-con-gli-etag-in-php\/#primaryimage"},"image":{"@id":"https:\/\/www.artera.net\/it\/sviluppo\/utilizzare-la-cache-dei-browser-con-gli-etag-in-php\/#primaryimage"},"thumbnailUrl":"https:\/\/www.artera.net\/wp-content\/uploads\/2010\/08\/Button-Refresh-icon1.png","datePublished":"2010-08-26T12:00:20+00:00","dateModified":"2023-02-27T14:55:44+00:00","description":"Leggi dal blog: Utilizzare la cache dei browser con gli ETag in PHP. Contattaci per una partnership! Artera Swiss Premium Hosting news, articoli e notizie interessanti dal mondo digitale.","breadcrumb":{"@id":"https:\/\/www.artera.net\/it\/sviluppo\/utilizzare-la-cache-dei-browser-con-gli-etag-in-php\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.artera.net\/it\/sviluppo\/utilizzare-la-cache-dei-browser-con-gli-etag-in-php\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/www.artera.net\/it\/sviluppo\/utilizzare-la-cache-dei-browser-con-gli-etag-in-php\/#primaryimage","url":"https:\/\/www.artera.net\/wp-content\/uploads\/2010\/08\/Button-Refresh-icon1.png","contentUrl":"https:\/\/www.artera.net\/wp-content\/uploads\/2010\/08\/Button-Refresh-icon1.png"},{"@type":"BreadcrumbList","@id":"https:\/\/www.artera.net\/it\/sviluppo\/utilizzare-la-cache-dei-browser-con-gli-etag-in-php\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.artera.net\/it\/"},{"@type":"ListItem","position":2,"name":"Utilizzare la cache dei browser con gli ETag in PHP"}]},{"@type":"WebSite","@id":"https:\/\/www.artera.net\/it\/#website","url":"https:\/\/www.artera.net\/it\/","name":"Artera","description":"Swiss Premium Hosting","publisher":{"@id":"https:\/\/www.artera.net\/it\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.artera.net\/it\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Organization","@id":"https:\/\/www.artera.net\/it\/#organization","name":"Artera","url":"https:\/\/www.artera.net\/it\/","logo":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/www.artera.net\/it\/#\/schema\/logo\/image\/","url":"https:\/\/www.artera.net\/wp-content\/uploads\/2019\/09\/artera-logo.png","contentUrl":"https:\/\/www.artera.net\/wp-content\/uploads\/2019\/09\/artera-logo.png","width":300,"height":77,"caption":"Artera"},"image":{"@id":"https:\/\/www.artera.net\/it\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/artera.net\/","https:\/\/www.linkedin.com\/company\/artera\/","https:\/\/www.instagram.com\/artera_swiss\/"]},{"@type":"Person","@id":"https:\/\/www.artera.net\/it\/#\/schema\/person\/48ffb6b3727677643fbfd3ecf0a10aa0","name":"Sergio Ravera","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/secure.gravatar.com\/avatar\/618f2c20338bb422bd317eae8d6c9c097ba85d3f5a1da18e21ecf5da5ee3a448?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/618f2c20338bb422bd317eae8d6c9c097ba85d3f5a1da18e21ecf5da5ee3a448?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/618f2c20338bb422bd317eae8d6c9c097ba85d3f5a1da18e21ecf5da5ee3a448?s=96&d=mm&r=g","caption":"Sergio Ravera"},"description":"Raised in a family tradition of merchants, my entrepreneurial spirit drove me to launch my first e-commerce venture in 1998. My vision and dedication led, in 2002, to the founding of Artera, now a leading brand in premium managed cloud hosting services. As Chief Executive Officer, I lead DHH Switzerland SA, part of the international DHH S.p.A. group, listed on the Milan Stock Exchange with the reference code (AIM \u2013 ISIN: IT0005203622). It is under this brand that the Artera brand continues to grow and thrive. In addition to my commitment to the business world, I am an active researcher in the field of new technologies, always fascinated by cutting-edge innovations in the industry.","sameAs":["https:\/\/www.linkedin.com\/in\/sergioravera\/"],"url":"https:\/\/www.artera.net\/it\/author\/sergio-ravera\/"}]}},"_links":{"self":[{"href":"https:\/\/www.artera.net\/it\/wp-json\/wp\/v2\/posts\/4282","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.artera.net\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.artera.net\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.artera.net\/it\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.artera.net\/it\/wp-json\/wp\/v2\/comments?post=4282"}],"version-history":[{"count":5,"href":"https:\/\/www.artera.net\/it\/wp-json\/wp\/v2\/posts\/4282\/revisions"}],"predecessor-version":[{"id":216372,"href":"https:\/\/www.artera.net\/it\/wp-json\/wp\/v2\/posts\/4282\/revisions\/216372"}],"wp:attachment":[{"href":"https:\/\/www.artera.net\/it\/wp-json\/wp\/v2\/media?parent=4282"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.artera.net\/it\/wp-json\/wp\/v2\/categories?post=4282"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.artera.net\/it\/wp-json\/wp\/v2\/tags?post=4282"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}