Spécifications web pour une stack LAMP + Symfony
Objectif
Donner un repère rapide des standards et références normatives utiles au développement d'une application Symfony sur stack LAMP (Linux/Apache/MySQL/PHP).
Cartographie des spécifications (par couches)
1) Réseau & sécurité (IETF)
- HTTP sémantique : RFC 9110 (architecture, méthodes, codes, en‑têtes).
- HTTP/1.1 : RFC 9112 (syntaxe des messages, connexions).
- HTTP/2 : RFC 9113 (multiplexage, compression d’en‑têtes).
- HTTP/3 : RFC 9114 (HTTP sur QUIC).
- TLS : RFC 8446 (TLS 1.3, base d’HTTPS).
Pourquoi c’est clé : définit le contrat client/serveur, le cache HTTP, les statuts, la négociation, la sécurité.
2) Plateforme Web (WHATWG)
- HTML : structure, formulaires, navigation, éléments.
- DOM : arbre de nœuds, événements, APIs client.
- Fetch : modèle Request/Response, CORS, redirections.
- URL : parsing, sérialisation, normalisation.
- Encoding : UTF‑8 et compatibilité des encodages.
Pourquoi c’est clé : gouverne le comportement navigateur côté client et la manière dont le serveur doit répondre.
3) Styles (W3C CSS)
- CSS Snapshot 2025 : photographie de l’état des modules CSS (approche modulaire).
Pourquoi c’est clé : clarifie quelles briques CSS sont stables et normalisées.
4) Langage côté navigateur (ECMA‑262)
- ECMAScript 2025 : spécification officielle du langage JavaScript.
Pourquoi c’est clé : contrat du langage pour scripts front‑end et tooling.
5) Serveur HTTP (Apache)
- Apache HTTP Server Docs : configuration, modules, MPM, filtres, handlers.
Pourquoi c’est clé : reverse‑proxy, TLS, compression, headers, règles de routage.
6) Langage & runtime (PHP)
- PHP Language Specification : syntaxe et sémantique de PHP.
- PHP Manual : référence pratique (fonctions, types, runtime).
Pourquoi c’est clé : base du code Symfony et de l’écosystème PHP.
7) Interop PHP (PHP‑FIG / PSR)
- Autoloading : PSR‑4.
- Interfaces transverses : PSR‑3 (logs), PSR‑11 (container), PSR‑6/16 (cache).
- HTTP : PSR‑7/15/17/18 (messages, handlers, factories, client).
Pourquoi c’est clé : compatibilité entre bundles, libs et composants Symfony.
8) Base de données (SQL + MySQL)
- SQL (ISO/IEC 9075) : standard SQL (cadre, grammaire, concepts).
- MySQL Reference Manual : implémentation concrète, dialecte, différences SQL.
Pourquoi c’est clé : requêtes, transactions, index, compatibilité et limites.
Détails SQL/MySQL (transactions, isolation, index)
- Transactions InnoDB : modèle transactionnel combinant multiversioning (lectures cohérentes non bloquantes) et verrouillage classique, avec verrouillage au niveau ligne.
- Isolation : 4 niveaux (
READ UNCOMMITTED,READ COMMITTED,REPEATABLE READ,SERIALIZABLE) ; par défautREPEATABLE READpour InnoDB. - Indexation (types) :
CREATE INDEXsupporteUSING BTREEouUSING HASH;FULLTEXTetSPATIALsont des index spéciaux. - Indexation (clustered / secondaire) : l’index cluster correspond généralement à la clé primaire ; les index secondaires stockent la clé primaire pour retrouver la ligne.
- Indexation (bonnes pratiques) : indexer les colonnes utilisées dans les filtres améliore les
SELECT, mais trop d’index dégrade lesINSERT/UPDATE/DELETE.
9) Contrats de framework (Symfony)
- HttpKernel : cycle Request → Response, événements du kernel.
Pourquoi c’est clé : structure l’architecture Symfony et le flux d’exécution.
10) Flux Request → Response (Symfony)
Requête HTTP -> HttpKernel::handle(Request) -> kernel.request -> routing (résolution du contrôleur) -> kernel.controller -> kernel.controller_arguments -> controller -> kernel.view (si le contrôleur ne retourne pas une Response) -> kernel.response -> Response -> send() -> kernel.terminate (optionnel, après envoi)
Le cycle est piloté par des événements (kernel.request → kernel.response) et peut se terminer par kernel.terminate après l’envoi de la réponse.
RĂ´le et position du WHATWG
- Éditeur principal des Living Standards de la plateforme web (HTML, DOM, Fetch, URL, Encoding).
- Modèle “Living Standard” : mise à jour continue, alignée sur l’implémentation réelle des navigateurs.
- Accord W3C‑WHATWG (2019) : HTML et DOM sont développés principalement dans les repos WHATWG ; le W3C publie des “Review Drafts” et peut en faire des Recommandations.
Cheat sheet (résumé express)
- HTTP/TLS : RFC 9110/9112/9113/9114 + RFC 8446.
- Web platform : WHATWG HTML/DOM/Fetch/URL/Encoding (Living Standards).
- CSS : W3C CSS Snapshot 2025.
- JavaScript : ECMAScript 2025 (ECMA‑262).
- PHP : PHP Language Spec + PHP Manual + PSR (PHP‑FIG).
- Base de données : SQL (ISO 9075) + MySQL 8.0 Reference Manual.
- Symfony : HttpKernel (Request → Response, événements kernel).
Références (sources officielles)
- IETF HTTP : https://www.rfc-editor.org/rfc/rfc9110 (sémantique), https://www.rfc-editor.org/rfc/rfc9112 (HTTP/1.1), https://www.rfc-editor.org/rfc/rfc9113 (HTTP/2), https://www.rfc-editor.org/rfc/rfc9114 (HTTP/3)
- TLS 1.3 : https://www.rfc-editor.org/rfc/rfc8446
- WHATWG HTML : https://html.spec.whatwg.org/
- WHATWG DOM : https://dom.spec.whatwg.org/
- WHATWG Fetch : https://fetch.spec.whatwg.org/
- WHATWG URL : https://url.spec.whatwg.org/
- WHATWG Encoding : https://encoding.spec.whatwg.org/
- W3C CSS Snapshot 2025 : https://www.w3.org/TR/css-2025/
- ECMAScript (ECMA‑262, 2025) : https://ecma-international.org/publications-and-standards/standards/ecma-262/
- Apache HTTP Server 2.4 : https://httpd.apache.org/docs/current/en/
- PHP Language Spec : https://phplang.org/
- PHP Manual : https://www.php.net/manual/en/
- PHP‑FIG (PSR) : https://www.php-fig.org/
- SQL Standard (ISO/IEC 9075) : https://www.iso.org/standard/76583.html
- MySQL 8.0 Reference Manual : https://dev.mysql.com/doc/mysql/8.0/en/
- MySQL 8.0 Transaction Isolation Levels : https://docs.oracle.com/cd/E17952_01/mysql-8.0-en/innodb-transaction-isolation-levels.html
- MySQL 8.0 CREATE INDEX : https://docs.oracle.com/cd/E17952_01/mysql-8.0-en/create-index.html
- MySQL 8.0 Clustered and Secondary Indexes : https://docs.oracle.com/cd/E17952_01/mysql-8.0-en/innodb-index-types.html
- MySQL 8.0 Optimization and Indexes : https://dev.mysql.com/doc/mysql/8.0/en/optimization-indexes.html
- Symfony HttpKernel : https://symfony.com/doc/current/components/http_kernel.html