
Projekt entwickelt in 1337 Khouribga Coding School.
Autoren: @jamiafathiya & @achrafelkhnissi & @Abellaismail7
HTTP steht für Hypertext -Transferprotokoll, ein Protokoll, das zum Übertragen von Hypertext verwendet wird. Dies wirft zwei Fragen auf: Was ist ein Protokoll und was ist Hypertext? In diesem Zusammenhang ist ein Protokoll ein Regelnystem, das die Kommunikation von Informationen zwischen verschiedenen Entitäten wie Computern ermöglicht. Hypertext ist ein veralteter Begriff für Text, der auf einem Computerbildschirm angezeigt wird, der Hyperlinks zu einem anderen Text, dh Webdokumenten, enthält. Daher bezieht sich das Hypertext -Transferprotokoll auf die Reihe von Regeln, Servern und Browsern, mit denen Webdokumente hin und her übertragen werden.
HTTP erlaubt Sitzungen, und gespeicherte Zustände werden zwischen Browser und Server geteilt. Wenn ein Besucher eine Fotogalerie surft, können Browser und Server Informationen über den Standort des Besuchers in der Sequenz austauschen, indem sie Informationen in Form von Cookies hin und her übergeben. Wenn die Seite neu geladen wird, sendet der Browser einen Cookie an den Server, der die letzte besuchte Position angibt, sodass der Betrachter von diesem Punkt wieder aufgenommen werden kann. Dies bedeutet, dass HTTP zwar staatslos ist, es jedoch nicht auf Sitzung ist.
| Begriff | Definition |
|---|---|
| Browser | Eine Anwendung, die zum Zugriff und zur Navigation zwischen HTML -Dokumenten verwendet wird. |
| Benutzeragent | Eine Anwendung, die im Namen des Benutzers, in der Regel ein Browser, wirkt. |
| TCP | Kurz gesagt, ein Protokoll für das Übertragungsregelung, eines der wichtigsten Internetprotokolle, die von World Wide Web, E -Mail, FTP und Remote -Administration verwendet werden. |
| IP | Kurz für das Internetprotokoll. IP wird verwendet, um Daten zwischen Computern über ein Netzwerk zu übertragen. Jedes Gerät, das mit dem Internet verbunden ist, verfügt über eine IP -Adresse. |
| URL | Kurz gesagt, für den Uniform Resource Locator, eine Adresse, die auf eine Ressource im Web zeigt. |
| DNS | Kurz gesagt, Domain Name Server. DNS katalogisiert alle Domain -Namen -URLs und verweist sie auf die IP -Adressen von Servern. |
| Ressource | Die Datei oder Dateien, die auf einem Server verfügbar sind, wenn Sie einer URL folgen. |
| Server | Ein Computer im Internet, der eine Form der Datenspeicherung und der Freigabe von Anwendungen ausführt, am häufigsten einer Webserveranwendung. |
| Proxy | Software- oder Hardware -Dienst fungiert als mittlere Person zwischen Clients und Servern. |
| Anfrage-Response-Paare | Clients und Server kommunizieren über HTTP mithilfe von Request-Response-Paaren. Eine Anfrage wird gesendet und eine Antwort zurückgegeben. |
| Kopfball | Anfragen und Antworten verwenden HTTP -Header, um Informationen hin und her zu übergeben. |
| HTTP -Anforderungsmethode/Verb | Jede HTTP -Anforderung enthält eine Methode, die auch als Verb bezeichnet wird und die erklärt, welche Aktion der Absender auf der Ressource ausführen möchte (z. B. Get, Put, Löschen). |
| Statusantwortcode | Ein numerischer Code im Bereich von 100 bis 500, der beschreibt, welche Art von Antwort der Server an den Client zurückgesendet wird. |
| Cache | Eine Methode zum Speichern von Daten auf dem Client oder auf dem Server, um die Leistung zu beschleunigen. |
| Staatellos | HTTP ist staatenlos, was bedeutet, dass jede Anfrage und Antwort eindeutig ist und kein Staat gespeichert wird. |
| Plätzchen | Eine Reihe von Daten, die zwischen dem Client und dem Server übergeben werden, um eine statentulierte Sitzung zu erstellen. |
| Sitzung | Kunden und Server können Informationen über Staaten austauschen, indem sie Informationen hin und her übergeben und eine Sitzung erstellen. |


