Je lisais un fil de discussion Hacker News où un utilisateur publie un lien de 2011 expliquant que IIS est beaucoup plus rapide que la plupart des autres serveurs Web (* nix). Un autre utilisateur répond, expliquant que IIS obtient cet avantage en ayant un module de noyau appelé HTTP.sys . À ma connaissance, la plupart des autres serveurs Web populaires en 2015 ne le font pas.
Je ne voudrais jamais écrire un serveur Web en mode noyau, car je ne pourrais jamais me faire confiance pour le rendre exempt d'exploits de sécurité (ce qui serait moins grave en cours d'exécution dans un anneau de protection inférieur).
Du point de vue de l'ingénieur logiciel (par opposition à un client pour les serveurs Web), l'exécution en mode noyau est-elle une décision de performance intelligente? Les problèmes de sécurité peuvent-ils être atténués dans le développement d'applications au point de faire d'un serveur en mode noyau un bénéfice net pour le consommateur?
la source
Réponses:
Http.sys n'est pas tant un serveur Web qu'un proxy-forwarder. Il est conçu pour permettre à de nombreux serveurs Web de coexister sur une boîte Windows, vous pouvez donc avoir IIS exécutant un site Web, mais aussi plusieurs services WCF fonctionnant avec des interfaces http / REST ou SOAP, le tout sur le port standard 80. (c'est pourquoi vous ne peut pas exécuter Apache sur Windows sans un peu de malaise, Apache n'a pas été modifié pour fonctionner avec ce système d'enregistrement, dommage qu'il n'ait pas été rendu plus transparent pour les applications et nécessite des modifications assez complexes pour s'y connecter).
La façon dont cela fonctionne est que vous enregistrez une URL avec elle et l'application correspondante, et lorsqu'une demande http est effectuée sur le port 80, http.sys l'accepte mais transmet ensuite la demande à l'application enregistrée pour gérer cette cible URL.
Je doute qu'un serveur Web en mode noyau ait un sens - même si les performances du socket peuvent être améliorées de cette manière, afin d'effectuer tout travail utile, la logique d'application va toujours être exécutée dans l'espace utilisateur, donc il y a toujours une transition - vous '' Je l'ai juste déplacé un peu le long de la pile d'appels.
la source
Http.sys n'est pas le seul serveur Web en mode noyau disponible: sous Linux, il y a aussi tux . Comme vous l'avez correctement identifié, la sécurité est un problème avec ces types de serveurs, ce qui a conduit à ce que tux ne soit pas inclus dans le noyau Linux principal (et je ne pense pas qu'il soit mis à jour pour les versions de noyau plus récentes).
Une meilleure solution consisterait à utiliser un système d'exploitation qui ne repose pas sur la protection matérielle pour assurer la sécurité des processus, par exemple la singularité de Microsoft: un tel système permettrait les gains d'efficacité d'un serveur en mode noyau sans les risques de sécurité. Malheureusement, aucun système d'exploitation prêt à la production basé sur ce principe n'est disponible à partir de 2015, et AFAIK personne n'y travaille sérieusement non plus (le projet Singularity a été annulé).
la source
Http.sys est à faible risque, car il ne peut exécuter aucune copie fournie par un tiers.
Http.sys effectue quelques tâches.
Il agit comme un proxy-forwarder, permettant ainsi à plusieurs processus de répondre à la demande de différentes parties de l'espace de noms HTTP. La réponse gbjbaanb couvre bien cela.
Il sert des fichiers statiques, directement depuis le cache des fichiers Windows. Cela fournit une grande accélération pour les petits fichiers statiques, car il n'y a pas de changement de contexte.
Il mettra en cache la sortie de toute application vers laquelle il transmettra une demande HTTP et retournera le résultat encaissé. L'application contrôle totalement la durée (le cas échéant) de la mise en cache.
Http.sys est conçu pour effectuer les tâches simples TRÈS rapidement, tout en passant tout le reste à un processus dans l'espace utilisateur.
En réponse au commentaire
Le problème est que vous devez faire confiance à Microsoft pour écrire du code de noyau complexe pour poser cette question, sinon vous décidez de ne pas utiliser Windows pour l'hébergement du tout . Http.sys ajoute très peu au risque de bogues du noyau, étant donné la complexité du noyau de toute façon.
Si quelque chose Http.sys réduit le risque, car il y a une telle séparation claire sous le service Web et le code d'application «bas niveau».
Dans une configuration bien conçue, la machine (ou le serveur virtuel) qui exécute le serveur Web a un accès très limité au reste du réseau, car il s'agit d'une cible à haut risque. Cela fait très peu de différence si le noyau ou un serveur Web en mode utilisateur est piraté, car le serveur ne devrait plus avoir de «droits» sur le réseau, alors le processus en mode utilisateur du serveur Web doit faire son travail.
la source