Django之HTTP協議

Django之HTTP協議

1、HTTP協議簡介

HTTP協議是Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫,是用於萬維網(WWW : World Wide Web)服務器與本地瀏覽器之間傳輸超文本的傳送協議。html

HTTP是一個屬於應用層的面向對象的協議,因爲其簡捷、快速的方式,適用於分佈式超媒體信息系統。它於1990年提出,通過幾年的使用與發展,獲得不斷地完善和擴展。python

HTTP協議工做與客戶端-服務端架構上。瀏覽器做爲HTTP客戶端經過URL向HTTP服務端即web服務器發送全部請求。web服務器根據接收到的請求後,想客戶端發送響應信息。web

2、HTTP協議特色

一、基於TCP/IPdjango

HTTP協議是基於TCP/IP協議之上的應用層協議。瀏覽器

二、基於請求 - 響應模式服務器

HTTP協議規定,請求從客戶端發出,最後服務器端響應該請求並返回。換句話說,確定是先從客戶端開始創建通訊的,服務器端再沒有接收到請求以前不會發送響應。架構

三、無狀態保存less

HTTP是一種不保存狀態,即無狀態(stateless)協議。HTTP協議自身不對請求和響應之間的通訊狀態進行保存。也就是說再HTTP這個級別,協議對於發送過的請求或響應都不作持久化處理。socket

使用HTTP協議,每當有新的請求發送時,就會有對應的新響應產生。協議本事並不保留以前一切的請求或響應報文的信息,這是爲了更快地處理大量事務,確保協議的可伸縮性,而特地把HTTP協議設計成如此簡單的。但是,隨着web的不斷髮展,因無狀態而致使業務處理變得棘手的狀況增多了。好比,用戶登陸到一家購物網站,即便他跳轉到該站的其它頁面後,也須要能繼續保持登陸狀態。針對這個實例,網站爲了可以掌握時誰送出的請求,須要保存用戶的狀態。HTTP/1.1雖然時無狀態協議,可是爲了實現指望的保存狀態功能,因而引入了Cookie技術。有了Cookie再用HTTP協議通訊,就能夠管理狀態了。有關Cookie的詳細內容稍後講解。分佈式

四、無鏈接

無鏈接的含義是限制每次鏈接只處理一個請求。服務器處理完客戶的請求,並接收到客戶的應答後,即斷開鏈接。採用這種方式能夠節省傳輸時間。

3、HTTP請求協議與響應協議

HTTP協議包含由瀏覽器發送數據到服務器須要遵循的請求協議與服務器發送數據到瀏覽器須要遵循的請求協議。用與HTTP協議交互的信被稱爲HTTP報文。請求端(客戶端)的HTTP報文做爲請求報文,響應端(服務器端)的做爲響應報文。HTTP報文自己是由多行數據構成的文本。

一、請求協議

請求格式:

請求方式:get與post請求

  • get提交的數據會放在URL以後,以?分割URL和傳輸數據,參數之間以&相連,如EditBook?name=test1&id=123456。post方法是把提交的數據放在HTTP包的請求體中。
  • get提交的數據大小有限制(由於瀏覽器對URL的長度有限制),而post方法提交的數據沒有限制。
  • get與post請求在服務端獲取請求數據方式不一樣。

二、響應協議

響應格式:

響應狀態碼:

狀態碼的值是當客戶端向服務器端發送請求時,返回的請求結果。藉助狀態碼,用戶能夠知道服務器端始找正常處理了請求,仍是出現了錯誤。狀態碼,如200 OK,以3位數字和緣由組成。數字中的一位指定了響應類別,後兩位無分別。響應狀態碼有5種。

演示示例:

import socket

sock=socket.socket()
sock.bind(("127.0.0.1",8808))
sock.listen(5)

while True:
    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>
相關文章
相關標籤/搜索