網絡請求避坑,2021新規范-私有網絡請求(Private Network Access)
文末本文轉載自微信公眾號「云的程序世界」,作者云的世界 。轉載本文請聯系云的程序世界公眾號。
前言
網絡請求,大家肯定熟悉的不能再熟悉,網絡請求失敗,大家也肯定很熟悉。排查網絡請求,也是我們必備的技能,對不,兄弟。
我坦言,最怕兩種網絡請求失敗。
第一種:PC端模擬沒有異常,到手機上 eruda, vconsole等網絡請求信息空白。
這種,就比較頭大一點了,可能需要設置手機的網絡代理 + 抓包工具 去排查。
第二種:Provisional headers are shown
這種也是比較頭疼的,雖然網絡有很多文章講了排查之道,很多時候不太好使,這一回,也不生效。
今天,出場的嘉賓比較特別:Private Network Access 翻譯成中文,就是私有網絡請求,開始正文吧。
起因經過
看要點:
- 本地(個人電腦)開發
- 啟動一個web項目,頁面是http協議,類似 http://localhost:9093
- webview 打開 CDN(源站阿里OSS)的一個動頁面
- 活動頁面請求一個開啟了cors的局域網接口
類似:http://192.168.19.87:11606/como/flags
瀏覽器信息:chrome x64 95
獲取如下結果信息,并且爆出異常
網絡請求列表信息:
網絡請求詳情信息:
然后,我就一頓操作,最初懷疑 Referrer Policy 和這個所謂的 Provisional headers are shown, 經歷下面得操作。
修改h5活動refer策略
- https://www.jianshu.com/p/26512475501a
失敗告終
關閉 chrome://flags/#site-isolation-trial-opt-out 等等
CAUTION: provisional headers are shown" in Chrome debugger
失敗告終
其他嘗試
- 給本地web項目配置域名(修改localhost)失敗
- 用360瀏覽器打開web項目,網絡請求成功 成功
- 把請求copy as fetch,放到控制臺執行 成功
- 本地啟動一個網站模擬活動頁面,執行相同的網絡請求 成功
到這里,我就有點迷糊了,本地啟動一個頁面,調用相同的接口能成功?CDN上不能成功,難不成和CDN的策略有關系?
這就難辦了,內心另外一個聲音響起,應該還是和這個cors有關系, 受到CAUTION: provisional headers are shown" in Chrome debugger 啟發,應該還是和某個選項有關?
于是我打開 chrome://flags/ 面板,搜索 cors。
意外的收獲
發現一個選項, Block insecure private network requests, 第一句的意思是 防止非安全上下文向更私有的 IP 地址發出子資源請求, 哦,雖然還不太懂,感覺很有用的樣子。
辦他,重啟??
居然,好了,眼淚都要出來了,因為就這個事,放了好幾天,近來覺得
心里這個坎過不去!
心里這個坎過不去!
心里這個坎過不去!
一個不小心過去了,沒牽掛了,我要吃飯去了,別攔著我。
之前有提到,360瀏覽器并無此問題,那么chrome又是從哪個版本開始實現了這個特性。經過查詢google文獻,最終確認是 94,也就是低于此版本的瀏覽器不會受到影響。
發布于2021年8月的Private Network Access update: Introducing a deprecation trial
根本原因 Private Network Access(私有網絡請求)
先完全翻一下這個特性的描述:
防止非安全上下文向更私有的 IP 地址發出子資源請求。如果1) ip1是本地主機,而 ip2不是,或者2) ip1是私有的,而 ip2是公共的,那么 IP 地址 ip1比 ip2更私有。這是全面實施 cors-rfc1918的第一步: https://wicg.github.io/cors-rfc1918
頓悟, 防止向更私有的ip地址發出資源請求。
活動頁面在CDN,屬于公網
網絡請求http://192.168.19.87:11606/como/flags, 屬于局域網
公網向局域網請求,就是向私有的網絡請求, 所以被 ban 了。
打開特性說明中的鏈接, 跳轉到協議地址:https://wicg.github.io/private-network-access/
再補充一些知識 ,網絡大致上我們分為
- local (本機)
- private(私有網絡)
- public (公網)
私有程度 local > private > public
一圖勝千文:
當然,更多相關知識,請參見 Private Network Access
三個問題
被 Private Network Access 策略攔截導致的請求,有沒有發送到服務端
局域網向本地機器發送網絡請求,能不能成功
除了關閉chrome的Block insecure private network requests特性外,還有沒有別的方式解決此問題
小結
圖片這個協議,是2021年6月份起草的,不得不說chrome你是真的牛X。
這也就能解釋,為什么 360瀏覽器能網絡求情能夠成功。
私有網絡請求,確實從一定程度保護了安全。