Des pages web en JSON plutôt qu'en HTML
Bonjour à tous,
Les requêtes Ajax sont géniales.
Elles permettent d'établir un véritable dialogue interactif, entre le client et le serveur, piloté par des événements côté client,
qui déclenchent une requête depuis un XMLHttpRequest
Dès réception de la réponse, son événement onload réagit, et la traite.
* Côté serveur, PHP emballe la réponse dans un tableau associatif avec json_encode($tableau).
* Côté client, l'événement onload en JavaScript déballe avec JSON.parse(e.target.responseText).
Autant dire que je n'utilise plus XML, trop lourd, auquel je préfère, de loin, json.
Au point d'être convaincu que le web serait bien plus efficace, si les pages web étaient conçues en Json, plutôt qu'en XML, dont HTML est une sous-composante.
Un tableau associatif permettrait l'économie de <BALISE>Blablabla</BALISE>.
Pour une paire de clef=>valeur de type Balise=>'Blablabla'
Au lieu de <A href="cible.php" target="_blank">Clique</A>.
On aurait
a=>[href=>'cible.php', target=>'_blank', inner=>'Clique'].
Le Inner d'une balise peut être une simple chaîne, ou un tableau associatif, contenant d'autres balises, selon une structure arborescente, comme c'est déjà le cas.
Actuellement, une page web est parsée dans un Document Object Model (DOM), qui est un arbre, dont la balise HTML est la racine.
Ce DOM peut, parfaitement, être aussi parsé dans un Json de contenu identique, mais bien plus concis et compact: gain de bande passante
Le navigateur, qui reçoit cette chaîne JSON, appelons-la JML (Json Markup Langage), la parserait dans un DOM, de rendu identique pour l'internaute, qui verrait la même page web qu'auparavant, en HTML.
Ne cherchez pas après une doc sur JML, sur le web, c'est une pure invention de ma part. Rien à voir avec le Java Modeling Langage, homonyme.
Pour ne pas trop déstabiliser les éditeurs de sites web, éventuellement, dynamiques, avec PHP, comme moi,
le serveur (apache2, iis) transformerait le HTML en JML, juste avant l'envoi, de façon totalement transparente pour l'émetteur,
qui aurait, toujours, l'impression d'envoyer de bonnes vieilles pages web classiques en HTML.
Statiques ou dynamiques, c'est pareil: aucune différence de langage, au moment de l'envoi.
Apache2 parse l'HTML, créerait un tableau associatif DOM, qu'il emballerait dans un json_encode($dom), et enverrait le JSON au navigateur.
Navigateur, qui, à son tour, déballe la chaîne Json par un JSON.parse(chaineJson) en JavaScript, reconstruit le DOM et l'affiche, comme avant.
Au niveau CSS, aucun changement.
Pour l'internaute, aucun changement non plus.
Les nouveaux navigateurs seront réceptifs aux deux: Html et Json
Le temps que les éditeurs de sites web s'adaptent, et conçoivent des sites nativement en Json, qu'Apache2 ne devra plus parser avant l'envoi.
Dans quelques années, le temps que de nouveaux outils d'édition apparaissent, et c'en sera fini d'HTML, comme d'XML.
Je pense qu'il faudrait proposer l'idée au W3C.
Qu'en pensez-vous ?
Bonne rentrée,
Christian.
Gardons l'HTML, parsons-le en Json avant l'envoi
L'inertie est un frein considérable à l'évolution. Mathieu a raison.
Il existe des milliards de pages web en HTML de par le monde.
La solution me semble de placer un parseur JSON en aval d'Apache2 (ou iis)
Actuellement, le parsing de l'HTML en arbre DOM se fait au niveau du navigateur (côté client, donc)
L'encodeur JSON, côté serveur, transformerait l'HTML en JSON... s'il y arrive.
Car il peut caler sur une structure mal faite
Code:
1 2
| <PREMIERE><SECONDE>Contenu</PREMIERE></SECONDE>
<PREMIERE><SECONDE>Contenu</PREMIERE> |
Dans la première ligne, les balises devraient avoir été fermées dans l'ordre inverse de leur ouverture, pour emballer la seconde dans la première.
Dans la seconde ligne, la seconde balise n'est pas fermée.
En HTML, aucun problème: ce code sale peut être expédié sur le web. Le navigateur n'a qu'à se débrouiller avec.
Avec un encodeur JSON: il produira une erreur. La page web ne part pas.
Ca va agacer les mauvais développeurs, priés de revoir leur copie.
Mais améliorera la qualité du code envoyé en ligne.
En cas de succès de l'encodage, la chaîne JSON obtenue sera zippée, puis, finalement expédiée sur le web.
Côté client, le navigateur dézippe, parse le JSON, puis, affiche le DOM, comme avant.
Le même DOM que celui obtenu après lecture de l'HTML actuellement.
Le parsing du JSON est garanti, puisqu'il a été correctement généré par le serveur.
En ce qui concerne l'affichage de la source (CTRL-U), ce sera beaucoup plus propre.
Le navigateur affichera une structure arborescente, avec des poignées d'ouverture (expand / collapse) à chaque nœud, plutôt qu'un texte HTML.
La plupart des navigateurs (j'utilise Firefox) le font déjà dans la console, onglet Inspecteur.
Envoyer du JSON zippé, plutôt que de l'HTML en clair, épargnera énormément de bande passante.
Les utilisateurs de smartphones, au quota mensuel limité, apprécieront.
C'est dans cet état d'esprit que j'utilise les unicodes, plutôt qu'un <IMG src="..."/>
L'unicode fait une dizaine d'octets, mais c'est un autre débat.
En résumé: pour ne pas bousculer les habitudes, les développeurs continueront à coder en HTML, comme avant.
Les sites web actuels restent fonctionnels.
Ce qui change, c'est l'encodage-zippage de l'HTML en JSON avant l'envoi.
Proposition d'HTML compilé côté serveur
Bonjour à tous,
Fondamentalement, une page web est un arbre, dont la racine <HTML> contient deux descendants
<HEAD>, qu'on ne voit pas, et <BODY>, qui est visible.
En un précédent message, je proposais de remplacer l'HTML par du JSON, plus concis, pour véhiculer cet arbre.
Car JSON permet d'emboîter récursivement, des éléments, comme l'XML, dont HTML n'est, finalement, qu'une implémentation.
Perso, je ne pratique plus XML, j'utilise exclusivement JSON. Je pense que le web devrait en faire autant.
quel que soit le langage HTML ou JSON utilisé, pour construire l'arbre, il faut le parser.
Il existe, d'ailleurs, une instruction JavaScript JSON.parse(string), qui effectue un travail analogue.
Comme tout code source, HTML et JSON sont incompréhensibles par la machine.
Parser, c'est, en quelque sorte, compiler.
Entre la réception du code source, et l'affichage de la page web, le navigateur doit parser l'HTML.
Ce que je propose, ici, c'est d'effectuer ce parsing côté serveur.
Pour envoyer, ensuite, du code compilé, incompréhensible, par internet.
Non seulement compilé, mais éventuellement, crypté par la clef du certificat.
Pour l'utilisateur, aucune différence.
Le temps perdu, côté serveur, à parser et compiler, serait gagné côté client.
Quel intérêt ?
Actuellement, les pirates ont accès au code source des pages web d'accueil des sites sensibles.
HomeBanking, espace client, CPanel chez un hébergeur web, ...
Qu'il leur suffit de lire en clair, pour reproduire, avec une facilité étonnante, sur un faux site.
L'utilisateur, grugé, n'y voit que du feu, et y introduit ses codes secrets.
Internet a été créé, dans un climat de confiance, entre universités, qui ont repris Arpanet et instauré le TCP-IP.
Toute sa structure repose sur la confiance, qui fait le bonheur des escrocs.
L'HTTPS n'y change rien. Il garantit juste que le nom de domaine mène bien au bon serveur, identifié par son IP.
Il empêche l'interception, entre le serveur et le client, par l'homme du milieu, et la redirection (spoofing).
Mais le client https, éventuellement malveillant, reçoit toujours l'HTML déballé, en clair.
Par conséquent, le serveur (Apache2, IIS) aurait trois options, pour envoyer sa page web,
toujours en https, évidemment, que ma proposition n'abolit pas.
1) HTML classique, à l'ancienne et en clair (par défaut)
2) En JSON, toujours en clair (idéalement)
3) Compilé, crypté par la clef du certificat (pages sensibles)
Avant l'envoi de la page web, le serveur envoie un header,
pour annoncer la couleur de ce qui suit: du HTML, du JSON, ou du compilé.
Même si la compilation côté serveur alourdit la communication, elle en vaut vraiment la peine.
Vu la puissance des processeurs, ce temps de compilation serait à peine perceptible.
Tout serait compilé: HTML, CSS et JavaScript.
En Belgique, en 2022, le phishing atteint presque les 40 millions d'euros.
40 millions, dont les victimes belges ont été soulagées par des escrocs anonymes et introuvables.
Ce montant, connu et déclaré, est la somme des plaintes, mais nettement en-dessous de la réalité.
A cause du silence complice de la victime honteuse, qui préfère se taire, et vivre dans le déni.
Car le phishing n'a pas que des conséquences financières, mais psychologiques considérables.
Au final, le client (le navigateur) reçoit un charabia binaire, aussi incompréhensible qu'un .exe, ou un .class en Java
OK, vous me répondrez qu'on peut désassembler un .exe, et qu'on pourrait, aussi "désassembler" une page web compilée.
Mais l'assembleur, ce n'est pas du code source. Il faut vachement s'y connaître, pour programmer à un aussi bas niveau.
Plagier un site web bancaire compilé deviendra beaucoup plus compliqué.
Bonne chance, au pirate, pour refaire une page web identique !
Avant, il suffisait de faire CTRL-U pour voir la source.
Pour le web master, rien ne change:
Il conçoit toujours son site en HTML. C'est le serveur qui compile.
Finalement, la modification que je propose est minime:
Déplacer le parseur HTML-CSS, et le moteur JavaScript (SpiderMonkey chez FireFox) du navigateur vers le serveur.
Tant que le web véhiculera du code en clair (html, css et JavaScript) ça fera le bonheur des escrocs.
Je ne comprend pas comment le W3C n'a pas encore pensé à la compilation (parsing),
qu'il faut, de toutes façons, faire avant d'afficher la page.
Pour moi, ça saute aux yeux.
Et vous, qu'en pensez-vous ?
Bien à vous,
Christian.