你們可能都據說過一個名詞,「抓包」。好比軟件開發先後端聯調,調用後端接口無反應,這時咱們經常會說:「抓個包看看前端傳遞的數據吧」。又或者咱們的網站接入 CDN 以後,想要看一下網站靜態資源的緩存時間和本身設置的緩存策略是否一致,也會用到抓包。那什麼是抓包呢?html
主機之間的數據通訊都是經過網絡來進行傳輸,而將網絡傳輸發送與接收的數據包進行截獲、重發、編輯、轉存等操做,就是抓包。前端
抓包常常被用來進行數據截取與觀察,用於獲取 HTTP 標頭、內容、大小等信息來進行分析,對判斷軟件的 Debug 很大的幫助。因此,學會抓包,對於排查一些網絡問題十分重要。後端
先來簡單看下有哪些常見的抓包工具,主要有下面幾種:瀏覽器
其中目前主流的抓包工具備:TcpDump、WireShark、Fiddler,下面咱們對這幾個抓包工具的性能進行一些簡單的對比。緩存
1. TcpDump服務器
Android 平臺下的網絡數據抓包工具,Android模擬器中自帶 TcpDump 文件。cookie
用 TcpDump 對網絡數據抓包,手機不用走代理——將網絡數據包添加到 WireShark 中分析便可。網絡
缺點:框架
2. WireSharkdom
PC 端截獲、分析經過該網卡的全部網絡通訊的數據包(針對移動端時候,就要對移動端設置代理服務器)強大的工具,完整查看網絡中的每層、每一個協議、每一個數據包的詳細組成信息;TCP、UDP、HTTP、HTTPS 等協議的數據包都可獲取;
缺點:
3. Fiddler
HTTP 協議的代理工具,抓取、分析電腦中全部進出該網卡、與網絡進行數據交互的數據(針對移動端抓包時,須要設置代理服務器),主要針對的是 HTTP/HTTPS 協議;可以清晰查看數據包中的內容——HTTPS中的數據包能夠解密出來。
缺點:
上文中能夠看到主流的抓包工具都或多或少地存在缺點,那有沒有一款界面簡單、易操做,能夠很是方便的查看網頁中全部的網絡請求,並審覈檢查單個資源的屬性,好比 HTTP 標頭、內容、大小等的抓包工具呢?
Chrome Network 就能夠作到。Chrome Network 是屬於 Chrome DevTools 套件中的一個調試工具,下面我來對它的使用作一個簡單介紹。
注:本篇教程適用於使用 Chromium 內核的瀏覽器,Microsoft Edge 和 Firefox 也有相似的控制面板,在此再也不贅述。
如何打開開發者工具面板
2.經過 [更多工具] - [開發者工具] 打開。
打開開發者工具後,切換到 [Network 面板],面板的構成可查看下圖:
接下來咱們就來認識一下各個模塊。
控制器
從左至右按鈕的功能依次是:
咱們簡單的來體驗一下其中幾個功能的使用。
場景一:如何模擬在本地沒有緩存的狀況下訪問網頁?
咱們能夠打開控制器的 [Disable cache] 功能,從新刷新頁面,瀏覽器會模擬不帶緩存的請求訪問,保證每個請求都是向網絡中發起的。
場景二:請求列表只記錄當前頁面的訪問請求,若是點擊了一個超連接,跳轉到另外一個網頁,這樣就會清空以前的記錄。可否在點擊連接跳轉以後,依舊保存以前的請求記錄呢?
咱們能夠打開控制器的 [Preserve log] 功能,這樣在點擊連接跳轉到新的頁面後,跳轉前的請求記錄依舊會保留,方便咱們跟蹤請求響應。
過濾器
咱們在訪問一個網站的時候,可能會有幾十個或者上百個請求,這些請求中有些是咱們關心的,有些是咱們不須要的,這個時候就能夠快速的使用過濾器來篩選出咱們關心的那些請求。
過濾器常見的過濾方式就是按類型過濾。
默認過濾中已經內置幾種類型,比方說咱們能夠篩選出 JS 類的請求、圖片類的請求或者是WebSocket 類型的請求,按住 [Ctrl(Windows)] 或者 [Command(Mac)] 能夠同時選擇多個過濾類型。
那麼 [Hide data URLs] 選項是什麼意思呢?
網站開發者不少時候會將一些小的圖片或者 CSS 腳本,以 BASE64 格式嵌入到 HTML 中,以減小 HTTP 請求數。當勾選了 Hide data URLs 選項後,就能夠隱藏掉請求列表中的像 data: 或者 blob: 類請求。
除了以上幾個 Chrome 提供的過濾器之外,還能夠很是靈活的在過濾框中使用過濾屬性進行請求日誌的篩選。
常見的過濾屬性可參考下表。
場景一:打開又拍雲官網的時候,咱們想篩選網頁中來自於不一樣域名的請求資源,就能夠在過濾框中輸入 [domain:] ,Chrome 會幫咱們自動補齊相關的域名信息。
場景二:打開的網頁中,如何查看哪些請求使用了緩存?使用命令 [is:from-cache]
請求列表
請求列表默認是按照資源請求發起的時間升序排列的,咱們也能夠選擇按指定列排序,例如 [Waterfall] 列上右鍵,按照活動時間來進行排序。
請求列表中默認每列的含義爲:
咱們也能夠添加其它的一些列目錄,在請求列上右鍵呼出菜單,可看到更多列選項。
此外咱們也能夠配置自定義列,在請求列上右鍵呼出菜單-Response Headers- Manage Header Columns 中添加想列出的響應頭信息。
場景:如何自定義顯示請求通過了CDN 的哪些節點?
CDN 會在每個響應頭中添加上Via 響應頭,那麼咱們就能夠自定義請求列表顯示 Via 列。
HTTP 請求與響應
點擊請求列表中的具體的請求,則能夠打開請求內容詳情,在內容詳情中咱們能夠執行如下操做:
場景一:查看請求的響應與請求報文
場景二:預覽圖片
場景三:將一個請求導出爲 cURL 命令
在請求上右鍵呼出菜單,選擇 Copy 選項。
以上就是對 Chrome 的 Network 面板的介紹,經過一些場景來幫助你們理解使用面板的功能。相比起 Wireshark 等一些網絡抓包工具而言,Chrome Network 更爲簡單易用,查看 HTTP/2 或者 HTTPS 等請求報文也更爲方便,對於前端展現或者網絡鏈接產生的一些問題,定位也更爲輕鬆快捷。