HTTP—軟件測試專項技術(6)

發表于:2020-4-26 13:26  作者:51Testing教研團隊   來源:51Testing軟件測試網原創

字體: | 上一篇 | 下一篇 |我要投稿 | 推薦標簽: APP測試 Web測試 專項測試

  1.2.7  HTTP
  超文本傳輸協議(HyperText Transfer Protocol,HTTP)是Web聯網的基礎,也是手機聯網常用的協議之一。
  從圖1-15可以看出相關協議和OSI參考模型的關系。
  從圖1-15中還可以看出,HTTP是一個應用層協議,也就是傳輸層的上一層協議。HTTP只定義傳輸的內容,不定義傳輸方式(這是底層協議做的事情),因此,要想理解HTTP,只需要理解協議的數據結構及其意義。
  HTTP是一種請求-應答式協議。其顯著特點是客戶端發送的每個請求都需要服務器返回響應,而且在請求結束后,它會主動釋放連接。從建立連接到關閉連接的過程稱為"一次連接"。
  下面比較HTTP 1.0和HTTP 1.1之間的差異。
  ●在HTTP 1.0中,對客戶端的每個請求都要建立一次單獨的連接,在處理完請求后,自動釋放連接。
  ●在HTTP 1.1中則可以在一次連接中處理多個請求,并且多個請求可以重疊執行,不需要等待一個請求結束后再發送下一個請求。
  
圖1-15  相關協議和OSI參考模型的關系
  由于HTTP在每次請求結束后都會主動釋放連接,因此HTTP連接是一種"短連接"。要保持客戶端程序處于在線狀態,需要不斷向服務器發起連接請求。通常的做法是即使不需要獲取數據,客戶端也每隔一段固定時間向服務器發送一次"保持連接"的請求,服務器在收到該請求后對客戶端進行回復,以表明知道客戶端"在線"。若服務器長時間未收到客戶端的請求,則認為客戶端已"下線"。若客戶端長時間無法收到服務器的回復,則認為網絡已經斷開。
  1.HttpWatch的抓包方法
  為了更好地理解HTTP請求和響應,可以使用HttpWatch工具抓取一些數據包。下面介紹HttpWatch的抓包方法。
  (1)安裝完HttpWatch后,從菜單欄選擇"工具"→"瀏覽器欄"→HttpWatch Professional,打開HttpWatch,如圖1-16所示。
  (2)單擊工具欄上的Record按鈕,如圖1-17所示。
  (3)在瀏覽器的地址欄中輸入http://172.21.200.189/oscommerce/index.php(也可以是任意可訪問的地址,這里只是作為示范)。
  
圖1-16  HttpWatch的打開方式
  圖1-17  單擊工具欄上的Record按鈕
  (4)按Enter鍵進行訪問,可以發現HttpWatch已經開始抓包了。待頁面打開后,單擊Stop按鈕,如圖1-18所示。
  
圖1-18  單擊Stop按鈕
  (5)選擇任意一條錄制的信息,單擊下方的Headers選項卡,查看里面是否有內容。如果有內容,那么說明錄制、抓取成功,如圖1-19所示。
  
圖1-19  錄制、抓取成功
  2.HTTP請求
  在HTTP常用的請求類型中,GET請求和POST請求較重要。這兩種請求代表了客戶端和服務器之間傳輸數據的典型方式,它們在Web系統的開發和測試中非常重要。無論是哪種請求,都是由頭部和正文兩部分組成的,但GET請求的正文為空,POST請求的正文為提交給服務器端的數據。
  1)GET請求
  GET請求是指客戶端發送一個請求給服務器,目的是從服務器端獲取資源。例如,當我們訪問一個網站時,輸入相應網址并按Enter鍵后,便發送了一個GET請求給服務器端,請求服務器端返回該網站首頁的HTML代碼。事實上,通過工具監控,可以了解圖1-20所示的請求過程。
  
圖1-20  請求過程
  當訪問前面提到的http://172.21.200.189/oscommerce/index.php時,發送了多個GET請求,原因在于構成該網站首頁的資源除了HTML代碼外,還包括很多圖片、動畫、JavaScript腳本和CSS格式化文件。在HTTP中,一個請求只能對應一個特定的資源,而不能對應整個頁面,這一點首先需要了解。
  不妨先使用HttpWatch工具來監控訪問該網站首頁時的請求過程,監控結果如圖1-21所示。切換到Stream選項卡,根據需要,可以單擊Export按鈕將結果導出。
  
圖1-21  監控結果及結果導出操作
  分別單擊兩個Export按鈕,導出兩個txt文件--index.php.request和index.php. response。打開txt文件 index.php.request,如圖1-22所示。
  