| Verfahren | Beschreibung | Erfolg | Versagen |
|---|---|---|---|
| ERHALTEN | Erhalten Sie die angegebene Ressource, falls verfügbar | 200 OK | 404 nicht gefunden |
| POST | Erstellen Sie eine neue Ressource und fügen Sie sie einer Sammlung hinzu | 201 erstellt | 401 nicht autorisiert, 409 Konflikt, 404 nicht gefunden |
| SETZEN | Aktualisieren Sie eine vorhandene Singleton-Ressourcenbasierte oder ID | 200 OK | 401 nicht autorisiert, 404 nicht gefunden, 405 Methode nicht zulässig |
| Patch | Ändern Sie eine vorhandene Singleton-Ressourcenbasierte oder ID | 200 OK | 401 nicht autorisiert, 404 nicht gefunden, 405 Methode nicht zulässig |
| LÖSCHEN | Löschen Sie Singleton Ressourcenbasierte oder ID (Sie können keine Sammlung von Ressourcen löschen). | 200 OK | 401 nicht autorisiert, 404 nicht gefunden |
| OPTION | Erhalten Sie die verfügbaren Optionen aus dieser Ressource | 200 OK | - - |
| KOPF | Holen Sie sich nur die Reaktionsüberschriften aus der Ressource | 200 OK | 404 nicht gefunden |
Dieser Abschnitt enthält die Beschreibung der erforderlichen Funktionen zum Erstellen eines Webservers.
int getaddrinfo ( const char *node, const char *service, const struct addrinfo *hints, struct addrinfo **res); node : Der Hostname oder die IP -Adresse des Servers.
node NULL ist, wird die IP -Adresse des lokalen Hosts verwendet. service : Die Portnummer des Servers.
service NULL ist, wird die Standardportnummer für den in hints angeforderten Dienst verwendet. hints : Ein Zeiger auf ein struct addrinfo , der Kriterien für die Auswahl der in der Liste zurückgegebenen Sockeladressstrukturen angibt, auf die res angezeigt wird.
hints NULL sind, enthält die zurückgegebene Liste Socket -Adressen für alle Socket -Typen, für alle Protokollfamilien, die von der Adressfamilie des angegebenen Knotens unterstützt werden, und für die Adresse des lokalen Hosts.struct addrinfo werden verwendet:ai_family : Die Adressfamilie. Die folgenden Konstanten sind für das Feld ai_family definiert:AF_INET : IPv4 -InternetprotokolleAF_INET6 : IPv6 -InternetprotokolleAF_UNIX : Lokale KommunikationAF_UNSPEC : nicht spezifiziertai_socktype : Der Socket -Typ. Die folgenden Konstanten sind für das Feld ai_socktype definiert:SOCK_STREAM : Bietet sequenzierte, zuverlässige, zweiwegs basierende Byte-Streams. Ein außergewöhnlicher Datenübertragungsmechanismus kann unterstützt werden.SOCK_DGRAM : Unterstützt Datagramme (verbindungslose, unzuverlässige Nachrichten einer festen maximalen Länge).SOCK_RAW : Bietet RAW -Netzwerkprotokollzugriff.SOCK_RDM : Bietet eine zuverlässige Datagrammschicht, die keine Bestellung garantiert.SOCK_SEQPACKET : Bietet eine sequenzierte Paketschicht, die keine Bestellung garantiert.ai_protocol : Das Protokoll für den Sockel. Die folgenden Konstanten sind für das Feld ai_protocol definiert:IPPROTO_TCP : TransmissionskontrollprotokollIPPROTO_UDP : User Datagram ProtocolIPPROTO_RAW : RAW -ProtokollschnittstelleIPPROTO_IP : InternetprotokollIPPROTO_ICMP : Internet -SteuermeldungsprotokollIPPROTO_IGMP : Internet Group Management ProtocolIPPROTO_IPV4 : Internet -Protokollversion 4IPPROTO_IPV6 : Internet -Protokollversion 6 res : Ein Zeiger auf eine verknüpfte Liste einer oder mehrerer struct addrinfo -Strukturen, die Antwortinformationen zum Host enthält.
Rückgabewert: Bei Erfolg wird Zero zurückgegeben. Bei Fehler wird -1 zurückgegeben und errno entsprechend festgelegt.
struct addrinfo :
struct addrinfo {
int ai_flags; // input flags
int ai_family; // socket protocol family
int ai_socktype; // socket type
int ai_protocol; // protocol for socket
socklen_t ai_addrlen; // socket address length
struct sockaddr *ai_addr; // socket address
char * ai_canonname; // service name
struct addrinfo *ai_next; // next item in the list
}; int socket ( int domain, int type, int protocol);domain : Die Kommunikationsdomäne, die die zu verwendende Kommunikationssemantik und die zu verwendende Protokollfamilie spezifiziert. Die folgenden Konstanten sind für das domain definiert:AF_INET : IPv4 -InternetprotokolleAF_INET6 : IPv6 -InternetprotokolleAF_UNIX : Lokale KommunikationAF_UNSPEC : nicht spezifizierttype : Die Kommunikationssemantik. Die folgenden Konstanten sind für das type -Argument definiert:SOCK_STREAM : Bietet sequenzierte, zuverlässige, zweiwegs basierende Byte-Streams. Ein außergewöhnlicher Datenübertragungsmechanismus kann unterstützt werden.SOCK_DGRAM : Unterstützt Datagramme (verbindungslose, unzuverlässige Nachrichten einer festen maximalen Länge).SOCK_RAW : Bietet RAW -Netzwerkprotokollzugriff.SOCK_RDM : Bietet eine zuverlässige Datagrammschicht, die keine Bestellung garantiert.SOCK_SEQPACKET : Bietet eine sequenzierte Paketschicht, die keine Bestellung garantiert.protocol : Das Protokoll, das mit der Steckdose verwendet werden soll. Normalerweise gibt es nur ein einzelnes Protokoll, um einen bestimmten Socket -Typ innerhalb einer bestimmten Protokollfamilie zu unterstützen. In diesem Fall kann protocol als 0 angegeben werden. Die folgenden Konstanten werden für das protocol definiert:IPPROTO_TCP : TransmissionskontrollprotokollIPPROTO_UDP : User Datagram ProtocolIPPROTO_SCTP : Stream Control Transmission ProtocolIPPROTO_TIPC : transparente Kommunikation mit Inter-ProzessIPPROTO_RAW : RAW IP -Paketeerrno entsprechend festgelegt. int bind ( int sockfd, const struct sockaddr *addr, socklen_t addrlen);sockfd : Der Dateideskriptor der zu gebundenen Socket.addr : Ein Zeiger auf eine sockaddr -Struktur, die die Adresse enthält, die an den Sockel gebunden ist. Die Länge und das Format der Adresse hängen von der Adressfamilie des Sockeles ab.addrlen : Die Größe in Bytes der Adressstruktur, auf die durch das addr -Argument hingewiesen wurde.errno entsprechend festgelegt. int listen ( int sockfd, int backlog);sockfd : Der Dateideskriptor des zu hörenen Sockets.backlog : Die maximale Länge, für die die Warteschlange ausstehender Verbindungen für sockfd wachsen kann.errno entsprechend festgelegt. int accept ( int sockfd, struct sockaddr *addr, socklen_t *addrlen);sockfd : Der Dateideskriptor des zu akzeptierenden Sockets.addr : Ein Zeiger auf eine sockaddr -Struktur. Diese Struktur wird mit der Adresse des Peer Socket gefüllt, wie der Kommunikationsschicht bekannt. Das genaue Format der zurückgegebenen ADDR wird durch die Adressfamilie des Sockets bestimmt. Wenn die zurückgegebene Adresse zu lang ist, um in die mitgelieferte sockaddr -Struktur zu passen, wird die Adresse abgeschnitten.addrlen : Ein Zeiger auf ein socklen_t -Objekt, das bei der Eingabe die Länge der gelieferten sockaddr -Struktur angibt, und die Ausgabe gibt die Länge der gespeicherten Adresse an.errno entsprechend festgelegt. ssize_t recv ( int sockfd, void *buf, size_t len, int flags);sockfd : Der Dateideskriptor des zu empfangenen Socket.buf : Ein Zeiger auf einen Puffer, in dem die Nachricht gespeichert werden soll.len : Die Länge in Bytes des Puffers zeigt durch das buf -Argument.flags : Gibt die Art des Nachrichtenempfangs an. Der Wert wird durch logischerweise oder null oder mehr der folgenden Werte gebildet:MSG_OOB : Verarbeiten Sie außerhalb des Bandes.MSG_PEEK : Peek auf eingehende Nachrichten.MSG_WAITALL : Warten Sie auf eine vollständige Anfrage, es sei denn, der Socket ist nicht blockiert.MSG_DONTWAIT : Aktiviert den nicht blockierenden Betrieb; Wenn die Operation blockieren würde, schlägt der Anruf mit dem Fehler EAGAIN oder EWOULDBLOCK fehl.MSG_NOSIGNAL : Generieren Sie keine SIGPIPE wenn Sie in ein Pfeif schreiben, ohne es zu lesen.recv() 0 zurückgegeben. Bei einem Fehler wird -1 zurückgegeben und errno wird angemessen eingestellt. ssize_t send ( int sockfd, const void *buf, size_t len, int flags);sockfd : Der Dateideskriptor des zu gesendeten Socket.buf : Ein Zeiger auf einen Puffer, der die zugesandte Nachricht enthält.len : Die Länge in Bytes der Nachricht, auf die das buf -Argument verweist.MSG_OOB : Verarbeiten Sie außerhalb des Bandes.MSG_DONTROUTE : Bypass -Routing, verwenden Sie die direkte Schnittstelle.MSG_DONTWAIT : Aktiviert den nicht blockierenden Betrieb; Wenn die Operation blockieren würde, schlägt der Anruf mit dem Fehler EAGAIN oder EWOULDBLOCK fehl.MSG_NOSIGNAL : Generieren Sie keine SIGPIPE wenn Sie in ein Pfeif schreiben, ohne es zu lesen.errno entsprechend festgelegt. Allgemein
HTTP -Anfrage
HTTP -Antwort
CGI
Stresstest