HTTP協議使Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫,是用於萬維網服務器與本地瀏覽器之間傳輸超文本的傳送協議。html
HTTP是一個屬於應用層的面向對象的協議,因爲其簡捷、快速的方式,適用於分佈式超媒體信息系統。它於1990年提出,通過幾年的使用與發展,獲得不斷的完善和擴展。HTTP協議工做於客戶端-服務端架構上。瀏覽器做爲HTTP客戶端經過URL向HTTP服務端即WEB服務器發送全部請求。wen服務器根據接收到的請求後,向客戶端發送響應信息。web
1.基於TCP/IP瀏覽器
http協議是基於tcp/ip協議之上的應用層協議;服務器
2.基於請求-響應模式cookie
http協議規定,請求從客戶端發出,最後服務器端響應該請求並返回。換句話說,確定是先從客戶端開始創建通訊的,服務器端在沒有接受到請求以前不會發送響應。架構
3.無狀態保存less
HTTP是一種不保存狀態,即無狀態(stateless)協議。HTTP協議自身不對請求和響應之間的通訊狀態進行保存。也就是說在HTTP這個級別,協議對於發送過的請求或響應都不作持久化處理。socket
使用HTTP協議,每當有新的請求發送時,就會有對應的新響應產生。協議自己並不保留以前一切的請求或響應報文的信息。這是爲了更快地處理大量事務,確保協議的可伸縮性,而特地把HTTP協議設計成如此簡單的。但是,隨着web的不斷髮展,因無狀態而致使業務處理變的棘手的狀況增多了。好比,用戶登陸到宜家購物網站,即便他跳轉到該站的,其餘頁面後,也須要能繼續保持登陸狀態。針對這個實例,網站爲了可以掌握是誰送出的請求,須要保存用戶的狀態,HTTP/1.1雖然是無狀態協議,但爲了實現指望的保持狀態功能,因而引入了cookie技術,有了cookie再用HTTP協議通訊,就能夠管理狀態,有關cookie詳細內容稍後講解。tcp
4.無鏈接分佈式
無鏈接的含義是限制每次鏈接只處理一個請求。服務器處理完客戶的請求,並收到客戶的應答後,即斷開鏈接。採用這種方式能夠節省傳輸時間。
http協議包含有瀏覽器發送數據到服務器須要遵循的請求協議與服務器發送數據到瀏覽器須要遵循的響應協議。用於http協議交互的信被稱爲http報文。請求端(客戶端)的http報文作請求報文,響應端(服務器端)的作響應報文,http報文自己是由多行數據構成的字、文本。
1.請求協議
請求格式:
請求首行 請求方式 url(路徑?get請求參數) 協議/版本號
請求頭 key:value
請求體 數據(只有post請求才會有請求體)
請求方式:get與post請求
2.響應協議
響應格式
響應首行 協議/版本號 狀態碼 狀態碼譯文
響應頭 Content-Type:text/html
響應體 <h1>Hello, luffycity!</h1>
狀態碼的值是當客戶端向服務器端發送請求時, 返回的請求 結果。藉助狀態碼,用戶能夠知道服務器端是正常 理了請求,仍是出 現了 。狀態碼如200 OK,以3位數字和緣由 成。數字中的 一位指定了響應 別,後兩位無分 。響應 別有以5種。
演示示例
import socket sock=socket.socket() sock.bind(("127.0.0.1",8808)) sock.listen(5) while 1: print("server waiting.....") conn,addr=sock.accept() data=conn.recv(1024) print("data",data) # 讀取html文件 with open("login.html","rb") as f: data=f.read() conn.send((b"HTTP/1.1 200 OK\r\n\r\n%s"%data)) conn.close()
login.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="" method="post"> 用戶名 <input type="text" name="user"> 密碼 <input type="password" name="pwd"> <input type="submit"> </form> </body> </html>