圖1-22  打開index.php.request文件
  其中,GET /oscommerce/index.php HTTP/1.1指明了3個關鍵信息:請求類型為GET,資源URL為/oscommerce/index.php,協議類型和版本為HTTP/1.1。
  標準GET請求包含的關鍵字段如下所示。
  ●Accept:告訴服務器當前瀏覽器能接受和處理的介質類型,"*/*"表示可接受所有類型。
  ●Accept-Language:告訴服務器當前瀏覽器能接受和處理的語言。zh-CN表示瀏覽器接受中文。還有其他很多能接受和處理的語言,如en-US(英文)。
  ●User-Agent:告訴服務器當前客戶端的操作系統和瀏覽器的內核版本信息。
  ●Accept-Encoding:告訴服務器端當前客戶端支持的編碼格式,如gzip,這樣服務器端可以將HTML、JavaScript或CSS文本型資源壓縮后再傳遞給瀏覽器,瀏覽器接收到它們后再解壓縮,從而顯著減少資源占用的帶寬和網絡上的傳輸時間。
  ●Host:表示要訪問的服務器端主機名或IP地址。
  ●Connection:告訴服務器瀏覽器想要使用連接方式,如 Keep-Alive,告訴服務器在完成本次請求的響應后,保持該TCP連接,不釋放,以等待本次連接的后續請求。這樣可以減少打開及關閉TCP連接的次數,提升處理性能。另外,可選的選項還有Close,它表明在接收響應后將直接關閉連接。
  ●Referer:指定發起該請求的源地址。根據這個值,服務器可以跟蹤到來訪者的基本信息。例如,在百度首頁中搜索51Testing關鍵字,然后在搜索結果中訪問51Testing網站,這時51Testing服務器就可以根據Referer這一值追蹤到來訪者的地址為http://www.baidu.com/s?wd=51Testing,這樣我們就可以知道來訪者是從哪個網站訪問本網站的。如果是從搜索引擎訪問的,那么還可以知道是從哪個搜索引擎訪問的,以及搜索的關鍵字,如圖1-23所示。
  
圖1-23  得知來訪者是從哪個網站訪問本網站的
  注意:如果來訪者的Referer為空,那么只有兩種可能。一種是來訪者修改了GET請求,刪除了Referer字段的值;另一種就是來訪者直接在URL欄輸入了該地址,這種用戶是忠誠度較高的用戶,因為起碼他們記得該網站的域名。
  ●Cookie:將客戶端的Cookie信息發送給服務器端。關于Cookie的作用及詳細用法,將在后續章節中介紹。
  2)POST請求
  POST請求與GET請求最大的區別就在于,GET請求主要負責數據的獲取,而POST請求主要負責數據的提交,并且把所有提交的數據放在請求的正文中。
  在訪問http://172.21.200.189/oscommerce/index.php網站時,輸入用戶名和密碼并單擊"登錄"按鈕后,就能看到POST的信息,如圖1-24所示。
  
圖1-24  關于POST的信息
  將Stream選項卡中的內容導出為txt文件并打開,如圖1-25所示。
  可能有讀者注意到了最后一行內容,顯示用戶的賬號和密碼,這說明這個站點的安全性較低。
  下面對比一下百度的登錄信息,如圖1-26所示。
  從關于 POST 的信息中可以看到,百度已經對登錄賬號進行了加密。http://172.21. 200.189/oscommerce/index.php網站在這方面存在很大的安全隱患。
  
圖1-25  導出的內容
  
圖1-26  百度的登錄信息
  3.HTTP響應
  HTTP響應與請求類似,同樣分為兩部分--頭部和正文。響應中的頭部主要是由服務器端返回給客戶端的,用于獲取一些服務器端的信息。響應的正文就是請求的各類資源的內容。如果請求的是HTML文件,則正文是HTML文件的源代碼;如果請求的是JavaScript文件,則正文是JavaScript代碼;如果請求的是圖片,則正文就是該圖片。
  先來看看響應中頭部的內容。同樣切換到Stream選項卡,查看窗口右邊的內容,這里需要把響應的內容導出為文本文件,如圖1-27所示。
 
圖1-27  響應文件的內容
  響應文件里面的字段內容和GET請求中的相似,其中一個不同之處需要解釋。
  "Transfer-Encoding: chunked"表示在HTTP中使用Content-Length這個頭部來告知數據長度。在數據下行的過程中,Content-Length要預先在服務器中緩存所有數據,然后把所有數據一起發給客戶端。如果要在產生數據的同時發給客戶端,那么Web服務器就要使用"Transfer-Encoding: chunked"這種方式來代替Content-Length。Transfer-Encoding用于指定HTTP的編碼方式,chunked編碼的基本方法是將大塊數據分解成多塊小數據,每塊都可以指定長度。
  然后,查看HTTP響應的狀態碼。在響應的第一行中,包含了兩個信息:一是HTTP的協議版本號,這里服務器告知瀏覽器它使用的版本是HTTP 1.1,瀏覽器可以按照HTTP 1.1的版本規則來對服務器進行解析;二是響應的狀態碼,這里"200 OK"表示響應完全正常。
  響應的狀態碼由5類狀態碼組成,其中1xx(狀態碼為100~199)屬于參考信息,2xx指明成功接受請求并已完成整個處理過程,3xx用于重定向,4xx指出客戶端錯誤,5xx則表示服務器端錯誤,具體見表1-1~表1-5。
查看《軟件測試專項技術--基于Web、移動應用和微信》全部連載內容>>
版權聲明:51Testing軟件測試網獲得人民郵電出版社和作者授權連載本書部分章節。
任何個人或單位未獲得明確的書面許可,不得對本文內容復制、轉載或進行鏡像,否則將追究法律責任。

【福利】填問卷送精選測試禮包+接口測試課程!為測試行業做點事!
21/212>

評 論

論壇新帖

頂部 底部


建議使用IE 6.0以上瀏覽器,800×600以上分辨率,法律顧問:上海瀛東律師事務所 張楠律師
版權所有 上海博為峰軟件技術股份有限公司 Copyright©51testing.com 2003-2020, 滬ICP備05003035號
投訴及意見反饋:webmaster@51testing.com; 業務聯系:service@51testing.com 021-64471599-8017

滬公網安備 31010102002173號

51Testing官方微信

51Testing官方微博

掃一掃 測試知識全知道

日本av