Heim >Web-Frontend >HTML-Tutorial >Detaillierte Einführung in den Webserver

Detaillierte Einführung in den Webserver

PHP中文网
PHP中文网Original
2017-06-21 10:58:281840Durchsuche

1. Einführung in das HTTP-Protokoll

HTTP ist die Abkürzung für Hyper Text Transfer Protocol. Seine Entwicklung ist das Ergebnis der Zusammenarbeit zwischen dem World Wide Web Consortium und der Internet Engineering Task Force (IETF), die schließlich eine Reihe von RFCs 1945 veröffentlichte, die die HTTP/1.0-Version definieren. Das bekannteste davon ist RFC 2616. RFC 2616 definiert eine heute häufig verwendete Version – HTTP 1.1.

HTTP-Protokoll (HyperText Transfer Protocol, Hypertext Transfer Protocol) ist ein Übertragungsprotokoll, das zur Übertragung von Hypertext vom WWW-Server an den lokalen Browser verwendet wird. Es kann den Browser effizienter machen und die Netzwerkübertragung reduzieren. Es stellt nicht nur sicher, dass der Computer Hypertextdokumente korrekt und schnell überträgt, sondern bestimmt auch, welcher Teil des Dokuments übertragen wird und welcher Teil des Inhalts zuerst angezeigt wird (z. B. Text vor Grafiken) usw.

  • HTTP ist ein auf TCP/IP basierendes Kommunikationsprotokoll zur Übertragung von Daten (HTML-Dateien, Bilddateien, Abfrageergebnisse usw.).

  • HTTP ist ein Protokoll der Anwendungsschicht, das aus Anfragen und Antworten besteht und ein Standard-Client-Server-Modell ist.

  • HTTP ist ein zustandsloses Protokoll.

![Das Hochladen von Deep Understanding of HTTP Protocol.jpg ist fehlgeschlagen. Bitte versuchen Sie es erneut.]


HTTP-Protokoll ist immer der Client Initiieren Sie eine Anfrage und der Server sendet eine Antwort zurück.


Dies schränkt die Verwendung des HTTP-Protokolls ein und es ist für den Server unmöglich, Nachrichten an den Client zu senden, wenn der Client keine Anfrage initiiert.
Das HTTP-Protokoll ist ein zustandsloses Protokoll. Es gibt keine Übereinstimmung zwischen dieser Anfrage und der letzten Anfrage desselben Clients.

2.http-Protokollanalyse

1. Browser-Anfrage


http-Anfragemethode


Wir können den CRUD-Hinzufügungs-, Lösch-, Änderungs- und Abfragevorgängen der Datenbank entsprechen:

  1. CREATE: PUT

  2. READ: GET

  3. UPDATE: POST

  4. LÖSCHEN: LÖSCHEN

2. Serverantwort

HTTP-Antwortpunkte Für die beiden Teile: Header und Body (Body ist optional), lauten die wichtigsten Zeilen des Headers, die wir im Netzwerk sehen, wie folgt:
HTTP/1.1 200 OK
200 zeigt eine erfolgreiche Antwort an , und das folgende OK wird veranschaulicht.
Wenn 200 nicht zurückgegeben wird, gibt es oft andere Funktionen, wie zum Beispiel

  • Die fehlgeschlagene Antwort lautet 404 Nicht gefunden: Die Webseite existiert nicht

  • 500 Interner Serverfehler: Interner Serverfehler

  • ...etc...


HTTP-Statuscode.jpg


Content-Type: text/html
Content-Type gibt den Inhalt der Antwort an, hier stellt text/html eine HTML-Webseite dar.

3. Browser-Analyseprozess

Wenn der Browser den HTML-Quellcode von Sinas Homepage liest, analysiert er den HTML-Code, zeigt die Seite an und basiert dann auf den verschiedenen Links im HTML , Senden Sie eine HTTP-Anfrage an den Sina-Server, rufen Sie die entsprechenden Bilder, Videos, Flash, JavaScript-Skripte, CSS und andere Ressourcen ab und zeigen Sie schließlich eine vollständige Seite an.

3. Zusammenfassung

