HTTP介紹及方法狀態碼
import socket #創建一個socket對象 sk = socket.socket() #綁定ip和端口 sk.bind(("127.0.0.1", 8050)) #監聽 sk.listen() #等待連接 while True: conn,addr=sk.accept() #接收數據 data = conn.recv(1024) #打印接收的數據 print(data) #發送數據 conn.send(b"ok") #斷開連接 conn.close()
Host: 127.0.0.1:8050
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8\
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
b‘‘
以上為請求頭
1.客戶端連接到web服務端
一個http客戶端,通常是瀏覽器,與web服務器的http端口(默認為80)建立一個tcp套接字連接.列如,
http://www.luffycity.com
2.發送HTTP請求
通過tcp套接字,客戶端向web服務器發送一個文本的請求報文,一個請求報文有請求行,請求頭部,空行和請求數據4部分組成
3.服務器接收請求並返回HTTP響應
web服務器解析請求,定位請求資源,服務器將資源副本寫到tcp套接字,由客戶端讀取,一個響應由狀態行,響應頭部,空行和響應數據4部分組成
4.釋放連接tcp連接
若connection模式為close,則服務器主動關閉tcp連接,客戶端被動連接‘,釋放tcp連接connection模式為keepalive,則該連接會保持一段時間,在該時間內可以繼續接受請求
5.客戶端瀏覽器解析HTML內容
客戶端瀏覽器首先解析狀態行,查看表明請求是否成功的狀態代碼,然後解析每一個響應頭,響應頭告知一下為若幹字節的HTML文檔和文檔的字符集,客戶端瀏覽器讀取響應數據HTML,根據HTML的語法對齊進行格式化,並在瀏覽器窗口中顯示
在瀏覽器地址欄鍵入URL,接下回車之後會經歷以下流程:
1.瀏覽器向DNS服務器請求解析該URL中的域名所對應的IP地址:
2.解析出ip地址後,根據該IP地址和默認端口80,和服務器建立TCP連接
HTTP狀態碼
狀態代碼的第一個數字代表當前響應的類型:
1. 1xx消息---請求已被服務器接收,繼續處理
2. 2xx消息----請求已成功被服務器接收,處理,並接受
3. 3xx重定向-----需要後續操作才 能完成這一請求‘
4. 4xx請求錯誤-----------請求含有詞法錯誤或者無法被執行
5. 5xx服務器錯誤------服務器在處理某個正確請求時發生錯誤
URL
超文本傳輸協議(HTTP)的統一資源定位符將從因特網獲取信息的五個基本元素包括在一個簡單的地址中:
*傳送協議
*層級URL標記符號(為[//]固定不變)
*訪問資源需要的憑證信息(可省略)
*服務器.(通常為域名,有時為IP地址)
*端口號(以數字方式表示,若為http的默認值‘80可省略‘)
*路徑.(以‘/‘字符區別路徑中的每一個目錄名稱)
*查詢.(get模式的窗體參數,以"?"字符為起點,每個參數以shift鍵+數字7鍵隔開,再以"="分開參數名稱與數據,通常以utf-8的URL編碼,避開字符沖突的問題)
*片段 以#號鍵字符為起點
列子http://www.luffycity.com:80/news/index.html?id=250&page=1
其中http是協議
www.luffycity.com是服務器
80,是服務器上的網絡端口號
/news/index.html是路徑
?id=250&page=1是查詢
HTTP介紹及方法狀態碼