Optimiser la synchro HTTP de vos apps avec le champ Header « If-Modified-Since »

Le saviez vous ? Ajouter le champ Request-Header « If-Modified-Since » peut faire gagner à votre application de la rapidité et éviter de drainer l’énergie de la batterie du smartphone de l’utilisateur.

Protocole d’utilisation « HTTP/1.1 GET method »

Tout d’abord, à quoi sert ce champ d’entête ? Il permet d’ajouter une condition à la requête à envoyer en fonction d’une date : les données sont transférées dans leur totalité si elles ont été modifiées depuis la date donnée par le header « If-Modified-Since ».

Voici sommairement son fonctionnement :


Si le contenu n’a pas été modifié depuis la date passée par le Request-Header « If-Modified-Since », la requête renvoie un statut 304 (Not Modified) sinon la requête transfère normalement le résultat comme un GET avec un status 200 (OK) même si la date est invalide.

Cette méthode permet de consommer peu de données et aussi de gagner de la rapidité si le contenu n’a pas changé, en effet le contenu n’est pas transféré donc la connexion est rapide et il n’est pas nécessaire de mettre à jour l’application. Dans le cadre d’une synchronisation planifiée qui demande un téléchargement de données, l’avantage est évident, la plupart du temps les données n’auront pas changé.

Exemple d’Implémentation en java

Attribution du Header-Request « If-Modified-Since »

/*
 * If the modified date isn't 0, sets another request property to ensure that
 * data is only downloaded if it has changed since the last recorded
 * modification date. Formats the date according to the RFC1123 format.
 */
if (0 != storedModifiedDate) {
    localHttpURLConnection.setRequestProperty(
            "If-Modified-Since",
            org.apache.http.impl.cookie.DateUtils.formatDate(
                    new Date(storedModifiedDate),
                    org.apache.http.impl.cookie.DateUtils.PATTERN_RFC1123));
}

Pour consommer la réponse il suffit de vérifier son statut à 200 (OK) et récupérer la dernière date de modification

// Gets a response code from the server
int responseCode = localHttpURLConnection.getResponseCode();

switch (responseCode) {

    // If the response is OK
    case HttpStatus.SC_OK:

        // Gets the last modified data for the URL
        long lastModifiedDate = localHttpURLConnection.getLastModified();

...

        break;

}


Plus d’informations sur les champs Header : http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

Laissez un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

dix-huit + trois =

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.