{"id":741,"date":"2014-09-14T10:07:32","date_gmt":"2014-09-14T08:07:32","guid":{"rendered":"http:\/\/dev.bratched.fr\/fr\/?p=741"},"modified":"2014-09-14T10:07:32","modified_gmt":"2014-09-14T08:07:32","slug":"optimiser-la-syncho-http-de-vos-apps-avec-le-champ-header-if-modified-since","status":"publish","type":"post","link":"https:\/\/bratched.com\/fr\/2014\/09\/14\/optimiser-la-syncho-http-de-vos-apps-avec-le-champ-header-if-modified-since\/","title":{"rendered":"Optimiser la synchro HTTP de vos apps avec le champ Header \u00ab\u00a0If-Modified-Since\u00a0\u00bb"},"content":{"rendered":"<p>Le saviez vous ? Ajouter le champ Request-Header \u00ab\u00a0<em>If-Modified-Since<\/em>\u00a0\u00bb peut faire gagner \u00e0 votre application de la rapidit\u00e9 et \u00e9viter de drainer l&rsquo;\u00e9nergie de la batterie du smartphone de l&rsquo;utilisateur.<\/p>\n<p>Protocole d&rsquo;utilisation \u00ab\u00a0HTTP\/1.1 GET method\u00a0\u00bb<\/p>\n<p>Tout d&rsquo;abord, \u00e0 quoi sert ce champ d&rsquo;ent\u00eate ? Il permet d&rsquo;ajouter une condition \u00e0 la requ\u00eate \u00e0 envoyer en fonction d&rsquo;une date : les donn\u00e9es sont\u00a0transf\u00e9r\u00e9es dans leur\u00a0totalit\u00e9 si elles ont \u00e9t\u00e9 modifi\u00e9es depuis la date donn\u00e9e par le header \u00ab\u00a0If-Modified-Since\u00a0\u00bb.<\/p>\n<p>Voici sommairement son fonctionnement :<\/p>\n<p><!--more--><br \/>\nSi le contenu n&rsquo;a pas \u00e9t\u00e9 modifi\u00e9 depuis la date pass\u00e9e par\u00a0le\u00a0Request-Header \u00ab\u00a0If-Modified-Since\u00a0\u00bb, la requ\u00eate renvoie un statut 304 (Not Modified) sinon la requ\u00eate transf\u00e8re normalement le r\u00e9sultat comme un GET avec un status 200 (OK) m\u00eame si la date est invalide.<\/p>\n<p>Cette m\u00e9thode permet de consommer peu de donn\u00e9es et aussi de gagner de la rapidit\u00e9 si le contenu n&rsquo;a pas chang\u00e9, en effet le contenu n&rsquo;est pas transf\u00e9r\u00e9 donc la connexion est rapide et il n&rsquo;est pas n\u00e9cessaire de mettre \u00e0 jour l&rsquo;application. Dans le cadre d&rsquo;une synchronisation planifi\u00e9e qui demande un t\u00e9l\u00e9chargement de donn\u00e9es, l&rsquo;avantage est \u00e9vident, la plupart du temps les donn\u00e9es n&rsquo;auront pas chang\u00e9.<\/p>\n<p><strong>Exemple d&rsquo;Impl\u00e9mentation en java<\/strong><\/p>\n<p><em>Attribution du Header-Request \u00ab\u00a0If-Modified-Since\u00a0\u00bb<\/em><\/p>\n<pre title=\"Ajout du Header-Request \" class=\"theme:eclipse lang:java decode:true \">\/*\n * If the modified date isn't 0, sets another request property to ensure that\n * data is only downloaded if it has changed since the last recorded\n * modification date. Formats the date according to the RFC1123 format.\n *\/\nif (0 != storedModifiedDate) {\n    localHttpURLConnection.setRequestProperty(\n            \"If-Modified-Since\",\n            org.apache.http.impl.cookie.DateUtils.formatDate(\n                    new Date(storedModifiedDate),\n                    org.apache.http.impl.cookie.DateUtils.PATTERN_RFC1123));\n}\n<\/pre>\n<p><em>Pour consommer la r\u00e9ponse il suffit de v\u00e9rifier son statut \u00e0 200 (OK) et r\u00e9cup\u00e9rer la\u00a0derni\u00e8re date de modification<\/em><\/p>\n<pre title=\"Consommation de la r\u00e9ponse\" class=\"theme:eclipse lang:java decode:true\">\/\/ Gets a response code from the server\nint responseCode = localHttpURLConnection.getResponseCode();\n\nswitch (responseCode) {\n\n    \/\/ If the response is OK\n    case HttpStatus.SC_OK:\n\n        \/\/ Gets the last modified data for the URL\n        long lastModifiedDate = localHttpURLConnection.getLastModified();\n\n...\n\n        break;\n\n}\n\n\n<\/pre>\n<p>Plus d&rsquo;informations sur les champs Header :\u00a0<a title=\"HTTP\/1.1: Header Field Definitions\" href=\"http:\/\/www.w3.org\/Protocols\/rfc2616\/rfc2616-sec14.html\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/www.w3.org\/Protocols\/rfc2616\/rfc2616-sec14.html<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Le saviez vous ? Ajouter le champ Request-Header \u00ab\u00a0If-Modified-Since\u00a0\u00bb peut faire gagner \u00e0 votre application de la rapidit\u00e9 et \u00e9viter de drainer l&rsquo;\u00e9nergie de la batterie du smartphone de l&rsquo;utilisateur. Protocole d&rsquo;utilisation \u00ab\u00a0HTTP\/1.1 GET method\u00a0\u00bb Tout d&rsquo;abord, \u00e0 quoi sert ce champ d&rsquo;ent\u00eate ? Il permet d&rsquo;ajouter une condition \u00e0 la requ\u00eate \u00e0 envoyer en [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[104,59,63],"tags":[103,56,77,105,79,106],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/bratched.com\/fr\/wp-json\/wp\/v2\/posts\/741"}],"collection":[{"href":"https:\/\/bratched.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bratched.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bratched.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bratched.com\/fr\/wp-json\/wp\/v2\/comments?post=741"}],"version-history":[{"count":0,"href":"https:\/\/bratched.com\/fr\/wp-json\/wp\/v2\/posts\/741\/revisions"}],"wp:attachment":[{"href":"https:\/\/bratched.com\/fr\/wp-json\/wp\/v2\/media?parent=741"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bratched.com\/fr\/wp-json\/wp\/v2\/categories?post=741"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bratched.com\/fr\/wp-json\/wp\/v2\/tags?post=741"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}