Web server
A Webserver ist Computer Software und zugrunde liegende Hardware- das akzeptiert Anfragen über Http (das Netzwerkprotokoll zum Verteiler erstellt Internetinhalt) oder seine sichere Variante Https. Ein Benutzeragent, häufig a Webbrowser oder Web -Crawler, initiiert die Kommunikation, indem er eine Anfrage für a Website oder andere Ressource Verwenden von HTTP und die Server reagiert mit dem Inhalt dieser Ressource oder einer Fehlermeldung. Ein Webserver kann auch Ressourcen akzeptieren und speichern, die vom Benutzeragenten gesendet werden, falls darauf konfiguriert wird.[1] [2]
Die Hardware, die zum Ausführen eines Webservers verwendet wird, kann je nach Anfragen, die er verarbeiten muss, variieren. Am unteren Ende des Bereichs sind eingebettete Systeme, so wie ein Router Dadurch wird ein kleiner Webserver als Konfigurationsschnittstelle ausgeführt. Ein hoher Verkehr Internet Webseite Kann Anfragen mit Hunderten von Servern bearbeiten, die auf Racks von Hochgeschwindigkeitscomputern ausgeführt werden.
Eine von einem Webserver gesendete Ressource kann ein bereits bestehender sein Datei (statischer Inhalt) für den Webserver verfügbar oder kann zum Zeitpunkt der Anfrage generiert werden ((dynamischer Inhalt) durch einen anderen Programm Das kommuniziert mit der Serversoftware. Ersteres kann normalerweise schneller serviert werden und kann leichter sein zwischengespeichert Bei wiederholten Anfragen unterstützt letztere einen breiteren Anwendungsbereich.
Technologien wie SICH AUSRUHEN und SEIFE, die HTTP als Grundlage für die allgemeine Kommunikation über Computer-Komputer sowie Unterstützung für die allgemeine Kommunikation verwenden Webdav Erweiterungen haben die Anwendung von Webservern weit über ihren ursprünglichen Zweck des diente menschlichen lesbaren Seiten hinaus erweitert.
Geschichte
Dies ist eine sehr kurze Geschichte von Webserverprogrammedaher überschneidet sich einige Informationen notwendigerweise mit den Geschichten des Internetbrowser, das Weltweites Netz und die Internet; Aus Gründen der Klarheit und Verständlichkeit können daher einige wichtige historische Informationen unten ähnlich sein wie in einem oder mehreren der oben genannten Artikel.
Erstes WWW-Projekt (1989-1991)
Im März 1989, Sir Tim Berners-Lee schlug seinem Arbeitgeber ein neues Projekt vor Cernmit dem Ziel, den Informationsaustausch zwischen Wissenschaftlern durch Verwendung von a zu erleichtern Hypertext System. Der Vorschlag mit dem Titel " "Hypertext und Cern", fragte nach Kommentaren und es wurde von mehreren Personen gelesen. Im Oktober 1990 wurde der Vorschlag formuliert und angereichert (als Co-Autor Robert Cailliau), und schließlich wurde es genehmigt.[3] [4] [5]
Zwischen Ende 1990 und Anfang 1991 führte das Projekt dazu, dass Berners-Lee und seine Entwickler mehrere Software-Bibliotheken zusammen mit drei Programmen schrieben und testeten NEXTstep OS Installiert auf Nächste Arbeitsstationen:[6] [7] [5]
- eine grafische Webbrowser, genannt Weltweites Netz;
- ein tragbares Line -Modus -Webbrowser;
- ein Webserver, später bekannt als CERN HTTPD.
Diese frühen Browser wurden abgerufen Webseiten von Webserver (en) mit einem neuen grundlegenden Kommunikationsprotokoll, das benannt wurde HTTP 0,9.
Im August 1991 kündigte Tim Berner-Lee die an, die Geburt der WWW -Technologie und ermutigte Wissenschaftler, es zu übernehmen und zu entwickeln.[8] Bald darauf diese Programme zusammen mit ihren Quellcode, wurden Personen zur Verfügung gestellt, die an ihrem Gebrauch interessiert sind.[6] In der Praxis erlaubte CERN informell andere Menschen, einschließlich Entwickler usw., mit dem zu spielen und vielleicht weiter zu entwickeln, was es bis zu diesem Moment gemacht hat. Dies war die offizielle Geburt von CERN HTTPD. Seitdem begann Berner-Lee, die Adoption und die Verwendung dieser Programme zusammen mit ihren zu fördern Portierung zu anderen OSS.[5]
Fast and Wild Development (1991-1995)
Im Dezember 1991 die Erster Webserver außerhalb Europas wurde bei SLAC (USA) installiert.[7] Dies war eine sehr wichtige Veranstaltung, da die transkontinentale Webkommunikation zwischen Webbrowsern und Webservern begann.
In den Jahren 1991-1993 wurde das CERN-Webserverprogramm von 1991-1993 weiterhin von der WWW-Gruppe aktiv entwickelt, dank der Verfügbarkeit seines Quellcode und der öffentlichen Spezifikationen des HTTP-Protokolls wurden viele andere Implementierungen von Webservern entwickelt.
Im April 1993 gab CERN eine offizielle offizielle Erklärung aus Quellcode, wurden in die gesetzt öffentlich zugänglich.[11] Diese Erklärung befreite Webserver -Entwickler von allen möglichen rechtlichen Fragen zur Entwicklung von Ableitungsarbeit Basierend auf diesem Quellcode (eine Bedrohung, die in der Praxis nie existierte).
At the beginning of 1994, the most notable among new web servers was NCSA HTTPD which ran on a variety of Unix-based OSs and could serve dynamically generated content durch Implementierung der POST
HTTP -Methode und die CGI to communicate with external programs. These capabilities, along with the multimedia features of NCSA's Mosaik browser (also able to manage Html Formen in order to send data to web server) highlighted the potential of web technology for publishing and verteiltes Computer Anwendungen.
In the second half of 1994, the development of NCSA httpd stalled to the point that a group of external software developers, Webmaster and other professional figures interested in that server, started to write and collect Patches thanks to the NCSA httpd source code being available to public domain. At the beginning of 1995 those patches were all applied to the last release of NCSA source code and, after several tests, the Apache HTTP server project was started.[12][13]
At the end of 1994 a new commercial web server, named Netsite, was released with specific features. It was the first one of many other similar products that were developed first by Netscape, then also by Sun Microsystems and finally by Oracle Corporation.
In mid-1995 the first version of Iis was released, for Windows NT OS, by Microsoft. This was a notable event because marked the entry, in the field of World Wide Web technologies, of a very important commercial developer and vendor that has played and still is playing a key role on both sides (client and server) of the web.
In the second half of 1995 CERN and NCSA web servers started to decline (in global percentage usage) because of the wide-spread adoption of new web servers which had a much faster development cycle along with more features, more fixes applied and more performances than the previous ones.
Sprengwachstum und Wettbewerb (1996-2014)
At the end of 1996 there were already over fünfzig known (different) web server software programs that were available to everybody who wanted to own an Internet Domainname and/or to host websites.[15] Many of them lived only shortly and were replaced by other web servers.
Die Veröffentlichung von RFCs about protocol versions HTTP/1.0 (1996) and HTTP/1.1 (1997, 1999), forced most web servers to comply (not always completely) with those standards. The use of TCP/IP persistent connections (HTTP/1.1) required web servers both to increase a lot the maximum number of concurrent connections allowed and to improve their level of scalability.
Between 1996 and 1999 Netscape Enterprise Server and Microsoft's IIS emerged among the leading commercial options whereas among the freely available and Open Source programs Apache HTTP Server held the lead as the preferred server (because of its reliability and its many features).
In those years there was also another commercial, highly innovative and thus notable web server called Zeus (now discontinued) that was known as one of the fastest and most scalable web servers available on market, at least till first decade of 2000s, despite its low percentage of usage.
Apache resulted in the most used web server from mid-1996 to the end of 2015 when, after a few years of decline, it was surpassed initially by IIS and then by Nginx. Afterwards IIS dropped to much lower percentages of usage than Apache (see also Marktanteil).
Since 2005-2006 Apache started to improve its speed and its scalability level by introducing new performance features (e.g. event MPM and new content cache).[16][17] As those new performance improvements initially were marked as experimental, they were not enabled by its users for a long time and so Apache suffered even more the competition of commercial servers and, above all, of other open-source servers which meanwhile had already achieved far superior performances (mostly when serving static content) since the beginning of their development and at the time of the Apache decline were able to offer also a long enough list of well tested advanced features.
In fact, a few years after 2000 started, not only other commercial and highly competitive web servers, e.g. LiteSpeed, but also many other open-source programs, often of excellent quality and very high performances, among which should be noted Hiawatha, Cherokee HTTP server, LightTpd, Nginx and other derived/related products also available with commercial support, emerged.
Around 2007-2008 most popular web browsers erhöht their previous default limit of 2 persistent connections per host-domain (a limit recommended by RFC-2616) [18] to 4, 6 or 8 persistent connections per host-domain, in order to speed up the retrieval of heavy web pages with lots of images, and to mitigate the problem of the shortage of persistent connections dedicated to dynamic objects used for bi-directional notifications of events in web pages.[19] Within a year, these changes, on average, nearly tripled the maximum number of persistent connections that web servers had to manage. This trend (of increasing the number of persistent connections) definitely gave a strong impetus to the adoption of reverse proxies in front of slower web servers and it gave also one more chance to the emerging new web servers that could show all their speed and their capability to handle very high numbers of concurrent connections without requiring too many hardware resources (expensive computers with lots of CPUs, RAM and fast disks).[20]
Neue Herausforderungen (2015 und spätere Jahre)
In 2015, RFCs published new protocol version [HTTP/2], and as the implementation of new specifications was not trivial at all, a dilemma arose among developers of less popular web servers (e.g. with a percentage of usage lower than 1% .. 2%), about adding or not adding support for that new protocol version.[21][22]
In fact supporting HTTP/2 often required radical changes to their internal implementation due to many factors (practically always required encrypted connections, capability to distinguish between HTTP/1.x and HTTP/2 connections on the same TCP port, binary representation of HTTP messages, message priority, compression of HTTP headers, use of streams also known as TCP/IP sub-connections and related flow-control, etc.) and so a few developers of those web servers opted for not supporting new HTTP/2 version (at least in the near future) also because of these main reasons:[21][22]
- protocols HTTP/1.x would have been supported anyway by browsers for a very long time (maybe forever) so that there would be no incompatibility between clients and servers in next future;
- implementing HTTP/2 was considered a task of overwhelming complexity that could open the door to a whole new class of Käfer that till 2015 did not exist and so it would have required notable investments in developing and testing the implementation of the new protocol;
- adding HTTP/2 support could always be done in future in case the efforts would be justified.
Instead, developers of most popular web servers, rushed to offer the availability of new protocol, not only because they had the work force and the time to do so, but also because usually their previous implementation of Spdy protocol could be reused as a starting point and because most used web browsers implemented it very quickly for the same reason. Another reason that prompted those developers to act quickly was that webmasters felt the pressure of the ever increasing Webverkehr and they really wanted to install and to try - as soon as possible - something that could drastically lower the number of TCP/IP connections and speedup accesses to hosted websites.[23]
In 2020–2021 the HTTP/2 dynamics about its implementation (by top web servers and popular web browsers) were partly replicated after the publication of advanced drafts of future RFC about Http/3 Protokoll.
Technische Übersicht
The following technical overview should be considered only as an attempt to give a few very limited examples um etwas features that may be implementiert in a web server and etwas of the tasks that it may perform in order to have a sufficiently wide scenario about the topic.
A web server program plays the role of a server in a Client -Server -Modell by implementing one or more versions of HTTP protocol, often including the HTTPS secure variant and other features and extensions that are considered useful for its planned usage.
The complexity and the efficiency of a web server program may vary a lot depending on (e.g.):[1]
- Gemeinsamkeiten implemented;
- common tasks durchgeführt;
- Aufführungen and scalability level aimed as a goal;
- Software model and techniques adopted to achieve wished performance and scalability level;
- target hardware and category of usage, e.g. embedded system, low-medium traffic web server, high traffic Internet web server.
Gemeinsamkeiten
Although web server programs differ in how they are implemented, most of them offer the following common features.
Diese sind Grundfunktionen that most web servers usually have.
- Static content serving: to be able to serve static content (web files) to clients via HTTP protocol.
- Http: support for one or more versions of HTTP protocol in order to send versions of HTTP responses compatible with versions of client HTTP requests, e.g. HTTP/1.0, HTTP/1.1 (eventually also with verschlüsselt Verbindungen Https), plus, if available, Http/2, Http/3.
- Protokollierung: usually web servers have also the capability of logging some information, about client requests and server responses, to Protokolldateien for security and statistical purposes.
A few other more fortschrittlich und beliebt Merkmale (only a very short selection) are the following ones.
- Dynamic content serving: to be able to serve dynamic content (generated on the fly) to clients via HTTP protocol.
- Virtuelles Hosting: to be able to serve many websites (Domain Namen) using only one IP Adresse.
- Genehmigung: to be able to allow, to forbid or to authorize access to portions of website paths (web resources).
- Inhaltscache: to be able to cache static and/or dynamic content in order to speed up server responses;
- Large file support: to be able to serve files whose size is greater than 2 GB on 32 bit OS.
- Bandbreite Drosselung: to limit the speed of content responses in order to not saturate the network and to be able to serve more clients;
- Schreiben Sie den Motor neu: to map parts of clean URLs (found in client requests) to their real names.
- Custom error pages: support for customized HTTP error messages.
Gemeinsame Aufgaben
A web server program, when it is running, usually performs several general Aufgaben, (z.B.):[1]
- starts, optionally reads and applies settings found in its Konfigurationsdatei(s) oder anderswo öffnet optional die Protokolldatei und hört Client -Verbindungen / -anforderungen an.
- Versucht optional, sein allgemeines Verhalten entsprechend seinen Einstellungen und seinem Strom anzupassen Betriebsbedingungen;
- verwaltet client connection(s) (Annahme neuer oder nach Bedarf schließen);
- erhält client requests (by reading HTTP messages):
- liest und verifiziere jede HTTP -Anforderungsnachricht;
- Normalerweise ausgeführt URL -Normalisierung;
- Normalerweise ausgeführt URL -Zuordnung (die standardmäßig zur URL -Pfadübersetzung);
- Normalerweise ausgeführt URL -Pfadübersetzung zusammen mit verschiedenen Sicherheitskontrollen;
- ausgeführt oder verweigert die angeforderte HTTP -Methode:
- Optional verwaltet URL -Autorisierungen;
- Optional verwaltet URL -Umleitungen;
- Optional verwaltet Anfragen für Statische Ressourcen (Dateiinhalte):
- Optional verwaltet Verzeichnisindexdateien;
- Optional verwaltet Regelmäßige Dateien;
- Optional verwaltet Anfragen für Dynamische Ressourcen:
- Optional verwaltet Verzeichnislisten;
- Optional verwaltet Programm- oder ModulverarbeitungÜberprüfung der Verfügbarkeit, des Starts und schließlich des Stopps der Ausführung externer Programme, mit denen dynamische Inhalte generiert werden;
- Optional verwaltet die Kommunikation mit externen Programmen / internen Modulen, die zum Generieren dynamischer Inhalte verwendet werden.
- Antworten Um Client -Anfragen zu befragen, um ordnungsgemäße HTTP -Antworten (z. B. angeforderte Ressourcen oder Fehlermeldungen) zu senden, überprüfen oder addieren Sie schließlich HTTP -Header an die von dynamischen Programmen / Modulen gesendeten;
- Optional Protokolle (teilweise oder völlig) Kundenanfragen und/oder seine Antworten in eine externe Benutzerprotokolldatei oder in eine Systemprotokolldatei von syslog, normalerweise benutzt Gemeinsames Protokollformat;
- Optional Protokolle verarbeiten Nachrichten um erkannte Anomalien oder andere bemerkenswerte Ereignisse (z. B. in Client -Anfragen oder in der internen Funktion) unter Verwendung von Syslog oder einigen anderen Systemeinrichtungen; Diese Protokollnachrichten haben normalerweise ein Debug, Warnung, Fehler und Warnstufe, das je nach Einstellungen gefiltert werden kann (nicht protokolliert). Schweregrad;
- optional generiert Statistiken über den verwalteten Webverkehr und/oder seine Leistungen;
- Andere benutzerdefinierte Aufgaben.
Anforderungsnachricht lesen
Webserverprogramme sind in der Lage:[24] [25] [26]
- zum Lesen einer HTTP -Anforderungsnachricht;
- es interpretieren;
- um seine Syntax zu überprüfen;
- Bekannte zu identifizieren HTTP -Header und ihre Werte aus ihnen zu extrahieren.
Sobald eine HTTP -Anforderungsnachricht dekodiert und verifiziert wurde, können ihre Werte verwendet werden, um festzustellen, ob diese Anforderung erfüllt werden kann oder nicht. Dies erfordert viele andere Schritte, einschließlich Sicherheitskontrollen.
URL -Normalisierung
Webserverprogramme führen normalerweise eine Art von Art von URL -Normalisierung (URL in den meisten HTTP -Anforderungsnachrichten gefunden) in der Reihenfolge:
- Um den Ressourcenpfad immer zu einem sauberen einheitlichen Pfad aus dem Root -Verzeichnis der Website zu machen;
- Um die Sicherheitsrisiken zu senken (z. B. durch leichter Versuche, auf statische Ressourcen außerhalb des Stammverzeichnisses der Website zuzugreifen oder auf Teile des Pfad -Root -Verzeichnisses zuzugreifen, die verboten sind oder die Genehmigung erfordern);
- Um den Webressourcen für Menschen und für Menschen erkennbarer zu gestalten und Programme für Webprotokollanalyse (Auch als log Analysatoren / statistische Anwendungen bezeichnet).
Der Begriff URL -Normalisierung Bezieht sich auf den Prozess der Änderung und Standardisierung einer URL auf konsistente Weise. Es gibt verschiedene Arten von Normalisierung, die durchgeführt werden können, einschließlich der Umwandlung des Schemas und des Hosts in Kleinbuchstaben. Zu den wichtigsten Normalisierungen gehört die Entfernung von "." und ".." Pfadsegmente und Hinzufügen von nachverfolgenden Schrägstrichen zu einer nicht leeren Pfadkomponente.
URL -Zuordnung
"URL -Zuordnung ist der Prozess, mit dem eine URL analysiert wird, um herauszufinden, auf welche Ressource sie sich bezieht Einige der Anfragen, die mit einer Datei wie einem HTML-Dokument oder einem GIF-Image, andere mit den Ergebnissen des Ausführens eines CGI oder ein Java -Servlet. "[27]
In der Praxis sind Webserverprogramme, die erweiterte Funktionen implementieren, über das einfache hinaus Statische Inhalte dienen (z. B. URL Rewrite Engine, dynamischer Inhaltsdienste) müssen normalerweise herausfinden, wie diese URL behandelt werden muss, z. B.:
- Als ein URL -Umleitung, eine Umleitung zu einer anderen URL;
- Als ein Statische Anfrage von Datei Inhalt;
- Als ein Dynamische Anfrage von:
- Verzeichnis Auflistung von Dateien oder anderen in diesem Verzeichnis enthaltenen Unterdirektorien;
- Andere Arten dynamischer Anforderungen, um den Programm- / Modulprozessor zu identifizieren, der diese Art von URL -Pfad verarbeiten und an andere weitergegeben werden kann URL -Teile, d.h. normalerweise Pfadinfo und Abfragezeichenfolge Variablen.
Eine oder mehrere Konfigurationsdateien des Webservers können die Zuordnung von Teilen von angeben URL -Pfad (z. B. Anfangsteile von Dateipfad, Dateiname Erweiterung und andere Pfadkomponenten) zu einem bestimmten URL -Handler (Datei, Verzeichnis, externes Programm oder internes Modul).[28]
Wenn ein Webserver eine oder mehrere der oben genannten erweiterten Funktionen implementiert, stimmt der Pfadteil einer gültigen URL möglicherweise nicht immer mit einem vorhandenen Dateisystempfad unter Website-Verzeichnis-Baum (eine Datei oder ein Verzeichnis in ein Dateisystem) Da es sich auf einen virtuellen Namen eines internen oder externen Modulprozessors für dynamische Anforderungen beziehen kann.
URL -Pfadübersetzung zum Dateisystem
Webserverprogramme können einen URL -Pfad (alle oder Teil davon) übersetzen, der sich auf einen physischen Dateisystempfad zu einem bezieht absoluter Pfad Unter dem Root -Verzeichnis der Zielwebsite.[28]
Das Root -Verzeichnis der Website kann durch eine Konfigurationsdatei oder über eine interne Regel des Webservers angegeben werden Gastgeber Teil der URL in der HTTP -Client -Anfrage.[28]
Die Pfadübersetzung zum Dateisystem erfolgt für die folgenden Arten von Webressourcen:
- eine lokale, normalerweise nicht exezibutierbare Datei (statische Anforderung für Dateiinhalte);
- ein lokales Verzeichnis (dynamische Anfrage: Verzeichnisauflistung im laufenden Fliegen);
- Ein Programmname (dynamische Anfragen, die mithilfe der CGI- oder SCGI -Schnittstelle ausgeführt werden und deren Ausgabe vom Webserver gelesen wird und an den Client ärgert wird, der die HTTP -Anforderung gestellt hat).
Der Webserver findet den Pfad an, der in der angeforderten URL (HTTP -Anforderungsnachricht) gefunden wurde, und findet ihn an den Pfad des Root -Verzeichnisses (Host) -Website an. Auf an Apache -ServerDies ist häufig /Home/www/Website
(an Unix Maschinen, normalerweise ist es: /var/www/Website
). Sehen Sie die folgenden Beispiele dafür, wie es entstehen kann.
URL -Pfadübersetzung für eine statische Dateianforderung
Beispiel von a Statische Anfrage einer vorhandenen Datei, die von der folgenden URL angegeben wurde:
http://www.example.com/path/file.html
Die Kunden User-Agent verbindet sich mit www.example.com
und sendet dann die folgenden Http/1.1 Anfrage:
Get /path/file.html http/1.1 Host: www.example.com Verbindung: Keep-Alive
Das Ergebnis ist die lokale Dateisystemressource:
/home/www/www.example.com/path/file.html
Der Webserver liest dann die Datei, wenn es existiert und eine Antwort an den Webbrowser des Kunden sendet. Die Antwort beschreibt den Inhalt der Datei und enthält die Datei selbst, oder eine Fehlermeldung gibt mit der Aussage zurück, dass die Datei nicht existiert oder ihr Zugriff verboten ist.
URL -Pfadübersetzung für eine Verzeichnisanforderung (ohne statische Indexdatei)
Beispiel eines impliziten Dynamische Anfrage eines vorhandenen Verzeichnisses, das durch die folgende URL angegeben ist:
http://www.example.com/directory1/directory2/
Die Kunden User-Agent verbindet sich mit www.example.com
und sendet dann die folgenden Http/1.1 Anfrage:
GET/DIRECTORY1/DIRECTORY2 HTTP/1.1 HOST: www.example.com Verbindung: Keep-Alive
Das Ergebnis ist der lokale Verzeichnisweg:
/home/www/www.example.com/directory1/directory2/
Der Webserver überprüft dann die Existenz des Verzeichnis und wenn es vorhanden ist und zugegriffen werden kann, versucht es, eine Indexdatei zu finden (die in diesem Fall nicht vorhanden ist) und übergeben die Anforderung an ein internes Modul oder ein Programm, das den Verzeichnislisten gewidmet ist und schließlich die Datenausgabe liest und gesendet wird Eine Antwort auf den Webbrowser des Kunden. Die Antwort beschreibt den Inhalt des Verzeichnisses (Liste der enthaltenen Subdirektorien und Dateien), oder eine Fehlermeldung gibt die Aussage zurück, dass das Verzeichnis nicht existiert oder der Zugriff verboten ist.
URL -Pfadübersetzung für eine dynamische Programmanforderung
Für ein Dynamische Anfrage Der vom Client angegebene URL -Pfad sollte sich auf ein vorhandenes externes Programm (normalerweise eine ausführbare Datei mit einem CGI) beziehen, das vom Webserver verwendet wird, um dynamischen Inhalt zu generieren.[29]
Beispiel von a Dynamische Anfrage Verwenden einer Programmdatei, um Ausgabe zu generieren:
http://www.example.com/cgi-bin/forum.php?action=view&orderby=thread&date=2021-10-15
Die Kunden User-Agent verbindet sich mit www.example.com
und sendet dann die folgenden Http/1.1 Anfrage:
Get /cgi ---Bin/forum.php?action=view&ordeby=thread&date=2021-10-15 http/1.1 Host: www.example.com Verbindung: Keep-Alive
Das Ergebnis ist der lokale Dateipfad des Programms (in diesem Beispiel a Php Programm):
/home/www/www.example.com/cgi-bin/forum.php
Der Webserver führt dieses Programm aus, das in den Pfadinfo und das übergeht Abfragezeichenfolge Aktion = Ansicht & OrderBy = Thread & Datum = 2021-10-15
Damit das Programm die Informationen enthält, die es benötigt, um auszuführen. (In diesem Fall wird ein HTML -Dokument mit einer Ansicht der vom 15. Oktober 2021 bestellten Forumeinträge zurückgegeben.) Darüber hinaus liest der Webserver Daten, die aus dem externen Programm gesendet wurden, und weist diese Daten an den Client aus, der die Anforderung gestellt hat.
Anforderungsnachricht verwalten
Sobald eine Anfrage gelesen, interpretiert und verifiziert wurde, muss sie je nach Methode, URL und ihren Parametern verwaltet werden, die Werte von HTTP -Headern enthalten können.
In der Praxis muss der Webserver die Anforderung mit einem dieser Antwortpfade verwenden:[28]
- Wenn etwas in der Anfrage nicht akzeptabel war (in Statuszeile oder Nachrichtenheadern), hat der Webserver bereits eine Fehlerantwort gesendet.
- Wenn die Anforderung eine Methode hat (z.
OPTIONEN
) Das kann durch den allgemeinen Code des Webservers erfüllt werden, dann wird eine erfolgreiche Antwort gesendet. - Wenn die URL Autorisierung erfordert, dann eine Autorisierungsfehlermeldung wird gesendet;
- Wenn URL eine Umleitung kartiert, dann a Nachricht umleiten wird gesendet;
- Wenn URL -Karten zu a Dynamische Ressource (Ein virtueller Pfad oder eine Verzeichnisauflistung) Dann wird sein Handler (ein internes Modul oder ein externes Programm) aufgerufen und die Anforderungsparameter (Abfragebarstellung und Pfadinformationen) übergeben, damit sie auf diese Anfrage beantwortet werden kann.
- Wenn URL -Karten zu a Statische Ressource (Normalerweise eine Datei im Dateisystem) Dann wird der interne statische Handler aufgerufen, um diese Datei zu senden.
- Wenn die Anforderungsmethode nicht bekannt ist oder wenn es eine andere inakzeptable Bedingung gibt (z. B. nicht gefundene Ressource, interner Serverfehler usw.), dann eine Fehlerantwort wird gesendet.
Statische Inhalte bedienen
Wenn ein Webserverprogramm in fähig ist zu statische Inhalte bedienen und es wurde so konfiguriert, dass es dann Dateiinhalte senden kann, wenn eine Anforderungsnachricht eine gültige URL -Pfadübereinstimmung hat (nach URL -Zuordnung, URL -Übersetzung und URL -Umleitung), die einer vorhandenen Datei unter dem Stammverzeichnis einer Website und Datei enthält Attribute, die den internen Regeln des Webserverprogramms entsprechen.[28]
Diese Art von Inhalten heißt statisch Da es normalerweise nicht vom Webserver geändert wird, wenn er an Clients gesendet wird und da es bis zum Ändern (Dateiänderung) von einem Programm gleich bleibt.
Hinweis: Beim Servieren Nur statischer Inhalt, ein Webserverprogramm normalerweise Ändert keine Dateiinhalte von bedienten Websites (wie sie nur gelesen und nie geschrieben werden) und so reicht es nur aus, nur diese zu unterstützen HTTP -Methoden:
OPTIONEN
KOPF
ERHALTEN
Die Antwort statischer Dateiinhalte kann von a beschleunigt werden Dateicache.
Verzeichnisindexdateien
Wenn ein Webserverprogramm eine Client -Anforderungsnachricht mit einer URL empfängt, deren Pfad einer von vorhandenen entspricht Verzeichnis und dieses Verzeichnis ist zugänglich und Servierverzeichnis -Indexdatei (n) ist aktiviert, dann kann ein Webserverprogramm versuchen, den ersten der bekannten (oder konfigurierten) statischen Index -Dateinamen zu bedienen (a Regelmäßige Datei) in diesem Verzeichnis gefunden; Wenn keine Indexdatei gefunden wird oder andere Bedingungen nicht erfüllt sind, wird eine Fehlermeldung zurückgegeben.
Die meisten verwendeten Namen für statische Indexdateien sind: index.html
, index.htm
und Default.htm
.
Regelmäßige Dateien
Wenn ein Webserverprogramm eine Client -Anforderungsnachricht mit einer URL empfängt Datei Und diese Datei ist über das Webserverprogramm zugegriffen und ihre Attribute entsprechen den internen Regeln des Webserverprogramms. Anschließend kann das Webserverprogramm diese Datei an den Client senden.
Normalerweise werden die meisten Webserverprogramme aus Sicherheitsgründen vorkonfiguriert, um nur zu dienen Regelmäßige Dateien oder um die Verwendung zu vermeiden Spezialateitypen wie Gerätedateien, zusammen mit Symbolische Links oder harte Links zu ihnen. Ziel ist es, unerwünschte Nebenwirkungen beim Servieren statischer Webressourcen zu vermeiden.[30]
Dynamischen Inhalt servieren
Wenn ein Webserverprogramm in fähig ist zu dynamischen Inhalt servieren und es wurde dazu konfiguriert, dann kann es mit dem richtigen internen Modul oder dem externen Programm (der dem angeforderten URL -Pfad verbunden) kommunizieren, um an die Parameter der Clientanforderung weiterzugeben. Danach liest das Webserverprogramm die Datenantwort (die es generiert hat, oft im Fliegen) und stellt es dann an das Client -Programm, das die Anfrage gestellt hat.
Hinweis: Beim Servieren statischer und dynamischer Inhalt, ein Webserverprogramm muss normalerweise auch die folgende HTTP -Methode unterstützen, um sicher in der Lage zu sein, sicher zu sein empfange Daten von Clients (en) und so, um auch Websites mit interaktiven Form (e) zu hosten, die möglicherweise große Datensätze senden (z. B. viele Dateneingabe oder Datei -Uploads) an Webserver / externe Programme / Module:
POST
Um mit seinen internen Modulen und/oder externen Programmen kommunizieren zu können, muss ein Webserverprogramm eine oder mehrere der vielen verfügbaren implementiert haben Gateway -Schnittstelle (en) (siehe auch Webserver -Gateway -Schnittstellen, die für dynamische Inhalte verwendet werden).
Die Drei Standard und historisch Gateway -Schnittstellen sind die folgenden.
- CGI
- Ein externes CGI -Programm wird für jede dynamische Anforderung vom Webserverprogramm ausgeführt. Anschließend liest das Webserverprogramm die generierte Datenreaktion daraus und setzt es anschließend für den Client.
- Scgi
- Ein externes SCGI -Programm (es ist normalerweise ein Prozess) wird einmal vom Webserverprogramm oder von einem anderen Programm / Prozess gestartet und wartet dann auf Netzwerkverbindungen. Jedes Mal, wenn es eine neue Anfrage gibt, stellt das Webserverprogramm eine neue Netzwerkverbindung dazu her, um Anforderungsparameter zu senden und seine Datenantwort zu lesen, und dann wird die Netzwerkverbindung geschlossen.
- Fastcgi
- Ein externes FastCGI -Programm (es ist normalerweise ein Prozess) wird einmal vom Webserverprogramm oder nach einem anderen Programm / Prozess gestartet und wartet dann auf eine Netzwerkverbindung, die permanent vom Webserver festgelegt wird. Durch diese Verbindung werden die Anforderungsparameter gesendet und Datenantworten gelesen.
Verzeichnislisten
Ein Webserverprogramm kann in der Lage sein, die dynamische Generation (im laufenden Fliegen) von a zu verwalten Verzeichnisindexliste von Dateien und Unterverzeichnissen.[31]
Wenn ein Webserverprogramm darauf konfiguriert ist und ein angeforderter URL -Pfad mit einem vorhandenen Verzeichnis übereinstimmt und sein Zugriff zulässig ist und in diesem Verzeichnis keine statische Indexdatei gefunden wird, dann eine Webseite (normalerweise im HTML -Format), das die Liste der Dateien enthält und/oder Unterverzeichnisse des oben genannten Verzeichnisses ist, ist dynamisch erzeugt (im laufenden Fliegen). Wenn es nicht generiert werden kann, wird ein Fehler zurückgegeben.
Einige Webserverprogramme ermöglichen die Anpassung von Verzeichnislisten, indem die Verwendung einer Webseitenvorlage (ein HTML -Dokument mit Platzhaltern, z. $ (File_name), $ (file_size)
usw., die durch die Feldwerte jedes Dateieintrags ersetzt werden, der im Verzeichnis von Webserver gefunden wurde), z. Index.tpl
oder die Verwendung von HTML und eingebettetem Quellcode, der im laufenden Fliegen interpretiert und ausgeführt wird, z. Index.asp
und / oder durch Unterstützung der Verwendung dynamischer Indexprogramme wie CGIS, SCGIS, FGCIS, z. index.cgi
, index.php
, index.fcgi
.
Verwendung von dynamisch erzeugten Verwendung Verzeichnislisten wird normalerweise vermieden oder auf einige ausgewählte Verzeichnisse einer Website beschränkt, da diese Generation viel mehr OS -Ressourcen einnimmt als eine statische Indexseite.
Die Hauptverwendung von Verzeichnislisten soll den Download von Dateien zulassen (normalerweise, wenn ihre Namen, Größen, Änderungsdatumzeiten oder Dateiattribute kann sich zufällig / häufig ändern) Wie sie sind, ohne dass sie dem Benutzer weitere Informationen zur Verfügung stellen müssen.[32]
Programm- oder Modulverarbeitung
Ein externes Programm oder ein internes Modul (Verarbeitungseinheit) kann eine Art von Anwendungsfunktion ausführen, mit der Daten aus oder zum Speichern von Daten in einem oder mehreren verwendet werden können Datenrepositories, z.B.:
- Dateien (Dateisystem);
- Datenbanken (Dbs);
- Andere Quellen auf lokalem Computer oder in anderen Computern.
A Verarbeitungseinheit Kann jede Art von Webinhalten zurückgeben, auch indem Daten verwendet werden, die aus einem Datenrepository abgerufen wurden, z. B.:
- Ein Dokument (z. Html, Xml, etc.);
- ein Bild;
- ein Video;
- Strukturierte Daten, z. Dies kann verwendet werden, um einen oder mehrere Werte zu aktualisieren, die von einer dynamischen Seite angezeigt werden (DHTML) von a Webschnittstelle und das wurde vielleicht von einem angefordert Xmlhttprequest API (siehe auch: Dynamische Seite).
In der Praxis, wenn sich Inhalte je nach einer oder mehreren Parametern, die in der Clientanforderung oder in Konfigurationseinstellungen enthalten sind, variieren können, wird dies normalerweise dynamisch generiert.
Antwortnachricht senden
Webserverprogramme können Antwortnachrichten als Antworten an Client -Anforderungsnachrichten senden.[24]
Eine Fehlerantwortmeldung kann gesendet werden, da eine Anforderungsnachricht nicht erfolgreich gelesen oder dekodiert oder analysiert oder ausgeführt werden konnte.[25]
Hinweis: Die folgenden Abschnitte werden nur als Beispiele gemeldet, um zu verstehen, was ein Webserver mehr oder weniger tut. Diese Abschnitte sind weder erschöpfend noch vollständig.
Fehlermeldung
Ein Webserverprogramm kann auf eine Client -Anforderungsnachricht mit vielen Arten von Fehlermeldungen antworten. Jedenfalls sind diese Fehler hauptsächlich in zwei Kategorien aufgeteilt:
- HTTP -Client -Fehler, aufgrund der Art der Anforderungsnachricht oder der Verfügbarkeit von angeforderten Webressourcen;[33]
- HTTP -Serverfehler, aufgrund interner Serverfehler.[34]
Wenn eine Fehlerantwort / -nachricht von einem Client -Browser empfangen wird, dann wird diese Fehlermeldung normalerweise in einem Browserfenster / -nachricht angezeigt, wenn sie mit der Hauptbenutzeranforderung (z. .
URL -Autorisierung
Ein Webserverprogramm kann möglicherweise überprüfen, ob der angeforderte URL -Pfad:[35]
- kann von allen frei zugreifen;
- Erfordert eine Benutzerauthentifizierung (Anfrage von Benutzeranmeldeinformationen, z. B. wie z. B. Nutzername und Passwort);
- Der Zugriff ist für einige oder alle Arten von Benutzern verboten.
Wenn die Funktion zur Berechtigungs- / Zugriffsrechtsfunktion implementiert und aktiviert wurde und der Zugriff auf Webressource nicht gewährt wird, dann je nach den erforderlichen Zugriffsrechten ein Webserverprogramm:
- Kann Zugriff verweigern, indem eine bestimmte Fehlermeldung gesendet wird (z. B. Zugriff verboten);
- Kann Zugriff verweigern, indem eine bestimmte Fehlermeldung gesendet wird (z. B. Zugriff nicht autorisiert) Dies zwingt den Client -Browser normalerweise, den menschlichen Benutzer zu bitten, die erforderlichen Benutzeranmeldeinformationen bereitzustellen. Wenn Authentifizierungsanmeldeinformationen bereitgestellt werden, überprüft und akzeptiert das Webserverprogramm sie oder lehnt sie ab.
URL -Umleitung
Ein Webserverprogramm kann Haben Sie die Möglichkeit, URL -Umleitung zu neuen URLs (neue Standorte) durchzuführen, die auf eine Client -Anforderungsnachricht mit einer Antwortnachricht mit einer neuen URL, die für den Zugriff auf eine gültige oder vorhandene Webressource geeignet ist URL).[36]
Die URL -Umleitung des Standorts wird verwendet:[36]
- um einen Verzeichnisnamen durch Hinzufügen eines endgültigen Schrägs zu beheben '/';[31]
- Um eine neue URL für einen nicht mehr vorhandenen URL -Pfad zu einem neuen Weg zu geben, auf dem diese Art von Webressource gefunden werden kann.
- Eine neue URL für eine andere Domäne geben, wenn die aktuelle Domäne zu viel Last hat.
Beispiel 1: Ein URL -Pfad zeigt auf a Verzeichnis Name, aber es gibt keinen endgültigen Schrägstrich '/', sodass Webserver eine Weiterleitung an den Client sendet, um sie anzuweisen, die Anforderung mit dem festen Pfadnamen zu wiederholen.[31]
Aus:
/Verzeichnis1/Verzeichnis2
Zu:
/Verzeichnis1/Verzeichnis2/
Beispiel 2: Eine ganze Reihe von Dokumenten war in der Website bewegt Um ihre Dateisystempfade neu zu organisieren.
Aus:
/Directory1/Verzeichnis2/2021-10-08/
Zu:
/Verzeichnis1/Verzeichnis2/2021/10/08/
Beispiel 3: Eine ganze Reihe von Dokumenten war Umgezogen auf eine neue Website Und jetzt ist es obligatorisch, sichere HTTPS -Verbindungen zu verwenden, um darauf zuzugreifen.
Aus:
http://www.example.com/directory1/directory2/2021-10-08/
Zu:
https://docs.example.com/directory1/2021-10-08/
Oben Beispiele sind nur einige der möglichen Umleitungen.
Erfolgreiche Nachricht
Ein Webserverprogramm kann auf eine gültige Client -Anforderungsnachricht mit einer erfolgreichen Nachricht antworten, die optional angefordert ist Webressourcendaten.[37]
Wenn Webressourcendaten an den Client zurückgesandt werden, kann dies sein statischer Inhalt oder dynamischer Inhalt abhängig davon, wie es abgerufen wurde (aus einer Datei oder aus der Ausgabe eines Programms / Moduls).
Inhaltscache
Um die Antworten von Webserver zu beschleunigen, indem die durchschnittlichen HTTP -Antwortzeiten und Hardware -Ressourcen gesenkt werden, implementieren viele beliebte Webserver einen oder mehrere Inhalte CachesJede spezialisierte sich auf eine Inhaltskategorie.[38] [39]
Der Inhalt wird normalerweise durch seine Herkunft zwischengespeichert, z. B.:
- statischer Inhalt:
- dynamischer Inhalt:
- Dynamischer Cache (Modul / Programmausgabe).
Dateicache
Historisch gesehen statische Inhalte gefunden in Dateien auf die häufig, zufällig und schnell zugegriffen werden mussten, wurden hauptsächlich auf elektromechanischer Aufbewahrung aufbewahrt Scheiben seit Mitte der 1960er / 1970er Jahre; Lesen bedauerlicherweise von solchen und schreibt diese Art von Geräte wurden im Vergleich zu immer als sehr langsame Operationen angesehen RAM Geschwindigkeit und so, seit früh OSS, zuerst Caches und dann auch OS Datei Zwischenspeicher Subsysteme wurden entwickelt, um zu beschleunigen I/o Vorgänge von häufig zugegriffenen Daten / Dateien.
Selbst mit Hilfe eines OS -Datei -Cache wurde die relative / gelegentliche Langsamkeit von E / A -Operationen, in denen Verzeichnisse und Dateien auf Festplatten gespeichert sind Engpass in der Erhöhung von Aufführungen Von den webstufigen Webservern erwartet, insbesondere seit der Mitte der neunziger Jahre, als der Web-Internetverkehr zusammen mit der ständigen Erhöhung der Geschwindigkeit der Internet- / Netzwerklinien exponentiell zunahm.
Das Problem, wie die Portion statischer Dateien effizient beschleunigt werden kann, wodurch die maximale Anzahl von Anforderungen/Antworten pro Sekunde erhöht wird (RPS), begann seit Mitte der neunziger Jahre untersucht / recherchiert zu werden, mit dem Ziel, nützliche Cache -Modelle vorzuschlagen, die in Webserverprogrammen implementiert werden könnten.[40] [41]
In der Praxis umfassen viele beliebte / leistungsstarke Webserverprogramme heutzutage ihre eigenen Userland Dateicache, maßgeschneidert auf eine Webservernutzung und die Verwendung ihrer spezifischen Implementierung und Parameter.[42] [43] [44]
Die weit verbreitete Übernahme von ÜBERFALLEN und/oder schnell Solid State Drives (Speicherhardware mit sehr hoher E/A -Geschwindigkeit) hat sich leicht reduziert, aber natürlich nicht den Vorteil, dass ein Datei -Cache in einen Webserver integriert ist.
Dynamischer Cache
Dynamischer Inhalt, Ausgabe durch ein internes Modul oder ein externes Programm, ändert sich möglicherweise nicht immer sehr häufig (bei einer einzigartigen URL mit Schlüssel / Parametern) und möglicherweise für eine Weile (z. B. 1 Sekunde bis mehrere Stunden oder mehr), die resultierende Die Ausgabe kann im RAM oder sogar in einem schnellen zwischengespeicherten Abgeordneten zwischenstrichen Scheibe.[45]
Die typische Verwendung eines dynamischen Cache ist, wenn eine Website hat Dynamische Webseiten Über Nachrichten, Wetter, Bilder, Karten usw., die sich nicht häufig ändern (z. B. jeder n Minuten) und auf die eine große Anzahl von Kunden pro Minute / Stunde zugegriffen werden; In diesen Fällen ist es nützlich, auch zwischengespeicherte Inhalte zurückzugeben (ohne das interne Modul oder das externe Programm aufzurufen), da Kunden häufig keine aktualisierte Kopie des angeforderten Inhalts in ihren Browser -Caches haben.[46]
In den meisten Fällen werden diese Art von Caches von externen Servern implementiert (z. Reverse Proxy) oder durch Speichern der dynamischen Datenausgabe in separaten Computern, die von bestimmten Anwendungen verwaltet werden (z. memcached), um nicht um Hardwareressourcen (CPU, RAM, Disks) mit Webserver (en) zu konkurrieren.[47] [48]
Kernel-Mode- und Benutzer-Modus-Webserver
Eine Webserver -Software kann entweder in die aufgenommen werden OS und ausgeführt in Kernel Raum oder es kann ausgeführt werden in Benutzerraum (wie andere reguläre Anwendungen).
Webserver, die hereinlaufen Kernelmodus (Normalerweise genannt Kernel Space Web -Server) kann direkten Zugriff auf Kernelressourcen haben und können theoretisch schneller sein als diejenigen, die im Benutzermodus ausgeführt werden. Auf jeden Fall gibt es Nachteile beim Ausführen eines Webservers im Kernel -Modus, z. B.: Schwierigkeiten bei der Entwicklung (Debuggen) Software Während Laufzeit Kritische Fehler kann zu schwerwiegenden Problemen im OS -Kernel führen.
Webserver, die hereinlaufen Benutzermodus müssen das System um Erlaubnis bitten, mehr Speicher oder mehr zu verwenden Zentralprozessor Ressourcen. Diese Anfragen an den Kernel nehmen nicht nur Zeit, sondern sind möglicherweise nicht immer zufrieden, da das System Ressourcen für seine eigene Nutzung behält und die Verantwortung für die Freigabe von Hardwareressourcen mit allen anderen laufenden Anwendungen hat. Die Ausführung im Benutzermodus kann auch mit mehr Puffer-/Datenkopien (zwischen Benutzerraum und Kernel-Raum) bedeuten, was zu einer Verringerung der Leistung eines Benutzer-Modus-Webservers führen kann.
Heutzutage wird fast alle Webserver -Software im Benutzermodus ausgeführt (da viele der oben genannten kleinen Nachteile durch schnellere Hardware, neue Betriebssystemversionen, viel schnelleres Betriebssystem überwunden wurden Systemaufrufe und neue optimierte Webserver -Software). Siehe auch Vergleich der Webserver -Software Um herauszufinden, welche von ihnen im Kernel -Modus oder im Benutzermodus ausgeführt wird (auch als Kernel -Speicherplatz oder Benutzerraum bezeichnet).
Aufführungen
Zu Verbessere die Benutzererfahrung (Auf Client / Browserseite) sollte ein Webserver Antworten Sie schnell (so schnell wie möglich) an Kundenanfragen; Sofern die Inhaltsantwort nicht für eine Art von Dateien (z. B. große oder große Dateien) drosselt wird (nach Konfiguration), sollte auch zurückgegebene Dateninhalte so schnell wie möglich gesendet werden (hohe Übertragungsgeschwindigkeit).
Mit anderen Worten, a Webserver sollte immer sehr sein reaktionsschnell, auch unter hoher Ladung des Webverkehrs, um zu halten Wartezeit des Benutzers des Benutzers (Summe der Browserzeit + Netzwerkzeit + Reaktionszeit des Webservers) für eine Antwort So niedrig wie möglich.
Leistungsmetriken
Für Webserver -Software, Hauptschlüssel Leistungsmetriken (gemessen unter variieren Betriebsbedingungen) Normalerweise sind mindestens die folgenden (d. H.):[49] [50]
- Anzahl von Anfragen pro Sekunde (RPS, ähnlich zu QPSabhängig von der HTTP -Version und -konfiguration, dem Typ der HTTP -Anforderungen und anderer Betriebsbedingungen);
- Anzahl von Verbindungen pro Sekunde (CPS), ist die Anzahl der Verbindungen pro Sekunde, die vom Webserver akzeptiert werden (nützlich, wenn sie http/1.0 oder http/1.1 mit einer sehr niedrigen Begrenzung von Anforderungen/Antworten pro Verbindung, d. H. 1 .. 20), verwendet werden;
- Netzwerk-Latenz + Reaktionszeit Für jede neue Kundenanfrage; Normalerweise zeigt das Benchmark -Tool an, wie viele Anfragen innerhalb einer Skala von Zeitlaaten (z. B. innerhalb von 1 ms, 3 ms, 5 ms, 10 ms, 20 ms, 30 ms, 40 ms) und / oder der kürzesten, durchschnittlichen und längsten Reaktionszeit erfüllt wurden.
- Durchsatz von Antworten, in Bytes pro Sekunde.
Unter den Betriebsbedingungen die Nummer (1 .. n) von Gleichzeitige Clientverbindungen Der während eines Tests verwendete ist ein wichtiger Parameter, da er die Korrelation der Korrelation ermöglicht Parallelität eben Unterstützt vom Webserver mit Ergebnissen der getesteten Leistungsmetriken.
Software -Effizienz
Das spezifischer Webserver Software-Design und Modell übernommen (z.B.):
- Single Prozess oder Multi-Process;
- Single Faden (kein Thread) oder Multi-Thread für jeden Prozess;
- Benutzung von Coroutinen oder nicht;
... und andere Programmierungstechniken, wie (z. B.):
- Zero Kopie;
- Minimierung möglich CPU -Cache -Misses;
- Minimierung möglich CPU -Filiale Fehlverhalten in kritischen Wegen für Geschwindigkeit;
- Minimierung der Anzahl der Anzahl Systemaufrufe Wird verwendet, um eine bestimmte Funktion / Aufgabe auszuführen;
- andere Tricks;
... verwendet, um ein Webserverprogramm zu implementieren, kann viel verzerren Aufführungen und insbesondere die Skalierbarkeit eben das kann unter erreicht werden schwere Ladung oder bei der Verwendung von High -End -Hardware (viele CPUs, Scheiben und viel RAM).
In der Praxis erfordern einige Webserver -Softwareberechnungsmodelle möglicherweise mehr Betriebssystemressourcen (insbesondere mehr CPUs und mehr RAM) als andere, um gut funktionieren zu können und so, um Zielleistungen zu erzielen.
Betriebsbedingungen
Es gibt viele Betriebsbedingungen, die die Leistungen beeinflussen können eines Webservers; Die Leistungswerte können je nach (d. H.) variieren:
- die Einstellungen des Webservers (einschließlich der Tatsache, dass die Protokolldatei aktiviert ist oder nicht usw.);
- die von Client -Anfragen verwendete HTTP -Version;
- der durchschnittliche HTTP -Anforderungstyp (Methode, Länge der HTTP -Header und optionaler Körper);
- ob der angeforderte Inhalt statisch oder dynamisch ist;
- ob der Inhalt ist zwischengespeichert oder nicht zwischengespeichert (nach Server und/oder nach Client);
- ob der Inhalt ist komprimiert im laufenden (wenn übertragen) (d. H. Wenn eine Dateiressource auf der Festplatte bereits komprimiert wird, sodass Webserver diese Datei direkt an das Netzwerk senden kann ;
- ob die Verbindungen verschlüsselt sind oder nicht;
- der Durchschnitt Netzwerkgeschwindigkeit zwischen Webserver und seinen Clients;
- die Anzahl der aktiven TCP Verbindungen;
- die Anzahl der aktiven Prozesse, die vom Webserver verwaltet werden (einschließlich externer CGI, SCGI, FCGI -Programme);
- das Hardware- und Software Einschränkungen oder Einstellungen der OS von den Computer (en), auf denen der Webserver ausgeführt wird;
- Andere kleinere Bedingungen.
Benchmarking
Die Leistungen eines Webservers sind in der Regel Benchmarked Durch die Verwendung eines oder mehrerer der verfügbarenAutomatisierte Tools für Lasttests.
Lastgrenzen
Ein Webserver (Programminstallation) hat normalerweise vordefiniert Lastgrenzen für jede Kombination von BetriebsbedingungenAuch weil es durch Betriebssystemressourcen begrenzt ist und nur eine begrenzte Anzahl von gleichzeitigen Client -Verbindungen verarbeiten kann (normalerweise zwischen 2 und mehreren Zehntausenden für jeden aktiven Webserverprozess, siehe auch die C10K -Problem und die C10m -Problem).
Wenn ein Webserver nahe oder über seine Lastgrenzen liegt überladen und so kann es werden nicht reagierend.
Ursachen der Überlastung
Webserver können jederzeit aufgrund einer oder mehrerer der folgenden Ursachen (z. B.) überladen werden.
- Überschüssiger legitimer Webverkehr. Tausende oder sogar Millionen von Kunden, die sich in kurzer Zeit mit der Website verbinden, z. B., z. B., Slashdot -Effekt.
- Verteilte Denial -of -Service Anschläge. Ein Denial-of-Service-Angriff (DOS-Angriff) oder eine verteilte Denial-of-Service-Angriff (DDOS-Angriff) ist ein Versuch, eine Computer- oder Netzwerkressource für seine beabsichtigten Benutzer nicht verfügbar zu machen.
- Computerwürmer Das verursacht manchmal einen abnormalen Verkehr aufgrund von Millionen von infizierten Computern (nicht unter ihnen koordiniert).
- XSS -Würmer Kann aufgrund von Millionen von infizierten Browsern oder Webservern einen hohen Verkehr verursachen.
- Internet -Bots Datenverkehr nicht gefiltert/begrenzt auf großen Websites mit sehr wenigen Netzwerkressourcen (z. Bandbreite) und/oder Hardwareressourcen (CPUs, RAM, Festplatten).
- Internet (Netzwerk) Verlangsamungen (z. B. aufgrund von Paketverlusten), so dass Clientanfragen langsamer werden und die Anzahl der Verbindungen so stark zunimmt, dass Servergrenzwerte erreicht werden.
- Webserver, dynamischen Inhalt servieren, Warten auf langsame Antworten von kommen von Back-End Computers) (z.B. Datenbanken), vielleicht wegen zu vielen Abfragen, gemischt mit zu vielen Einfügen oder Aktualisierungen von DB -Daten; In diesen Fällen müssen Webserver auf Back-End-Datenantworten warten, bevor sie auf HTTP-Clients antworten. Während dieser Waiten kommen jedoch zu viele neue Client-Verbindungen / -anforderungen ein und werden so überlastet.
- Webserver (Computers) teilweise Nichtverfügbarkeit. Dies kann aufgrund der erforderlichen oder dringenden Wartung oder Upgrade, Hardware- oder Softwarefehler wie z. Back-End (z.B. Datenbank) Fehler; In diesen Fällen können die verbleibenden Webserver zu viel Verkehr erhalten und überladen werden.
Symptome einer Überlastung
Die Symptome eines überladenen Webservers sind normalerweise die folgenden (z. B.).
- Die Anfragen werden mit (möglicherweise langen) Verzögerungen (von 1 Sekunden auf einige hundert Sekunden) bedient.
- Der Webserver gibt eine zurück HTTP -Fehlercode, wie 500, 502,[51][52] 503,[53] 504,[54] 408 oder sogar eine zeitweise 404.
- Der Webserver lehnt (Interrupts) ab oder lehnt es zurück (Interrupts) TCP Verbindungen, bevor es Inhalte zurückgibt.
- In sehr seltenen Fällen gibt der Webserver nur einen Teil des angeforderten Inhalts zurück. Dieses Verhalten kann als als betrachtet werden Insekt, auch wenn es normalerweise als Symptom einer Überlastung auftritt.
Anti-Überladungs-Techniken
Um überdurchschnittliche Lastgrenzen teilweise zu überwinden und Überlast zu verhindern, verwenden die meisten beliebten Websites gemeinsame Techniken wie die folgenden (z. B.).
- Tuning -Betriebssystemparameter für Hardwarefunktionen und -nutzung.
- Tuning -Webserver -Parameter zur Verbesserung ihrer Sicherheit und Leistungen.
- Bereitstellung Webcache Techniken (nicht nur für statische Inhalte, sondern auch für dynamische Inhalte).
- Verwalten des Netzwerkverkehrs durch Verwendung:
- Firewalls unerwünschten Verkehr aus schlechten IP -Quellen zu blockieren oder schlechte Muster zu haben;
- HTTP -Verkehrsmanager, um Anfragen zu fallen, umzuleiten oder neu zu schreiben Http Muster;
- Bandbreitenmanagement und VerkehrsformungUm die Spitzen in der Netzwerkverwendung zu glätten.
- Verwenden von unterschiedlich Domain Namen, IP -Adressen und Computer, die unterschiedliche Arten (statisch und dynamisch) des Inhalts bedienen; Das Ziel ist zu getrennt große oder riesige Dateien (
Download.*
) (Diese Domäne kann auch durch a ersetzt werden CDN) aus kleinen und mittelgroßen Dateien (statisch.*
) und von der wichtigsten dynamischen Website (möglicherweise wo einige Inhalte in a gespeichert sind Backend -Datenbank) (www.*
); the idea is to be able to efficiently serve big or huge (over 10 – 1000 MB) files (maybe throttling downloads) and to fully Zwischenspeicher small and medium-sized files, without affecting performances of dynamic site under heavy load, by using different settings for each (group) of web server computers, e.g.:https://download.example.com
https://static.example.com
https://www.example.com
- Using many web servers (computers) that are grouped together behind a Lastenausgleicher so that they act or are seen as one big web server.
- Adding more hardware resources (i.e. RAM, schnell Scheiben) to each computer.
- Using more efficient computer programs for web servers (see also: software efficiency).
- Using the most efficient Webserver -Gateway -Schnittstelle to process dynamic requests (spawning one or more external programs every time a dynamic page is retrieved, kills performances).
- Using other programming techniques and workarounds, especially if dynamic content is involved, to speed up the HTTP responses (i.e. by avoiding dynamic calls to retrieve objects, such as style sheets, images and scripts), that never change or change very rarely, by copying that content to static files once and then keeping them synchronized with dynamic content).
- Using latest efficient versions of Http (e.g. beyond using common HTTP/1.1 also by enabling Http/2 und vielleicht Http/3 too, whenever available web server software has reliable support for the latter two protocols) in order to reduce a lot the number of TCP/IP connections started by each client and the size of data exchanged (because of more compact HTTP headers representation and maybe data Kompression).
Caveats about using HTTP/2 and HTTP/3 protocols
Even if newer HTTP (2 and 3) protocols usually generate less network traffic for each request / response data, they may require more OS resources (i.e. RAM and CPU) used by web server software (because of encrypted data, lots of stream buffers and other implementation details); besides this, HTTP/2 and maybe HTTP/3 too, depending also on settings of web server and client program, may not be the best options for data upload of big or huge files at very high speed because their data streams are optimized for concurrency of requests and so, in many cases, using HTTP/1.1 TCP/IP connections may lead to better results / higher upload speeds (your mileage may vary).[55][56]
Below are the latest statistics of the market share of all sites of the top web servers on the Internet by Netcraft.
Datum | nginx (Nginx, Inc.) | Apache (Asf)) | OpenResty (OpenResty Software Foundation) | Cloudflare Server (Cloudflare, Inc.)) | Iis (Microsoft)) | GWS (Google)) | Andere |
---|---|---|---|---|---|---|---|
Oktober 2021[57] | 34,95% | 24,63% | 6,45% | 4,87% | 4.00% (*) | 4.00% (*) | Less than 22% |
Februar 2021[58] | 34.54% | 26.32% | 6,36% | 5,0% | 6,5% | 3.90% | Less than 18% |
Februar 2020[59] | 36.48% | 24,5% | 4,00% | 3,0% | 14.21% | 3,18% | Less than 15 % |
Februar 2019[60] | 25.34% | 26.16% | N / A | N / A | 28.42% | 1,66% | Less than 19% |
February 2018[61] | 24,32% | 27.45% | N / A | N / A | 34.50% | 1,20% | Less than 13% |
Februar 2017[62] | 19.42% | 20.89% | N / A | N / A | 43,16% | 1,03% | Less than 15% |
Februar 2016[63] | 16.61% | 32.80% | N / A | N / A | 29.83% | 2.21% | Less than 19% |
NOTE: (*) percentage rounded to integer number, because its decimal values are not publicly reported by source page (only its rounded value is reported in graph).
Siehe auch
- Server (Computing)
- Anwendungsserver
- Vergleich der Webserver -Software
- HTTP -Server (core part of a web server program that serves HTTP requests)
- HTTP -Komprimierung
- Internetanwendung
- Open source web application
- Liste der AMP -Pakete
- Variantenobjekt
- Virtuelles Hosting
- Webhosting -Dienst
- Webcontainer
- Web-Proxy
- Internetservice
Standard Web Server Gateway Interfaces used for dynamic contents:
- CGI Gemeinsame Gateway -Schnittstelle
- Scgi Einfache gemeinsame Gateway -Schnittstelle
- Fastcgi Fast Common Gateway Interface
A few other Web Server Interfaces (server or Programmiersprache specific) used for dynamic contents:
- SSI Server Side Includes, rarely used, static HTML documents containing SSI directives are interpreted by server software to include small dynamic data on the fly when pages are served, e.g. date and time, other static file contents, etc.
- SAPI Server Application Programming Interface:
- PSGI Perl Web Server Gateway -Schnittstelle
- WSGI Python Web Server Gateway Interface
- Gestell Rack Web Server Gateway Interface
- JSGI JavaScript Web Server Gateway Interface
- Java Servlet, Javaserverseiten
- Aktive Server-Seiten, ASP.NET
Verweise
- ^ a b c Nancy J. Yeager; Robert E. McGrath (1996). Web Server Technology. ISBN 1-55860-376-X. Abgerufen 22. Januar 2021.
- ^ William Nelson; Arvind Srinivasan; Murthy Chintalapati (2009). Sun Web Server: The Essential Guide. ISBN 978-0-13-712892-1. Abgerufen 14. Oktober 2021.
- ^ Zolfagharifard, Ellie (24 November 2018). "'Father of the web' Sir Tim Berners-Lee on his plan to fight fake news". Der Telegraph. London. ISSN 0307-1235. Archiviert Aus dem Original am 11. Januar 2022. Abgerufen 1. Februar 2019.
- ^ "History of Computers and Computing, Internet, Birth, The World Wide Web of Tim Berners-Lee". history-computer.com. Abgerufen 1. Februar 2019.
- ^ a b c Tim Berner-Lee (1992). "WWW Project History (original)". CERN (World Wide Web project). Abgerufen 20. Dezember 2021.
- ^ a b Tim Berner-Lee (20 August 1991). "WorldWideWeb wide-area hypertext app available (announcement)". CERN (World Wide Web project). Abgerufen 16. Oktober 2021.
- ^ a b Web Administrator. "Web History". CERN (World Wide Web project). Abgerufen 16. Oktober 2021.
- ^ Tim Berner-Lee (2 August 1991). "Qualifiers on hypertext links ..." CERN (World Wide Web project). Abgerufen 16. Oktober 2021.
- ^ Ali Mesbah (2009). Analysis and Testing of Ajax-based Single-page Web Applications. ISBN 978-90-79982-02-8. Abgerufen 18. Dezember 2021.
- ^ a b Robert H'obbes' Zakon. "Hobbes' Internet Timeline v5.1 (WWW Growth) NOTE: till 1996 number of web servers = number of web sites". ISOC. Archived from the original on 15 August 2000. Abgerufen 18. Dezember 2021.
{{}}
: CS1 Wartung: Ungeeignete URL (Link) - ^ Tim Smith; François Flückiger. "Licensing the Web". CERN (World Wide Web project). Abgerufen 16. Oktober 2021.
- ^ "NCSA httpd". NCSA (web archive). Archiviert von das Original am 1. August 2010. Abgerufen 16. Dezember 2021.
- ^ "About the Apache HTTPd server: How Apache Came to be". Apache: HTTPd server project. 1997. Abgerufen 17. Dezember 2021.
- ^ "Web Server Survey, NOTE: number of active web sites in year 2000 has been interpolated". Netcraft. Abgerufen 27. Dezember 2021.
- ^ "Netcraft: Web Server Software (1996)". NETCRAFT (Webarchiv). Archiviert von das Original Am 30. Dezember 1996. Abgerufen 16. Dezember 2021.
- ^ "Überblick über neue Funktionen in Apache 2.2". Apache: HTTPD Server -Projekt. 2005. Abgerufen 16. Dezember 2021.
- ^ "Überblick über neue Funktionen in Apache 2.4". Apache: HTTPD Server -Projekt. 2012. Abgerufen 16. Dezember 2021.
- ^ "Verbindungen, anhaltende Verbindungen: Praktische Überlegungen". RFC 2616, Hypertext Transfer Protocol - HTTP/1.1. S. 46–47. Sek. 8.1.4. doi:10.17487/rfc2616. RFC 2616.
- ^ "Maximale gleichzeitige Verbindungen zur gleichen Domäne für Browser". 2017. Abgerufen 21. Dezember 2021.
- ^ "Linux Web Server Performance Benchmark - 2016 Ergebnisse". RootUsers. Abgerufen 22. Dezember 2021.
- ^ a b "Wird HTTP/2 HTTP/1.x ersetzen?". IETF HTTP Arbeitsgruppe. Abgerufen 22. Dezember 2021.
- ^ a b "Implementierungen von HTTP/2 in Client- und Server -Software". IETF HTTP Arbeitsgruppe. Abgerufen 22. Dezember 2021.
- ^ "Warum nur eine TCP -Verbindung?". IETF HTTP Arbeitsgruppe. Abgerufen 22. Dezember 2021.
- ^ a b "Client/Server Messaging". RFC 7230, HTTP/1.1: Nachrichtensyntax und Routing. S. 7–8. Sek. 2.1. doi:10.17487/rfc7230. RFC 7230.
- ^ a b "Umgang mit unvollständigen Nachrichten". RFC 7230, HTTP/1.1: Nachrichtensyntax und Routing. p. 34. Sek. 3.4. doi:10.17487/rfc7230. RFC 7230.
- ^ "Robustheit analysieren". RFC 7230, HTTP/1.1: Nachrichtensyntax und Routing. S. 34–35. Sek. 3.5. doi:10.17487/rfc7230. RFC 7230.
- ^ R. Bowen (29. September 2002). "URL -Mapping" (PDF). Apache Software Foundation. Abgerufen 15. November 2021.
- ^ a b c d e "Zuordnen von URLs an Dateisystempositionen". Apache: HTTPD Server -Projekt. 2021. Abgerufen 19. Oktober 2021.
- ^ "Dynamischer Inhalt mit CGI". Apache: HTTPD Server -Projekt. 2021. Abgerufen 19. Oktober 2021.
- ^ Chris Shiflett (2003). HTTP -Entwicklerhandbuch. Sams 'Veröffentlichung. ISBN 0-672-32454-7. Abgerufen 9. Dezember 2021.
- ^ a b c ASF Infrabot (22. Mai 2019). "Verzeichnislisten". Apache Foundation: HTTPD Server -Projekt. Abgerufen 16. November 2021.
- ^ "Apache: Verzeichnisauflistung zum Herunterladen von Dateien". Apache: HTTPD -Server. Abgerufen 16. Dezember 2021.
- ^ "Client -Fehler 4xx". RFC 7231, HTTP/1.1: Semantik und Inhalt. p. 58. Sec. 6.5. doi:10.17487/rfc7231. RFC 7231.
- ^ "Server -Fehler 5xx". RFC 7231, HTTP/1.1: Semantik und Inhalt. S. 62-63. Sek. 6.6. doi:10.17487/rfc7231. RFC 7231.
- ^ "Einführung". RFC 7235, HTTP/1.1: Authentifizierung. p. 3. Sek. 1. doi:10.17487/rfc7235. RFC 7235.
- ^ a b "Antwortstatuscodes: Umleitung 3xx". RFC 7231, HTTP/1.1: Semantik und Inhalt. S. 53–54. Sek. 6.4. doi:10.17487/rfc7231. RFC 7231.
- ^ "Erfolgreich 2xx". RFC 7231, HTTP/1.1: Semantik und Inhalt. S. 51-54. Sek. 6.3. doi:10.17487/rfc7231. RFC 7231.
- ^ "Caching Guide". Apache: HTTPD Server -Projekt. 2021. Abgerufen 9. Dezember 2021.
- ^ "Nginx -Inhaltsdaching". F5 nginx. 2021. Abgerufen 9. Dezember 2021.
- ^ Evangelos P. Markatos (1996). "Hauptspeicherdachung von Webdokumenten". Computernetzwerke und ISDN -Systeme. Abgerufen 9. Dezember 2021.
- ^ B.V. Pawar; J.B. Patil (23. September 2010). "Ein neuer intelligenter prädiktiver Caching -Algorithmus für Internet -Webserver". Orientalischer Journal für Informatik und Technologie. Abgerufen 9. Dezember 2021.
- ^ "IPLANET Web Server 7.0.9: Datei-Cache". Orakel. 2010. Abgerufen 9. Dezember 2021.
- ^ "Apache Modul mod_file_cache". Apache: HTTPD Server -Projekt. 2021. Abgerufen 9. Dezember 2021.
- ^ "HTTP -Server: Konfiguration: Dateicache". GNU. 2021. Abgerufen 9. Dezember 2021.
- ^ "Apache Modul mod_cache_disk". Apache: HTTPD Server -Projekt. 2021. Abgerufen 9. Dezember 2021.
- ^ "Was ist dynamischer Cache?". Bildung. 2021. Abgerufen 9. Dezember 2021.
- ^ "Dynamisches Cache Option Tutorial". SiteGround. 2021. Abgerufen 9. Dezember 2021.
- ^ Arun Iyengar; Jim Challenger (2000). "Verbesserung der Leistung des Webservers durch Zwischenspeichern dynamischer Daten" (PDF). Usenix. Abgerufen 9. Dezember 2021.
- ^ Omid H. Jader; Subhi R. M. Zeebaree; Rizgar R. Zebari (12. Dezember 2019). "Eine hochmoderne Umfrage zur Messung von Webserverleistung und Lastausgleichsmechanismen" (PDF). IJSTR: Internationales Journal of Scientific & Technology Research. Abgerufen 4. November 2021.
- ^ Jussara M. Almeida; Virgilio Almeida; David J. Yates (7. Juli 1997). "WebMonitor: Ein Tool zur Messung der Leistung der World Wide Web Server". Erster Montag. Abgerufen 4. November 2021.
- ^ Fisher, Tim; Lebenswire. "Einen 502 Bad Gateway -Fehler bekommen? Hier ist, was zu tun ist". Lebenswire. Abgerufen 1. Februar 2019.
- ^ "Was ist ein 502 schlechtes Gateway und wie repariert man es?". Es pro. Abgerufen 1. Februar 2019.
- ^ Fisher, Tim; Lebenswire. "Ein nicht verfügbarer Fehler 503 -Dienst? Hier ist, was zu tun ist". Lebenswire. Abgerufen 1. Februar 2019.
- ^ Fisher, Tim; Lebenswire. "Einen 504 -Gateway -Timeout -Fehler erhalten? Hier ist, was zu tun ist". Lebenswire. Abgerufen 1. Februar 2019.
- ^ Viele (24. Januar 2021). "Verlangsamen Uploads mit HTTP/2". Github. Abgerufen 15. November 2021.
- ^ Junho Choi (24. August 2020). "Lieferung von HTTP/2 -Upload -Geschwindigkeitsverbesserungen". Wolkenflare. Abgerufen 15. November 2021.
- ^ "Oktober 2021 Web Server -Umfrage". Netcraft.
- ^ "Februar 2021 Web Server Survey". Netcraft.
- ^ "Februar 2020 Web Server Survey". Netcraft.
- ^ "Februar 2019 Web Server Survey". Netcraft.
- ^ "Februar 2018 Web Server Survey". Netcraft.
- ^ "Februar 2017 Web Server Survey". Netcraft.
- ^ "Februar 2016 Web Server Survey". Netcraft.