1. 程式人生 > >HTTP客戶端

HTTP客戶端

套接字 bsp 可能 有效時間 請求響應 回車換行 字節數 要求 加密

客戶端程序:獲取或緩存文檔

      向服務器提交請求或數據

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客戶端