Welcome to Idea R | Branding - Web Agency - Digital Strategies
Switch to the mobile layout

      Idea R - Plan your visual communication at 360°
  • HomeHome
  • About UsAbout Us
  • ContactsContacts

Blog

Take a software geek from the 80s, add a new generation graphic designer and dilute with a long time marketing strategist. Shake vigorously and you'll get the Idea R's blog.

Change language... italiano

You may be interested in

Irritated by your blog performance? Boost it using the cloud!

Irritated by your blog performance? Boost it using the cloud!

Are you using the world's fastest hosting? If you have a bad architecture, your blog won't have a great performance. Here is the ultimate solution.

How to skip the CDN during ASP.NET development

How to inject the Content Delivery Network URL in the production website without having to hardcode it.

Last published

How to design a FAKE B2C brand for a real B2B service

How to design a FAKE B2C brand for a real B2B service

Interesting case study where to advertise B2B services we created a fake B2C product in a guerrilla marketing campaign.

Influencer Marketing: all you need to know

What is the influencer marketing? Who are the brand ambassadors? Let's see how small and medium-sized companies can exploit to their advantage.

Most popular

Lazy loading and the SEO problem, solved!

Lazy loading and the SEO problem, solved!

The best SEO solution to index your dynamically loaded contents, no more compromises!

Case study: IED Open Day, building a font by hand... literally

These days graphic design is mainly the result of software tools. Here's a case study where a brand is designed with glue and scissors

Editor's pick

Mental marketing secret #1: the fake compromise

Mental marketing secret #1: the fake compromise

Can mentalism influence marketing? As a marketing professional and a long term magician, I will reveal you some tricks.

How to dramatically increase social media LIKEs to your web site

Here's a free download that I created some time ago. It's a good tool for increasing engagement, but use with caution.
newsletter

Stay informed on digital strategies

RSS feed

Come controllare efficacemente con ASP.NET la cache del client

Published on 6/12/2013
Come controllare efficacemente con ASP.NET la cache del client

In questo articolo vedremo come controllare con precisione la cache del client (il browser del vostro PC ad esempio) in modo da evitare di trasmettere dati dal server quando il client già li possiede. Il server ASP.NET già possiede dei sistemi di caching dei dati, ad esempio per evitare di continuare ad eseguire la stessa query nel database; ma sti dati, non sarebbe bello evitare di trasmetterli, risparmiando il consumo di banda?
La tecnica si chiama GET condizionale ed utilizza l'HTTP status code 304 ed in pratica è come se avvenisse il seguente dialogo tra client e server:

Client: "Ciao server, avrei bisogno di alcuni dati. L'ultima volta che me li hai forniti mi avevi detto che erano aggiornati alla seguente data/ora"

A questo punto il server controlla la data/ora fornita dal client e a seconda che i dati siano cambiati o no risponde:

Server: "Ciao client, i dati da allora sono cambiati, eccoti quelli nuovi. Se dovessi richiedermeli di nuovo, sappi che questi che ti ho appena mandato sono aggiornati alla seguente data/ora."

oppure

Server: "Ciao client, i dati da allora non sono cambiati, sicché evito di mandarteli di nuovo, ce li hai nella tua cache."

Questo tipo di ottimizzazione è particolarmente utile quando i dati sono generati dinamicamente lato server e cambiano durante il tempo.
Vediamo di tramutare questo dialogo in codice C#, utilizzando come esempio un HttpHandler che genera un file RSS dinamicamente (è quello che accade quando vi sottoscrivete ai feed RSS di questo blog). In questo esempio non affronteremo l'argomento della generazione dinamica degli RSS feed poiché andrebbe oltre lo scopo dell'articolo, ma ci limiteremo a vedere come implementare il caching condizionale.
Diamo per assunto che il metodo GetLastBlogUpdateDateTime() ritorna la data/ora UTC dell'ultimo aggiornamento del blog.

public class BlogRssHandler : IHttpHandler, IRequiresSessionState
{
    public virtual void ProcessRequest(HttpContext Context)
    {
        // If the client already has the updated RSS, do not send it again
        if (BuildResponseHeader(Context) == false)
            return;
        else
        {
            // Generate the RSS feed
            ...
        }
    }
 
    // Returns false if contents can be retrieved from the browser's cache
    // (HTTP response 304 optimization)
    private Boolean BuildResponseHeader(HttpContext Context)
    {
        // Get the last modification date/time stored in the database
        // NOTE: the date/time must be UTC
        DateTime serverLastUpdateUTC = GetLastBlogUpdateDateTime();
 
        // Get the last modification date provided by the browser (if any)
        String ifModifiedSinceHeaderText = Context.Request.Headers.
            Get("If-Modified-Since");
        if (!String.IsNullOrEmpty(ifModifiedSinceHeaderText))
        {
            DateTime clientLastUpdateUTC = DateTime.Parse(ifModifiedSinceHeaderText);
            clientLastUpdateUTC = clientLastUpdateUTC.Value.ToUniversalTime();
 
            // If the modification date/time of the client is equal to the server one
            if (serverLastUpdateUTC <= clientLastUpdateUTC)
            {
                // ...tell the browser that contents have not changed and return
                Context.Response.ClearContent();
                Context.Response.StatusCode = (Int32)
                    System.Net.HttpStatusCode.NotModified;
                Context.Response.StatusDescription = "Not Modified";
                Context.Response.SuppressContent = true;
                return false;
            }
        }
 
        Context.Response.ContentType = "text/xml";
        // Tell the browser to cache the new contents
        Context.Response.Cache.SetCacheability(HttpCacheability.Private);
        Context.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
        Context.Response.Cache.SetLastModified(DateTime.SpecifyKind(
            serverLastUpdateUTC.Value, DateTimeKind.Utc));
        // Force the browser to not use it's current cache
        Context.Response.Cache.SetMaxAge(new TimeSpan(0, 0, 0));
        Context.Response.Cache.SetExpires(DateTime.Now.ToUniversalTime());
        return true;
    }
 
    ...
}

Quando il server invia al client la data/ora di modifica, è meglio che venga arrotondata al secondo rimuovendo i millisecondi.
E' inoltre importante specificare che la data/ora è UTC (metodo DateTime.SpecifyKind), questa cosa non è citata in alcuni esempi in giro per il web ed invece è essenziale.

You are the reader number 3,668.

Comments

comments powered by Disqus
Creative Commons License

Photographies, videos, graphics and texts by Idea R are licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported License.

Previous article

Previous article

Case study: TAV Engineering, branding for B2B services

Next article

Keywords Mixer: download the free web marketing tool

Next article
  • Visual Communication, Art DirectionVisual Communication, Art Direction
  • Apps, Cloud, Mobile, Software DesignApps, Cloud, Mobile, Software Design
  • Digital StrategiesDigital Strategies
  • BlogBlog
Touching finger
RSS feed
Blog

Scroll to top