之前(兩三年前了)因為工作需求,想要確認 iOS 到底有沒有認真看待 HTTP cache 機制,因為在 app 內,收到的 HTTP status code 總是 200,然後我又看不到 request header,遠端的資料放 CDN 上也不好看到紀錄,轉念一想,我是不是可以改成監看 iOS 模擬器的所有請求呢?
搜尋之後發現有人說可以用 mitmoroxy,是開源的不像其他 proxy 除錯工具一樣需要付費,稍微測試了一下,發現這東西很好安裝和使用啊,所以花了一點時間研究看看是不是能達到目標,大概步驟如下:
- 安裝
brew install mitmproxy - 然後開 iOS 模擬器
- 安裝 mitmoroxy 的 cert 到模擬器裡面
xcrun simctl keychain booted add-root-cert ~/.mitmproxy/mitmproxy-ca-cert.pem- 啟動 mitmproxy
- 然後設定你的 MacOS 網路來使用這個 proxy(預設是
http://localhost:8080),因為 iOS 模擬器和 host OS 是共用網路的
就這麼簡單,不過這方法還是有些限制,像是如果有用 HTTPS pinning 的話,那就還要其它設定;然後 mitmproxy 本身的操作很好上手,這邊就不多花時間說明了。
然後回到一開始的問題,到底 304 有沒有用呢?我這邊是用 React Native 內的 fetch,然後結論就是有,在 mitmproxy 確實是看的到 304,不過在 RN 的 context 內就會變成 200 了,其實後來想想也覺得合理,因為應用程式層本來就不應該去處理 HTTP 層的 cache 問題,這樣大大的簡化了複雜度。
參考: