Quelle est la différence entre un serveur web et un framework web?


Réponse 1:

Un «framework web» propose un ensemble d'API pour écrire votre propre code personnalisé de telle manière qu'il puisse être appelé via le Web. Habituellement, un cadre traitera des détails communs tels que l'analyse d'en-tête HTTP, le routage d'URL, etc.

Un serveur Web est un logiciel qui écoute sur un port réseau les requêtes HTTP entrantes et y répond. La plupart des serveurs Web ont un mode par défaut où ils interpréteront la demande entrante comme un chemin sur le système de fichiers et renverront le fichier à ce chemin, mais ils peuvent généralement être configurés pour faire autre chose avec la demande à la place (passez-le à un script CGI, le proxy vers un autre serveur, exécutez un code de module personnalisé, etc.).

Si vous plissez les yeux sur Apache ou nginx (communément appelés serveurs Web), vous pourrez peut-être les décrire également comme des cadres Web, car les deux offrent des options de configuration étendues et une API de module C pour écrire du code personnalisé. Cependant, la plupart des gens ne les appellent pas ainsi.

De même, si vous considérez node.js comme un cadre (qui, je pense, est une interprétation raisonnable, mais d'autres peuvent être en désaccord avec moi), vous pouvez également le considérer comme un serveur Web, car il est livré avec une implémentation de serveur HTTP assez robuste qui peut être commencé à utiliser un seul appel de fonction.

Le problème ici est vraiment que le concept de "framework web" ne se prête pas à une définition très précise.

J'imagine que cette réponse est plus déroutante qu'elle n'est utile, et je m'en excuse.


Réponse 2:

Le serveur Web est un programme qui peut gérer les requêtes http. Peu importe si elle couvre toutes les spécifications et si elle le fait bien. La mise en œuvre d'un serveur Web minimal de ce type n'est pas si compliquée. De nos jours, chaque grande plate-forme de développement Web vous permet de démarrer un simple serveur Web. Celui-ci est généralement assez bon dans certains domaines, mais il fonctionne rarement très bien dans toutes les conditions.

Parfois, la plate-forme est un serveur d'applications qui contient également un serveur Web et peut-être aussi un cadre ou au moins des connecteurs (mais peut prendre en charge beaucoup plus) - comme les serveurs Java EE. D'autres exemples pourraient être Ruby + RoR et webrick - qui devrait être un serveur Web décent ou node.js, lequel est également assez impressionnant.

Et ces solutions peuvent très bien fonctionner pour les petits projets et devraient être assez bonnes même pour servir des fichiers statiques.

Maintenant, où est la différence par rapport aux gros gars comme Apache, nginx et autres?

Les serveurs Web spécialisés sont rapides, ils fonctionnent sous une charge élevée et ils ont des modules pour gérer de nombreux problèmes comme la surcharge (attaques DOS), la sécurité et le contrôle d'accès, les en-têtes d'expiration, la compression, SSL, HTTP version 2, la réécriture d'URL, les hôtes virtuels, standard formats de journalisation, types MIME, proxy, plusieurs versions de contenu et bien plus encore.

J'ai trouvé un référentiel de comparaison de performances du cadre Web TechEmpower Web Framework qui compare les performances pour 20 demandes par seconde et définit un cadre comme «toute implémentation de serveur HTTP sur laquelle vous pouvez créer une application Web».

Cette comparaison de performances de serveur Web de référence de serveur Web teste jusqu'à 3000 demandes parallèles. Notez également la consommation de mémoire des serveurs Web spécialisés. Il n'est pas conseillé de faire de même avec les solutions-cadres.

La configuration courante (pas une seule) consiste à gérer le contenu statique avec le serveur Web spécialisé et à transmettre uniquement les requêtes dynamiques au framework.


Réponse 3:

Je déteste quand des termes qui ont des significations réelles et discrètes se multiplient en un glop sémantique.

Un serveur Web écoute les connexions Web et sert le contenu statique des fichiers ou transmet les demandes à un autre code. À l'origine, la «transmission» signifiait l'exécution de programmes (généralement des scripts) séparés du WS, en utilisant un protocole appelé CGI (juste une façon standard de décrire l'appel du script, la communication de la demande, de qui il venait, etc.) Les bibliothèques de scripts, pour analyser les requêtes CGI ou générer du HTML est devenu le premier framework web. Il est devenu courant de réduire les frais généraux de ces scripts externes en greffant l'interpréteur de scripts sur le WS. Les frameworks Web ont, au fil du temps, commencé à prendre en charge une grande partie de l'aspect d'analyse des demandes du WS ("routage") - suffisamment pour que certains frameworks aient décidé de se passer entièrement du WS. Le style de programmation Web a également changé: javascript place désormais une grande partie de la logique du WF dans le navigateur, de sorte que la logique qui reste sur le WS peut être considérablement réduite (contrairement à la notion CGI d'origine, où le navigateur ne gérait vraiment que rendu d'un blob statique de HTML fourni par le WS.)

Donc, généralement quand les gens disent WS, ils veulent dire un WS générique comme Apache. Quand les gens disent WF, ils signifient généralement quelque chose comme PHP ou un système basé sur JS plus moderne qui inclut les modèles, l'ORM, le routage, etc.


Réponse 4:

Je déteste quand des termes qui ont des significations réelles et discrètes se multiplient en un glop sémantique.

Un serveur Web écoute les connexions Web et sert le contenu statique des fichiers ou transmet les demandes à un autre code. À l'origine, la «transmission» signifiait l'exécution de programmes (généralement des scripts) séparés du WS, en utilisant un protocole appelé CGI (juste une façon standard de décrire l'appel du script, la communication de la demande, de qui il venait, etc.) Les bibliothèques de scripts, pour analyser les requêtes CGI ou générer du HTML est devenu le premier framework web. Il est devenu courant de réduire les frais généraux de ces scripts externes en greffant l'interpréteur de scripts sur le WS. Les frameworks Web ont, au fil du temps, commencé à prendre en charge une grande partie de l'aspect d'analyse des demandes du WS ("routage") - suffisamment pour que certains frameworks aient décidé de se passer entièrement du WS. Le style de programmation Web a également changé: javascript place désormais une grande partie de la logique du WF dans le navigateur, de sorte que la logique qui reste sur le WS peut être considérablement réduite (contrairement à la notion CGI d'origine, où le navigateur ne gérait vraiment que rendu d'un blob statique de HTML fourni par le WS.)

Donc, généralement quand les gens disent WS, ils veulent dire un WS générique comme Apache. Quand les gens disent WF, ils signifient généralement quelque chose comme PHP ou un système basé sur JS plus moderne qui inclut les modèles, l'ORM, le routage, etc.