Ich habe einen Hacker News-Thread gelesen, in dem ein Benutzer einen Link aus dem Jahr 2011 veröffentlicht und erklärt, dass IIS viel schneller ist als die meisten anderen (* nix) Webserver. Ein anderer Benutzer antwortet und erklärt, dass IIS diesen Vorteil durch ein Kernelmodul mit dem Namen HTTP.sys erzielt . Meines Wissens nach tun dies die meisten anderen beliebten Webserver im Jahr 2015 nicht.
Ich würde niemals einen Kernel-Modus-Webserver schreiben wollen, weil ich mir niemals zutrauen könnte, dass er frei von Sicherheits-Exploits ist (was weniger ernst ist, wenn er in einem niedrigeren Schutzring ausgeführt wird).
Läuft aus Sicht des Software-Entwicklers (im Gegensatz zu einem Kunden für Webserver) im Kernel-Modus eine intelligente Leistungsentscheidung? Können Sicherheitsbedenken bei der Anwendungsentwicklung so weit beseitigt werden, dass ein Kernel-Modus-Server einen Nettogewinn für den Verbraucher darstellt?
quelle
Antworten:
Http.sys ist weniger ein Webserver als ein Proxy-Forwarder. Es ist so konzipiert, dass auf einer Windows-Box viele Webserver gleichzeitig vorhanden sind, sodass IIS eine Website ausführen kann, aber auch mehrere WCF-Dienste, die mit http / REST- oder SOAP-Schnittstellen ausgeführt werden kann Apache unter Windows nicht ohne ein bisschen Wackeln ausführen, Apache wurde nicht für dieses Registrierungssystem modifiziert , schade, dass es für Anwendungen nicht transparenter gemacht wurde und einige recht komplexe Modifikationen erfordert, um es zu verwenden).
Die Art und Weise, wie es funktioniert, ist, dass Sie eine URL mit dieser und der entsprechenden Anwendung registrieren. Wenn eine http-Anfrage an Port 80 gestellt wird, akzeptiert http.sys diese Anfrage, leitet sie dann aber an diejenige Anwendung weiter, die registriert ist, um dieses URL-Ziel zu behandeln.
Ich bezweifle, dass ein Webserver im Kernel-Modus Sinn macht. Auch wenn die Socket-Leistung auf diese Weise verbessert werden kann, wird die Anwendungslogik im Benutzerbereich ausgeführt, sodass es immer einen Übergang gibt. Ich habe es nur ein wenig im Callstack verschoben.
quelle
Http.sys ist nicht der einzige verfügbare Kernel-Mode-Webserver: Unter Linux gibt es auch tux . Wie Sie richtig erkannt haben, ist die Sicherheit ein Problem mit diesen Servertypen, was dazu geführt hat, dass tux nicht im Linux-Hauptkernel enthalten ist (und ich glaube, dass es für neuere Kernelversionen nicht aktualisiert wurde).
Eine bessere Lösung wäre die Verwendung eines Betriebssystems, das keinen Hardwareschutz zur Durchsetzung der Prozesssicherheit benötigt, z. B. die Singularität von Microsoft: Ein solches System würde die Effizienzgewinne eines Kernel-Modus-Servers ohne Sicherheitsrisiken ermöglichen. Leider gibt es ab 2015 keine produktionsbereiten Betriebssysteme, die auf diesem Prinzip basieren, und auch an einem arbeitet AFAIK niemand ernsthaft (das Singularity-Projekt wurde abgebrochen).
quelle
"Http.sys" weist ein geringes Risiko auf, da keine von einem Drittanbieter bereitgestellten Funktionen ausgeführt werden können.
Http.sys führt einige Aufgaben aus.
Es fungiert als Proxy-Weiterleitung, sodass mehrere Prozesse auf Anforderungen an verschiedene Teile des HTTP-Namensraums reagieren können. Die Antwort von gbjbaanb deckt dies gut ab.
Es stellt statische Dateien direkt aus dem Windows-Dateicache bereit. Dies bietet eine große Geschwindigkeitssteigerung für statische Dateien mit kleinen Dateien, da es keine Kontextwechsel gibt.
Es wird die Ausgabe von jeder Anwendung zwischengespeichert, an die es eine HTTP-Anforderung weiterleitet, und das eingelöste Ergebnis zurückgeben. Die Anwendung hat die vollständige Kontrolle darüber, wie lange (falls vorhanden) das Caching dauert.
Http.sys wurde entwickelt, um die einfachen Aufgaben SEHR schnell zu erledigen und alles andere an einen Prozess im Benutzerbereich zu übergeben.
Als Antwort auf den Kommentar
Das Problem ist, dass Sie darauf vertrauen müssen, dass Microsoft komplexen Kernel-Code schreibt, um diese Frage zu stellen. Andernfalls entscheiden Sie sich , Windows überhaupt nicht für das Webhosting zu verwenden . Http.sys erhöht das Risiko von Kernel-Fehlern kaum, da der Kernel ohnehin sehr komplex ist.
Wenn überhaupt, reduziert Http.sys das Risiko, da es eine so klare Trennung zwischen "Low Level" Web-Serving und Anwendungscode gibt.
In einer gut konzipierten Konfiguration hat der Computer (oder virtuelle Server), auf dem der Webserver ausgeführt wird, nur sehr eingeschränkten Zugriff auf den Rest des Netzwerks, da dies ein Ziel mit hohem Risiko ist. Es ist kaum anders, wenn der Kernel oder ein Webserver im Benutzermodus gehackt wird, da der Server keine "Rechte" mehr im Netzwerk haben sollte, dann muss der Webserver-Benutzermodusprozess seine Arbeit erledigen.
quelle