01 Http協議
阿新 • • 發佈:2018-07-10
hid visible 求和 類型 ins sid 短連接 top img
Django
enter description here
1. Http協議特性
1.1 基於TCP/TP
HTTP協議是基於TCP/IP協議智商的應用層協議
1.2 基於請求-響應模式
HTTP協議規定,請求從客戶端發出,最後服務器端響應該請求並 返回。換句話說,肯定是先從客戶端開始建立通信的,服務器端在沒有 接收到請求之前不會發送響應
1.3 無狀態保存,短連接
HTTP是一種不保存狀態,即無狀態(stateless)協議。HTTP協議自身不對請求和響應之間的通信狀態進行保存。也就是說在HTTP這個級別,協議對於發送過的請求或響應都不做持久化處理(短連接)。
1.4 無連接
無連接的含義是限制每次連接只處理一個請求。服務器處理完客戶的請求,並收到客戶的應答後,即斷開連接。采用這種方式可以節省傳輸時間。(與之對應的TCP鏈接)
2. HTTP請求協議和響應協議
HTTP協議包含:
- 由瀏覽器發送到服務器遵循的請求協議
- 服務器發送數據到瀏覽器遵循的相應協議
2.1 請求協議
2.1.1 請求格式
enter description here
2.1.2 請求方式:GET請求和POST請求
- GET請求
- GET提交的數據會放在請求頭中,即URL之後,以?分割URL和傳輸數據,參數之間以&相連,如
EditBook?name=test1&id=123456
- GET提交的數據大小有限制(因為瀏覽器對URL長度有限制)
- POST請求
- POST數據一般放在HTTP包的請求體中,但是也可以放在請求頭中
- POST提交數據沒有限制
- GET與POST請求在服務端獲取數據方式不同
2.2 響應協議
2.2.1 響應格式
2.2.2 響應狀態碼
狀態碼是當客戶端向服務器端發送請求時, 返回的請求結果。借助狀態碼,用戶可以知道服務器端是正常處理了請求,還是出現異常了。例如狀態碼 200 OK
,由三個十進制數字組成,第一個十進制數字定義了狀態碼的類型,後兩個數字沒有分類的作用。HTTP狀態碼共分為5種類型:
2.2.3 示例代碼
- 服務端.py
- # filename: 服務端.py
- import socket
- sock=socket.socket()
- sock.bind(("127.0.0.1"
- 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
- <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>
01 Http協議