HTTP客戶端
客戶端程序:獲取或緩存文檔
向服務器提交請求或數據
9.1Python客戶端
Requests庫
基本接口(urllib)提供可調用的方法,用於:打開HTTp連接,發起請求,等待接收響應頭,打包響應對象,響應體留在套接字的接受隊列,程序員需要時讀取響應體。
HTTP:不允許客戶端在收到上個請求響應前發送第二個請求
9.2端口、加密、封幀
HTTP的請求與響應采取了相同的格式化與封幀規則
請求與響應:HTTP消息
消息的構成:
1
請求:方法名+請求的文檔
響應:返回碼和描述信息
第一行以回車換行結束
2
0-多個頭信息(名稱:值)
每個頭信息以CR-LF結尾
所有頭信息後跟一個空行CRLFCRLF
3
可選的消息體。
1、2部分整體由空行封幀
消息體封幀
content-Length頭:消息體包含的字節數。可能動態生成
Transfer-Encoding頭:消息體分成一系列小塊,每塊使用前綴指定長度
每個塊中:塊長度、CRLF、數據塊、CRLF。
結尾:長度為0的塊
9.3方法
HTTP請求中的第一個單詞:請求的操作類型
GET 讀:不包括消息體
只能讀,不能寫服務器上的數據。附加到請求路徑後的參數只能修改返回後的文檔。
可以將響應加入緩存。可以安全的重試。
POST 寫:
不能緩存,不能重發
GET:
返回響應頭:OPTIONS服務器不準備資源
HEAD準備
POST:
冪等: PUT:文檔,路徑
DELETE:文檔:路徑
urllib.urlopen,隱式選擇了HTTP方法(重載?)
9.4路徑與主機
要求強制使用Host頭,指出URL中使用的主機名
否則服務器:400
9.5狀態碼
響應首行:響應碼+文本
200-300成功
300-400重定向(不含消息體)
400-500客戶端請求無法識別,非法
500-600服務器錯誤
庫是否會自動重定向
否則自行檢查3xx響應頭
Requests提供,history:重定向鏈
自行處理:重寫緩存中的舊url
重定向:強制將url轉換為官網形式
當拋出異常並中斷程序
查看異常對象,查看響應細節
異常對象的作用:1.表示發生的異常 2.包含響應對象
requests庫處理方案:只請求狀態碼,也會返回響應對象
9.6緩存與驗證
防止客戶端頻繁請求相同資源
使用緩存:減少網絡流量,降低服務器負載,加快客戶端
服務器:添加HTTP允許緩存
緩存文檔的語義:相同路徑&其他?(時間)
Vary頭:文檔依賴的其他HTTP頭。Host,Accept-Encoding
服務器發送不同的文檔:依賴Cookie選項
完全禁止緩存:禁止將資源存儲在客戶端。防止客戶端自動復制非易失存儲器的響應,由客戶決定是否保存資源副本到硬盤
允許緩存:服務器希望客戶端提供緩存文檔信息
緩存失效標誌:過期日期(絕對)Expires頭/緩存有效時間(相對)Cache-control頭
服務器控制緩存有效性:檢查請求頭(條件請求)。資源過期——發送消息體
1.資源最近修改日期。服務器端對比
2.資源ID匹配
urllib與Requests默認需要實時網絡HTTp請求,不管理緩存減少網絡通信。
HTTP客戶端