1. HTTP-Anfrageprozess

Folgen wir Sinas Homepage, fassen wir den HTTP-Anfrageprozess zusammen:

Schritt 1: Der Browser sendet zuerst eine HTTP-Anfrage an den Server. Die Anfrage umfasst:

Methode: GET oder POST, GET fordert nur Ressourcen an, POST wird von Benutzerdaten begleitet; Domänenname: Wird durch den Host-Header angegeben: Host: www.sina.com
und andere verwandte Header
Wenn es sich um POST handelt, enthält die Anfrage auch einen Text, einschließlich Benutzerdaten

Schritt 2: Server Gibt eine HTTP-Antwort an den Browser zurück. Die Antwort enthält:

Antwortcode: 200 bedeutet Erfolg, 3xx bedeutet Umleitung, 4xx bedeutet, dass in der vom Client gesendeten Anfrage ein Fehler vorliegt, und 5xx bedeutet ein Fehler ist während der serverseitigen Verarbeitung aufgetreten;
Antworttyp: angegeben durch Content-Type;

Normalerweise enthält die HTTP-Antwort den Inhalt Der Inhalt der Antwort und der HTML-Quellcode der Webseite befinden sich im Body .

Schritt 3: Wenn der Browser weiterhin andere Ressourcen vom Server anfordern muss, z. B. Bilder, stellen Sie eine weitere HTTP-Anfrage und wiederholen Sie die Schritte 1 und 2.

Das vom Web übernommene HTTP-Protokoll verwendet ein sehr einfaches Anforderungs-Antwort-Modell, was die Entwicklung erheblich vereinfacht. Wenn wir eine Seite schreiben, müssen wir nur den HTML-Code in der HTTP-Anfrage senden und müssen nicht darüber nachdenken, wie Bilder, Videos usw. angehängt werden. Wenn der Browser Bilder und Videos anfordern muss, sendet er eine weitere HTTP-Anfrage. Daher verarbeitet eine HTTP-Anfrage nur eine Ressource (dies kann im TCP-Protokoll als kurze Verbindung verstanden werden. Jeder Link erhält nur eine Ressource. Wenn Sie mehr benötigen, müssen Sie mehrere Links einrichten)
Das HTTP-Protokoll auch verfügt über eine starke Skalierbarkeit. Obwohl der Browser die Homepage anfordert, kann Sina Ressourcen von anderen Servern in HTML verknüpfen, z -orient/strip%7CimageView2/2/w/1240), wodurch der Anforderungsdruck auf verschiedene Server verteilt wird und eine Site mit anderen Sites verknüpft werden kann und unzählige Sites miteinander verknüpft werden und so das sogenannte World Wide Web bilden WWW.

2.HTTP-Format

Client-Anfrageinformationen
Server-Antwortnachricht
Jede HTTP-Anfrage und -Antwort folgt demselben Format: Header und Body, wobei der Body optional ist.
  • Das HTTP-Protokoll ist ein Textprotokoll, daher ist auch sein Format sehr einfach.
  • HTTP GET-Anforderungsformat:
  • GET /path HTTP/1.1

    Header1: Wert1
    Header2: Wert2
    Header3: Wert3
    Jeder Header besteht aus einer Zeile und das Zeilenumbruchzeichen ist rn oder Das Format der HTTP-POST-Anfrage mit os.linesep
    :
    POST /path HTTP/1.1
    Header1: Value1
    Header2: Value2
    Header3: Value3

    Body-Daten geht hier ...
    Wenn zwei aufeinanderfolgende RNS angetroffen werden, endet der Header-Teil und alle nachfolgenden Daten sind Body.

    HTTP-Antwortformat:

    200 OK
    Header1: Wert1
    Header2: Wert2
    Header3: Wert3

    Körperdaten kommen hierher...
    HTTP-Antwort, falls inklusive Körper, ebenfalls durch rnrn getrennt.

    Bitte beachten Sie noch einmal, dass der Datentyp des Body durch den Content-Type-Header bestimmt wird. Wenn es sich um eine Webseite handelt, handelt es sich beim Body um einen Text. Wenn es sich um ein Bild handelt, handelt es sich beim Body um die Binärdaten des Bildes.

    Wenn Content-Encoding vorhanden ist, werden die Body-Daten komprimiert. Die gebräuchlichste Komprimierungsmethode ist gzip. Wenn Sie Content-Encoding: gzip sehen, müssen Sie daher zuerst die Body-Daten dekomprimieren. Der Zweck der Komprimierung besteht darin, die Größe des Körpers zu reduzieren und die Netzwerkübertragung zu beschleunigen.

    4Web statischer Server

    1. Feste Seite anzeigen

