<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Trucs Libres &#187; HTTP</title>
	<atom:link href="http://fr.positon.org/tag/http/feed" rel="self" type="application/rss+xml" />
	<link>http://fr.positon.org</link>
	<description></description>
	<lastBuildDate>Tue, 23 Feb 2016 20:01:11 +0000</lastBuildDate>
	<language>fr-FR</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.7.1</generator>
	<item>
		<title>Précharger un contenu web avec la balise link prefetch, ou du javascript</title>
		<link>http://fr.positon.org/precharger-un-contenu-web-avec-la-balise-link-prefetch-ou-du-javascript</link>
		<comments>http://fr.positon.org/precharger-un-contenu-web-avec-la-balise-link-prefetch-ou-du-javascript#comments</comments>
		<pubDate>Sat, 30 Oct 2010 15:50:00 +0000</pubDate>
		<dc:creator><![CDATA[dooblem]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Bizou]]></category>
		<category><![CDATA[Chromium]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://positon.org:81/?p=104</guid>
		<description><![CDATA[Pour la gallerie d&#8217;images php Bizou, j&#8217;ai cherché différentes manière de précharger l&#8217;image suivante pour le mode &#8220;visualisation&#8221; (exemple). Sous Firefox, c&#8217;est très simple. Il suffit d&#8217;utiliser la balise suivante pour que le navigateur précharge les contenus indiqués. Les contenus sont préchargés en arrière-plan une fois que la page courante est chargée intégralement. [html] &#60;link [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Pour la gallerie d&#8217;images php <a href="http://www.positon.org/bizou/fr.html">Bizou</a>, j&#8217;ai cherché différentes manière de précharger l&#8217;image suivante pour le mode &#8220;visualisation&#8221; (<a href="http://www.positon.org/images/view.php/2008%20Corse/001%20ajaccio.jpg">exemple</a>).</p>
<p>Sous <a href="http://www.mozilla.com/firefox/">Firefox</a>, c&#8217;est très simple. Il suffit d&#8217;utiliser la balise suivante pour que le navigateur précharge les contenus indiqués.<br />
Les contenus sont préchargés en arrière-plan une fois que la page courante est chargée intégralement.</p>
<pre> [html]
&lt;link rel=&quot;prefetch&quot; href=&quot;/images/nextimage.jpg&quot; /&gt;
</pre>
<p>Sauf que pour le moment seul Firefox supporte cette fonctionnalité.<br />
Note : <a href="http://code.google.com/p/chromium/issues/detail?id=52878">un ticket est ouvert</a> sur le sujet pour le projet <a href="http://www.chromium.org/Home">Chromium</a>.</p>
<p>Pour les autres navigateurs que Firefox, il faut utiliser du Javascript déclenché à l&#8217;événement <code>window.onload</code> :</p>
<pre> [javascript]
&lt;script type=&quot;text/javascript&quot;&gt;
window.onload = function() {
    // pour les images
    var im = new Image();
    im.src = '/images/nextimage.jpg';
    // et pour les autres contenus
    var req = new XMLHttpRequest();
    req.open('GET', 'nextpage.php', false);
    req.send(null);
};
&lt;/script&gt;
</pre>
<p>Attention aux en-têtes HTTP de cache envoyés par le serveur vers le navigateur.<br />
Pour un préchargement efficace de page PHP, il faudra que votre script envoie un en-tête Expires.</p>
<pre>
header('Expires: '.gmdate('D, d M Y H:i:s \G\M\T', time() + 3600));
</pre>
<p>Enfin, pour une détection simple du navigateur depuis le script PHP :</p>
<pre>
&lt;?php if (strpos($_SERVER['HTTP_USER_AGENT'], 'Firefox') !== false) { ?&gt;
&lt;link rel=&quot;prefetch&quot; href=&quot;nextpage.php&quot; /&gt;

&lt;?php } else { ?&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
window.onload = function() {
    var req = new XMLHttpRequest();
    req.open('GET', 'nextpage.php', false);
    req.send(null);
};
&lt;/script&gt;
&lt;?php } ?&gt;
</pre>
<p><ins>Liens</ins> :</p>
<ul>
<li><a href="https://developer.mozilla.org/en/Link_prefetching_FAQ" title="https://developer.mozilla.org/en/Link_prefetching_FAQ">https://developer.mozilla.org/en/Link_prefetching_FAQ</a></li>
<li><a href="http://www.4thkingdom.com/wp-content/uploads/dotclearold/computers/789073-web-site-speed-prefetching-images-css/view-post.html" title="http://www.4thkingdom.com/wp-content/uploads/dotclearold/computers/789073-web-site-speed-prefetching-images-css/view-post.html">http://www.4thkingdom.com/wp-content/uploads/dotclearold/computers/789073-web-site-speed-prefetching-images-css/view-post.html</a> (en jQuery)</li>
<li><a href="http://orip.org/2009/03/prefetching-javascript-or-anything-with.html" title="http://orip.org/2009/03/prefetching-javascript-or-anything-with.html">http://orip.org/2009/03/prefetching-javascript-or-anything-with.html</a> (en jQuery)</li>
<li><a href="http://www.positon.org/git/?p=bizou.git;a=commitdiff;h=3287102a856be64262a9db0c98e7be7f9c26dbb8">commit sur Bizou</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://fr.positon.org/precharger-un-contenu-web-avec-la-balise-link-prefetch-ou-du-javascript/feed</wfw:commentRss>
		<slash:comments></slash:comments>
		</item>
		<item>
		<title>Générateur de bookmarklet de formulaire de connexion</title>
		<link>http://fr.positon.org/generateur-de-bookmarklet-de-formulaire-de-connexion</link>
		<comments>http://fr.positon.org/generateur-de-bookmarklet-de-formulaire-de-connexion#comments</comments>
		<pubDate>Wed, 14 Apr 2010 21:10:00 +0000</pubDate>
		<dc:creator><![CDATA[dooblem]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[bookmarklet]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://positon.org:81/?p=89</guid>
		<description><![CDATA[Les bookmarklets sont des liens contenant du code Javascript. L&#8217;intérêt est de les enregistrer dans les favoris, afin d&#8217;effectuer divers traitements sur la page courante affichée par votre navigateur. Il est aussi possible de faire des bookmarklets qui vous authentifient automatiquement sur un site utilisant un formulaire de connexion. Ceci en stockant votre login et [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Les <a href="http://fr.wikipedia.org/wiki/Bookmarklet">bookmarklets</a> sont des liens contenant du code <a href="http://fr.wikipedia.org/wiki/Javascript">Javascript</a>. L&#8217;intérêt est de les enregistrer dans les favoris, afin d&#8217;effectuer divers traitements sur la page courante affichée par votre navigateur.</p>
<p>Il est aussi possible de faire des bookmarklets qui vous authentifient automatiquement sur un site utilisant un formulaire de connexion. Ceci en stockant votre login et mot de passe dans le code javascript d&#8217;un bookmarklet.</p>
<p><a href="javascript:document.body.appendChild(document.createElement('div')).innerHTML='%3Cform%20name=%22BletForm%22%20method=%22POST%22%20action=%22http://www.woozweb.com/loginctrl%22%3E%3Cinput%20type=%22hidden%22%20name=%22login%22%20value=%22MONLOGIN%22%20/%3E%3Cinput%20type=%22hidden%22%20name=%22pass%22%20value=%22MONPASS%22%20/%3E%3C/form%3E';document.forms%5B'BletForm'%5D.submit();">Exemble de bookmarklet de connexion</a></p>
<p>Le code du bookmarklet décortiqué sur plusieurs lignes :</p>
<pre>
javascript:
document.body.appendChild(document.createElement('div')).innerHTML='
&lt;form name=&quot;BletForm&quot; method=&quot;POST action=&quot;http://www.woozweb.com/loginctrl&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;login&quot; value=&quot;MONLOGIN&quot; /&gt;
&lt;input type=&quot;hidden&quot; name=&quot;pass&quot; value=&quot;MONPASS&quot; /&gt;
&lt;/form&gt;';
document.forms['BletForm'].submit();
</pre>
<p>Ce code permet de générer une <a href="http://fr.wikipedia.org/wiki/HTTP#M.C3.A9thodes">requête HTTP POST</a> à deux paramètres, depuis vos favoris. Écrire ce genre de code est à la portée des développeurs Web, mais pas de madame michu.</p>
<p>J&#8217;ai donc écrit un bookmarklet permettant de générer facilement des bookmarklets de formulaires de connexion.</p>
<p>C&#8217;est très simple :</p>
<div style="margin-top: 1em; margin-bottom: 1em; border-left: solid gray 1px;">
<ol>
<li>Glissez le bookmarklet de génération dans vos marques-pages :<br />
<a href="javascript:for%20(var%20i%3D0%3B%20i%3Cdocument.forms.length%3B%20i%2B%2B)%20%7Bvar%20button%20%3D%20document.createElement('div')%3Bvoid(button.setAttribute('style'%2C%20'border%3A%20solid%20blue%202px%3B%20padding%3A%201em%3B'))%3Bvoid(button.innerHTML%3D'Fill%20the%20form%2C%20then%3Cbr%20%2F%3E%3Ca%20href%3D%22javascript%3AgenerateBlet('%2Bi%2B')%22%3EClick%20here%20to%20generate%20the%20bookmarklet%20!%3C%2Fa%3E')%3Bvoid(document.forms%5Bi%5D.appendChild(button))%3B%7Dfunction%20generateBlet(idForm)%7Bvar%20f%3Ddocument.forms%5BidForm%5D%3Bvar%20action%3Bif%20(typeof(f.action)%20%3D%3D%20'string')%20%7Baction%20%3D%20f.action%3B%7D%20else%20%7Bftmp%3Ddocument.createElement('form')%3Bftmp.action%20%3D%20f.getAttribute('action')%3Baction%20%3D%20ftmp.action%3B%7Dvar%20html%20%3D%20'%3Cform%20name%3D%22BletForm%22%20method%3D%22POST%22%20action%3D%22'%2Baction%2B'%22%3E'%3Bfor%20(var%20i%3D0%3B%20i%3Cf.elements.length%3B%20i%2B%2B)%20%7Bvar%20input%20%3D%20f.elements%5Bi%5D%3Bif%20(input.tagName%20%3D%3D%20'INPUT'%20%26%26%20input.name%20!%3D%20%22submit%22)%20%7Bhtml%2B%3D%20'%3Cinput%20type%3D%22hidden%22%20name%3D%22'%2Binput.name%2B'%22%20value%3D%22'%2Binput.value%2B'%22%20%2F%3E'%3B%7D%7Dhtml%2B%3D%20'%3C%2Fform%3E'%3Bvar%20blet%3D%22javascript%3Adocument.body.appendChild(document.createElement('div')).innerHTML%3D'%22%2Bhtml.replace(%2F'%2Fg%2C'%5C%5C%5C'')%2B%22'%3Bdocument.forms%5B'BletForm'%5D.submit()%3B%22%3Bvar%20result%20%3D%20document.createElement('div')%3Bresult.setAttribute('style'%2C%20'border%3A%20solid%20blue%202px%3B%20padding%3A%201em%3B')%3Bresult.innerHTML%3D'Drag%20this%20%3Ca%20href%3D%22'%2BencodeURI(blet)%2B'%22%3Egenerated%20bookmarklet%3C%2Fa%3E%20in%20your%20bookmarks%20and%20test%20it%20!'%3Bf.appendChild(result)%3B%7D">générateur</a>
</li>
<li>Allez sur une page contenant un formulaire de connexion.</li>
<li>Cliquez sur le générateur dans vos marques-pages : un message apparaît à côté du formulaire.</li>
<li>Remplissez les champs du formulaire de connexion.</li>
<li>Cliquez sur le lien de génération : le bookmarklet apparaît.</li>
<li>Glissez le bookmarklet généré dans vos marques-pages.</li>
<li>Enfin, testez votre bookmarklet de connexion automatique !</li>
</ol>
</div>
<p>Le générateur fonctionne même avec l&#8217;écran d&#8217;authentification de mon compte bancaire. Bien entendu, je rappelle que vos informations de connexion sont stockées en clair dans le marque-page, ce qui n&#8217;est pas très sécuritaire&#8230;</p>
<p><ins>Notes</ins> :</p>
<ul>
<li>Testé uniquement sous Firefox. Reste à le rendre compatible avec Safari et IE.</li>
<li>Trouver un moyen d&#8217;utiliser le stockage de mot de passe de Firefox pour récupérer le mot de passe.</li>
<li>Si le bookmarklet ne fonctionne pas chez vous, n&#8217;hésitez pas à me laisser un petit commentaire.</li>
</ul>
<p><ins>Liens</ins> :</p>
<ul>
<li>Le bookmarklet sous forme de .js propre : <a href="/wp-content/uploads/dotclearold/blet.js">blet.js</a></li>
<li>Un bon manuel sur les bookmarklets : <a href="http://subsimple.com/bookmarklets/" title="http://subsimple.com/bookmarklets/">http://subsimple.com/bookmarklets/</a></li>
<li>Un répertoire de bookmarklets : <a href="http://www.marklets.com" title="http://www.marklets.com">http://www.marklets.com</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://fr.positon.org/generateur-de-bookmarklet-de-formulaire-de-connexion/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Redirection mobile avec lien vers le site normal</title>
		<link>http://fr.positon.org/redirection-mobile-avec-lien-vers-le-site-normal</link>
		<comments>http://fr.positon.org/redirection-mobile-avec-lien-vers-le-site-normal#comments</comments>
		<pubDate>Wed, 07 Oct 2009 09:03:00 +0000</pubDate>
		<dc:creator><![CDATA[dooblem]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[Squid]]></category>

		<guid isPermaLink="false">http://positon.org:81/?p=61</guid>
		<description><![CDATA[Dans un billet précédent, je détaillais comme mettre en place une redirection mobile basée sur l&#8217;en-tête HTTP User-Agent, avec Squid. Exemple : quand un mobile se rend sur www.monsite.com, il est redirigé vers mobile.monsite.com. Maintenant, nous désirons ajouter un lien sur mobile.monsite.com qui permette d&#8217;accéder au site en mode normal (www.monsite.com). Problème : la redirection [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Dans un <a href="/post/2009/07/30/Redirection-sous-Squid-26">billet précédent</a>, je détaillais comme mettre en place une redirection mobile basée sur l&#8217;en-tête HTTP User-Agent, avec Squid. Exemple : quand un mobile se rend sur www.monsite.com, il est redirigé vers mobile.monsite.com.</p>
<p>Maintenant, nous désirons ajouter un lien sur mobile.monsite.com qui permette d&#8217;accéder au site en mode normal (www.monsite.com).</p>
<p>Problème : la redirection est en place, et dès que le mobile retournera sur www.monsite.com, il sera redirigé de nouveau.</p>
<p>Solution : en se basant sur l&#8217;en-tête HTTP Referer, on ne redirige pas les mobiles quand l&#8217;utilisateur vient du domaine *.monsite.com</p>
<p>Réalisé de la manière suivante dans la configuration Squid :</p>
<pre>
###################################
# on redirige les telephones vers mobile.monsite.com
url_rewrite_program /etc/squid/redirect_mobile.sh

acl symbian browser Symbian
acl iphone browser iP(hone|od)
acl android browser Android
acl mobile_url dstdomain mobile.monsite.com
acl from_monsite referer_regex ^http\://[^/]+\.monsite\.com   # on teste si l'utilisateur vient de *.monsite.com

url_rewrite_access deny mobile_url
url_rewrite_access deny from_monsite   # on ne redirige pas quand c'est le cas
url_rewrite_access allow symbian
url_rewrite_access allow iphone
url_rewrite_access allow android
url_rewrite_access deny all
</pre>
<p>De cette manière, si le mobile vient de l&#8217;extérieur (d&#8217;un moteur de recherche ou autre site, ou qu&#8217;il tape directement l&#8217;URL dans la barre d&#8217;adresse), il sera redirigé. En revanche, s&#8217;il a cliqué sur un lien « www.monsite.com en mode normal » depuis mobile.monsite.com, il ne sera pas redirigé.</p>
<p>Note :<br />
Cette solution est aisément transposable en règles de réécriture apache.</p>
]]></content:encoded>
			<wfw:commentRss>http://fr.positon.org/redirection-mobile-avec-lien-vers-le-site-normal/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Redirection sous Squid 2.6</title>
		<link>http://fr.positon.org/redirection-sous-squid-26</link>
		<comments>http://fr.positon.org/redirection-sous-squid-26#comments</comments>
		<pubDate>Thu, 30 Jul 2009 14:46:00 +0000</pubDate>
		<dc:creator><![CDATA[dooblem]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[Squid]]></category>

		<guid isPermaLink="false">http://positon.org:81/?p=57</guid>
		<description><![CDATA[Dans la grande majorité des cas, les redirections http sont installée sur le serveur http. Dans certains cas, la redirection ne peut pas être installée dans la configuration du serveur http. Exemple : redirection pour les téléphones mobiles. Nous voulons rediriger tous les téléphones mobiles de http://www.monsite.com vers http://mobile.monsite.com L&#8217;identification du client se fait avec [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Dans la grande majorité des cas, les redirections http sont installée sur le serveur http.<br />
Dans certains cas, la redirection ne peut pas être installée dans la configuration du serveur http.</p>
<p>Exemple : redirection pour les téléphones mobiles.<br />
Nous voulons rediriger tous les téléphones mobiles de http://www.monsite.com vers http://mobile.monsite.com</p>
<p>L&#8217;identification du client se fait avec l&#8217;en-tête HTTP <strong>User-Agent</strong> envoyée par le navigateur. Le problème est que Squid va mettre en cache une seule version de la requête vers http://www.monsite.com. La réponse mise en cache sera probablement la page d&#8217;accueil, et non la redirection 301.</p>
<p>Il est aussi possible de configurer le serveur HTTP pour ajouter l&#8217;en-tête <code>Vary: User-Agent</code> pour indiquer au Squid de stocker une version par navigateur, mais cela aura pour effet de diviser le cache en autant de navigateurs, ce qui diminuera grandement l&#8217;efficacité du cache.</p>
<p>Voici donc la solution :</p>
<pre>
###################################
# on redirige les telephones vers mobile.monsite.com
url_rewrite_program /etc/squid/redirect_mobile.sh

acl symbian browser Symbian
acl iphone browser iP(hone|od)
acl mobile_url dstdomain mobile.monsite.com

url_rewrite_access deny mobile_url
url_rewrite_access allow symbian
url_rewrite_access allow iphone
url_rewrite_access deny all
</pre>
<p>Et le script <code>/etc/squid/redirect_mobile.sh</code> contient simplement:</p>
<pre>
#!/bin/sh
while read line
do
        echo &quot;301:http://mobile.monsite.com&quot;
done
</pre>
<p><ins>Notes</ins> :</p>
<ul>
<li>La méthode de détection des téléphone est loin d&#8217;être exhaustive. Si vous connaissez une méthode simple qui couvre 95% des téléphones, je suis preneur !</li>
<li>Sous des version plus récentes de Squid (3, 2.HEAD), il est possible d&#8217;utiliser une méthode plus élégante à base de <strong>redirecteurs internes</strong>.</li>
</ul>
<p><ins>Liens</ins> :</p>
<ul>
<li><a href="http://www.squid-cache.org/Versions/v2/2.6/cfgman/" title="http://www.squid-cache.org/Versions/v2/2.6/cfgman/">http://www.squid-cache.org/Versions/v2/2.6/cfgman/</a></li>
<li><a href="http://wiki.squid-cache.org/Features/Redirectors" title="http://wiki.squid-cache.org/Features/Redirectors">http://wiki.squid-cache.org/Features/Redirectors</a></li>
<li><a href="http://wiki.squid-cache.org/Features/InternalRedirectors" title="http://wiki.squid-cache.org/Features/InternalRedirectors">http://wiki.squid-cache.org/Features/InternalRedirectors</a></li>
<li><a href="http://wiki.squid-cache.org/ConfigExamples/PhpRedirectors" title="http://wiki.squid-cache.org/ConfigExamples/PhpRedirectors">http://wiki.squid-cache.org/ConfigExamples/PhpRedirectors</a></li>
<li><a href="http://www1.za.squid-cache.org/mail-archive/squid-users/200507/0247.html" title="http://www1.za.squid-cache.org/mail-archive/squid-users/200507/0247.html">http://www1.za.squid-cache.org/mail-archive/squid-users/200507/0247.html</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://fr.positon.org/redirection-sous-squid-26/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
