在寫 web 程式時, 常常需要除錯 http header 的時候, 或是要得到 browser 如何和 web server 溝通的過程時, 尤其是在寫 AJAX Code 的時候, 我們對於 packet level 的資訊會十分感興趣. 當然我們可以使用像是 sniffer 或是我常用的 ethereal 來進行封包的監聽, 再接著對這些監聽下來的封包分析. ethereal 可以利用一些 filter 或是關鍵字來進行封包的搜尋, 以方便在茫茫封包海中找到我們感興趣的資料.
有個方便的工具, 而且還是掛 microsoft 的工具, 是放在 Wininet 這個地方的監聽工具, Fiddler, 程式很小, 也很容易使用, 但因為是在 Wininet 這層, 所以只支援 IE, 像是 firefox 就是自行透過 socket 層實作 web request 就不支援, 另外像是 sleipnir 這種是用 IE 核心(其實也就是利用 Wininet 這組 api 進行 web reqeust) 的也支援, 簡單地說, 有用 Wininet 的 api 的應該都能用 Fiddler 來進行封包的監聽. (不過不包含 ftp, 僅有 wininet 的 http 部分)
這個工具好用的地方在於不像 ethereal 會將整個網卡上的封包截取下來, 他僅抓 wininet 下的 http 封包 (不過對於 https 的部分要安裝 RPASpy 來解密, 也僅有 header 的部分, 當然, ethereal 是不能解密的), 所以資料量也就大大減少, 而且可以專心 focus 在我們除錯的過程.
我們來看看介面, 上面的這張圖我們可以看到, 對於每個 session 都完整地記錄下來, 有 Result, Host, URL, Body (size), Caching, Content-Type, 一目了然, 對這些 session 按下右鍵, 還有很多功能, 如重送 requst, 存出 header, body 等功能:
而介面的右側則有豐富的 request 及 response 的各種呈現方式, 對於 web 程式設計人員來說, 真是太方便不過的工具了.
Request 的部分:
Response 的部分:
另外還有 Request Builder 可以方便地自行產生一個 http request 出去, 並取得回傳結果.
由於 Fiddler 強調是用在 HTTP Debugger , 當然也整理了一堆好用的工具給我們囉:
http://www.fiddlertool.com/Fiddler/essentials.asp
另外, 安裝好了之後, 也不忘介紹相關的功能及文章:
http://www.fiddlertool.com/Fiddler/firstrun.asp
相信對於各位的開發工具上, 又是一個不可或缺的好幫手囉!
[2007/8/21]
Fiddler PowerToy – Part 1: HTTP Debugging
Fiddler PowerToy – Part 2: HTTP Performance