HTTP,超文本傳輸協定(HyperText Transfer Protocol),屬于應用層協定;主要用于網頁的擷取(基于網站的資料傳輸),資訊的傳遞(基于http協定的資料傳輸)。
一、HTTP概念
1、HTTP的特點
a、應用層協定,傳輸層使用tcp傳輸
b、簡單靈活,和多種語言對接友善
c、無狀态協定,不記錄使用者的通信内容
d、成熟穩定 http1.1
2、HTTP的工作模式
* 使用http雙方均遵循http協定規定發送接收消息體
* 請求方,根據協定組織請求内容發送給對方
* 服務方,收到内容按照協定解析
* 服務方,将回複内容按照協定組織發送給請求方
* 請求方,收到回複根據協定解析
3、HTTP請求(Request)
請求格式:
請求行
請求頭
空行
請求體
a、請求行
請求種類 請求内容 協定版本
eg:
GET / HTTP/1.1
請求種類:
GET 擷取網絡資源
POST 送出一定的附加資料,得到傳回結果
HEAD 擷取響應頭
PUT 更新伺服器資源
DELETE 删除伺服器資源
CONNECT 預留
TRACE 測試
OPTIONS 擷取伺服器性能
b、請求頭
對請求内容的具體描述
以鍵值對的形式對請求資訊進行描述
eg:
Accept: text/html
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cache-Control: max-age=0
Connection: keep-alive
c、請求體
送出具體的請求參數
4、HTTP響應(Response)
響應格式:
響應行
響應頭
空行
響應體
a、響應行
回報具體的響應情況
版本資訊 響應碼 附加資訊
eg:
HTTP/1.1 200 OK
響應碼 :
1xx 提示資訊 表示請求已經接受
2xx 響應成功
3xx 響應需要重新請定向
4xx 用戶端錯誤
5xx 伺服器錯誤
常見響應碼 :
200 成功
404 請求頁面不存在
401 沒有通路權限
500 伺服器發生未知錯誤
503 伺服器暫時無法執行
b、響應頭
對響應資訊的具體描述
eg:
Cache-Control: private
Connection: Keep-Alive
c、響應體
将客戶想要的内容進行傳回
二、HTTP伺服器簡要模型
1、tcp應用:http傳輸
from socket import *
#處理請求,傳回響應
def handleClient(connfd):
print("Connect from",connfd.getpeername())
request = connfd.recv(4096)
#按行進行分割
requestHeadlers = request.splitlines()
for line in requestHeadlers:
print(line)
#無論什麼請求給出相同的響應
try:
f = open("./index.html")
except IOError:
response = "HTTP/1.1 404 not found\r\n"
response += '\r\n'
response += "===Sorry,The page not found==="
else:
response = "HTTP/1.1 200 OK\r\n"
response += '\r\n'
for i in f:
response += i
finally:
connfd.send(response.encode())
connfd.close()
#網絡連結控制流程
def main():
sockfd = socket()
sockfd.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
sockfd.bind(('0.0.0.0', 8000))
sockfd.listen(5)
while True:
print("Listen to the port 8000.....")
connfd, addr = sockfd.accept()
#處理具體用戶端請求
handleClient(connfd)
if __name__ == "__main__":
main()
說明:
sockfd.bind(('0.0.0.0', 8000)),可以在區域網路中任何電腦通路此伺服器;
sockfd.bind(('127.0.0.1', 8000))和sockfd.bind(('localhost', 8000)),隻能在本機進行通路。
2、index.html檔案
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
這是一個網頁
</body>
</html>
說明:同http伺服器代碼放在同一個目錄下
三、附錄:目錄
人工智能(PythonNet)—— 目錄彙總