import socketimport multiprocessingimport osimport timedef serverHandler(clientSocket, clientAddr):'与请求的客户端进行交互'# 接收客户端发来的消息
    recvData = clientSocket.recv(1024).decode('utf-8')
    print(recvData)# 服务端向客户端发消息,作为响应
    responseLine = 'HTTP/1.1 200 OK' + os.linesep
    responseHeader = 'Server: laowang' + os.linesep
    responseHeader += 'Date: %s' % time.ctime() + os.linesep
    responseBody = '差一点一米八'
    sendData = (responseLine + responseHeader + os.linesep + responseBody).encode('gbk')

    clientSocket.send(sendData)# 关闭
    clientSocket.close()def main():'程序入口'# socket对象
    serverSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 绑定的端口号,可以重复使用端口号#serverSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)# 绑定
    serverSocket.bind(('', 8000))# 监听
    serverSocket.listen()while True:# 接收
        clientSocket, clientAddr = serverSocket.accept()
        print(clientSocket)# 开一个新的进程,执行交互
        multiprocessing.Process(target=serverHandler, args=(clientSocket, clientAddr)).start()# 关闭客户端对象
        clientSocket.close()if __name__ == '__main__':
    main()
Client-Browserseite
2. Zeigen Sie die gewünschte Seite an

import time,multiprocessing,socket,os,re

G_PATH = './html'

def serveHandler(clientSocket,clientAddr):
    recvData = clientSocket.recv(1024).decode('gbk')
    lineFirst = recvData.splitlines()[0]
    strFirst = re.split(r' +',lineFirst)
    fileName = strFirst[1]

    filePath = G_PATHif '/'== fileName:
        filePath += './index.html'else:
        filePath += fileNametry:file = Nonefile =open(filePath,'r',encoding='gbk')
        responseBody = file.read()

        responseLine = 'HTTP/1.1 200 OK' + os.linesep
        responseHeader = 'Server: ererbai' + os.linesep
        responseHeader += 'Date:%s' % time.ctime() + os.linesep
    except FileNotFoundError:
        responseLine = 'HTTP/1.1 404 NOT FOUND' + os.linesep
        responseHeader = 'Server: ererbai' + os.linesep
        responseHeader += 'Date:%s' % time.ctime() + os.linesep
        responseBody = '很抱歉,服务器中找不到你想要的内容'
    except Exception:
        responseLine = 'HTTP/1.1 500 ERROR' + os.linesep
        responseHeader = 'Server: ererbai' + os.linesep
        responseHeader += 'Date: %s' % time.ctime() + os.linesep
        responseBody = '服务器正在维护中,请稍后再试。'finally:if file!=None and not file.closed:file.close()

        senData = (responseLine + responseHeader + os.linesep + responseBody).encode('gbk')
        clientSocket.send(senData)
        clientSocket.close()


def main():
    serveSocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    serveSocket.bind(('',8000))
    serveSocket.listen()while True:
        clientSocket,clientAddr = serveSocket.accept()
        print(clientSocket)
        multiprocessing.Process(target=serveHandler,args=(clientSocket,clientAddr)).start()
        clientSocket.close()if __name__ == '__main__':
    main()
Client-Browser-Homepage
Client-Browser biye.html-Seite


Wenn Sie während des Lernprozesses auf Probleme stoßen oder Lernressourcen erhalten möchten, können Sie gerne der Lernaustauschgruppe beitreten
343599877, lasst uns gemeinsam Frontend lernen!

Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in den Webserver. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn