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.]
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.
Wir können den CRUD-Hinzufügungs-, Lösch-, Änderungs- und Abfragevorgängen der Datenbank entsprechen:
CREATE: PUT
READ: GET
UPDATE: POST
LÖSCHEN: LÖSCHEN
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...
Content-Type: text/html
Content-Type gibt den Inhalt der Antwort an, hier stellt text/html eine HTML-Webseite dar.
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.
Folgen wir Sinas Homepage, fassen wir den HTTP-Anfrageprozess zusammen:
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:
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.
2.HTTP-Format
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.
200 OK
Header1: Wert1
Header2: Wert2
Header3: Wert3
Körperdaten kommen hierher...
HTTP-Antwort, falls inklusive Körper, ebenfalls durch rnrn getrennt.
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
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()
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()
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!