1. 程式人生 > >01 Http協議

01 Http協議

hid visible 求和 類型 ins sid 短連接 top img

Django

1. Http協議特性

1.1 基於TCP/TP

HTTP協議是基於TCP/IP協議智商的應用層協議

1.2 基於請求-響應模式

HTTP協議規定,請求從客戶端發出,最後服務器端響應該請求並 返回。換句話說,肯定是先從客戶端開始建立通信的,服務器端在沒有 接收到請求之前不會發送響應

技術分享圖片

1.3 無狀態保存,短連接

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

1.4 無連接

無連接的含義是限制每次連接只處理一個請求。服務器處理完客戶的請求,並收到客戶的應答後,即斷開連接。采用這種方式可以節省傳輸時間。(與之對應的TCP鏈接)

2. HTTP請求協議和響應協議

HTTP協議包含:

  1. 由瀏覽器發送到服務器遵循的請求協議
  2. 服務器發送數據到瀏覽器遵循的相應協議
技術分享圖片

2.1 請求協議

2.1.1 請求格式
技術分享圖片
enter description here
2.1.2 請求方式:GET請求和POST請求
  1. GET請求
  • GET提交的數據會放在請求頭中,即URL之後,以?分割URL和傳輸數據,參數之間以&相連,如 EditBook?name=test1&id=123456
  • GET提交的數據大小有限制(因為瀏覽器對URL長度有限制)
  1. POST請求
  • POST數據一般放在HTTP包的請求體中,但是也可以放在請求頭中
  • POST提交數據沒有限制
  • GET與POST請求在服務端獲取數據方式不同

2.2 響應協議

2.2.1 響應格式
技術分享圖片
2.2.2 響應狀態碼

狀態碼是當客戶端向服務器端發送請求時, 返回的請求結果。借助狀態碼,用戶可以知道服務器端是正常處理了請求,還是出現異常了。例如狀態碼 200 OK,由三個十進制數字組成,第一個十進制數字定義了狀態碼的類型,後兩個數字沒有分類的作用。HTTP狀態碼共分為5種類型:

技術分享圖片
2.2.3 示例代碼
  1. 服務端.py
  1. # filename: 服務端.py
  2. import socket
  3. sock=socket.socket()
  4. sock.bind(("127.0.0.1"
    ,8808))
  5. sock.listen(5)
  6. while True:
  7. print("server waiting.....")
  8. conn,addr=sock.accept()
  9. data=conn.recv(1024)
  10. print("data",data)
  11. # 讀取html文件
  12. with open("login.html","rb") as f:
  13. data=f.read()
  14. conn.send((b"HTTP/1.1 200 OK\r\n\r\n%s"%data))
  15. conn.close()
  1. login.html
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. </head>
  7. <body>
  8. <form action="" method="post">
  9. 用戶名 <input type="text" name="user">
  10. 密碼 <input type="password" name="pwd">
  11. <input type="submit">
  12. </form>
  13. </body>
  14. </html>

01 Http協議