【HttpDns】解決 APP 無法找到主機(jī)問題

本文中會(huì)提到部分廠商足删,不過均為舉例需要或客觀推薦的解決方案,并無任何利益關(guān)系

有用戶反應(yīng)產(chǎn)品偶然會(huì)出現(xiàn)『未能找到使用指定主機(jī)的服務(wù)器』問題纪蜒,應(yīng)該是 DNS 沒有正確解析瓤漏。從監(jiān)控記錄中并沒有發(fā)現(xiàn)什么問題,各地的監(jiān)測點(diǎn)的結(jié)果都很正常校套,那就應(yīng)該是用戶所處網(wǎng)絡(luò)環(huán)境出了問題价脾。

為了盡量提高產(chǎn)品可用性,進(jìn)行了 HTTP DNS 的改造笛匙。


什么是 HTTP DNS

普通的網(wǎng)絡(luò)請求侨把,系統(tǒng)自動(dòng)通過 DNS Server 將目標(biāo)域名解析成 IP 地址,然后向這個(gè) IP 地址發(fā)送請求完成數(shù)據(jù)交互妹孙。這個(gè)解析的過程對于 APP 來說是不可見的秋柄。

HTTP DNS 則是 APP 主動(dòng)向 HTTP DNS Server 發(fā)送解析請求,Server 返回目標(biāo)域名對應(yīng)的 IP 地址蠢正,然后 APP 直接向目標(biāo)地址發(fā)送請求骇笔,繞開了系統(tǒng)解析的這個(gè)環(huán)節(jié),避免了用戶所處環(huán)境帶來的干擾嚣崭。

當(dāng)然 HTTP DNS Server 也是通過 IP 地址直接訪問的笨触,比如 DNSPod 免費(fèi)版的 119.29.29.29,還有其他廠商可以自己尋找雹舀。

如何進(jìn)行改造

根據(jù)改動(dòng)范圍是否設(shè)計(jì)后端(包括運(yùn)維)有兩種方法

A. 前后端配合版

這種改造方案非常簡單芦劣,后端 Web Server 將 IP 地址直接綁定到目標(biāo)站點(diǎn),APP 在發(fā)起請求前说榆,直接將所有 URL 中自己域名的部分換為通過 HTTP DNS 獲得目標(biāo) IP 即可虚吟。

當(dāng)然如果后端有針對域名的邏輯也需要處理下,比如防盜鏈用的 Referer 校驗(yàn)等签财。

另外有的第三方庫(比如支付寶)需要 APP 傳入 Server 回調(diào)地址串慰。這種是沒必要改的,畢竟請求來自 IDC 機(jī)房等網(wǎng)絡(luò)環(huán)境很好的場合唱蒸。不過一定要改的話邦鲫,這種地址可能在第三方平臺(tái)上有綁定審核,實(shí)際動(dòng)手前請?zhí)崆皽?zhǔn)備審核油宜。

B. APP 單獨(dú)版

不同公司合作開發(fā)或者一臺(tái) Server 托管了若干站點(diǎn)的情況掂碱,只能 APP 自己想辦法了。這種稍微麻煩點(diǎn)慎冤,針對不同用途的 URL 需要做不同的處理疼燥。

  1. 普通請求,類似于 REFTful API蚁堤,每次請求完成一個(gè)動(dòng)作醉者,比如獲得數(shù)據(jù)之類
    這種可以直接用 IP 替換域名但狭,然后在 HTTP request header 中將 Host 指定為域名即可。

  2. Webview 中加載 Web page
    如果只是加載用戶協(xié)議撬即、關(guān)于我們這種單頁純文本的東西立磁,和普通請求相同改法即可。不過很多網(wǎng)頁內(nèi)都會(huì)有相對地址的超鏈接剥槐,Webview 內(nèi)的超鏈接跳轉(zhuǎn)時(shí)無法指定 Host 字段唱歧,后端 Server 可能無法正確處理這種請求。另外 cookie 等和域有關(guān)對的東西也容易出問題粒竖,所以這種類型最好還是維持域名訪問的原狀颅崩。

  3. 傳給第三方庫使用的回調(diào)地址
    同樣,這種本來就沒問題蕊苗,強(qiáng)行改的話反而會(huì)出問題沿后,所以不要更改。

  4. 第三方地址朽砰,比如 Apple Store 的評分頁面尖滚,或者點(diǎn)擊廣告后跳轉(zhuǎn)的營銷頁
    這種可改可不改,視具體情況而定瞧柔,總體建議維持原狀比較好漆弄。

一些有用的實(shí)踐經(jīng)驗(yàn)

  • APP 啟動(dòng)時(shí)異步 HTTP DNS 查詢 IP 地址
    畢竟大部分用戶網(wǎng)絡(luò)狀況都是正常的,沒必要影響所有人的啟動(dòng)速度

  • 查到后將 IP 地址緩存
    除了內(nèi)存外最好也能持久化緩存非剃,這樣下次啟動(dòng)時(shí)即使萬一 HTTP DNS 查詢比較慢也能確保有可用的 IP置逻。

  • HTTP DNS 查詢后觸發(fā)進(jìn)行一次系統(tǒng)的 DNS 解析
    仍有使用域名請求的場景(比如APP單獨(dú)改造時(shí)用到 Webview)下使用推沸。
    如果域名不是被刻意劫持或干擾备绽,一般無法找到主機(jī)的問題只是解析過慢,提前觸發(fā)查詢后鬓催,等用戶操作到相關(guān)邏輯時(shí)正常的概率就會(huì)更高肺素。

  • 發(fā)送請求前若有 IP 則使用 IP,否則使用域名
    這是當(dāng)然的 XD

  • 網(wǎng)絡(luò)狀況發(fā)生變化時(shí)宇驾,重新異步 HTTP DNS 查詢 IP 地址
    如果產(chǎn)品在不同線路部署有不同 Server 的話倍靡,重新查詢一遍可以確保總是使用最合適的那臺(tái)课舍。

第三方庫

iOS/Android 都有現(xiàn)成的第三方庫可供使用塌西,GitHub 上有新浪和七牛的項(xiàng)目

Objective-C Java
新浪:貌似不成熟,開發(fā)者不推薦商用 新浪:功能異常強(qiáng)大筝尾,解釋也很詳細(xì)捡需,請直接查看該項(xiàng)目主頁
七牛:提供 DNSPod 等 HTTP 方式,也支持 nslookup 方式(可以指定 DNS Server) 七牛:同左邊

另外七牛項(xiàng)目的分別發(fā)布到了 CocoaPods 和 maven 上更易使用筹淫,所以推薦七牛站辉。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子饰剥,更是在濱河造成了極大的恐慌殊霞,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件汰蓉,死亡現(xiàn)場離奇詭異绷蹲,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)顾孽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進(jìn)店門瘸右,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人岩齿,你說我怎么就攤上這事太颤。” “怎么了盹沈?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵龄章,是天一觀的道長。 經(jīng)常有香客問我乞封,道長做裙,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任肃晚,我火速辦了婚禮锚贱,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘关串。我一直安慰自己拧廊,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布晋修。 她就那樣靜靜地躺著吧碾,像睡著了一般。 火紅的嫁衣襯著肌膚如雪墓卦。 梳的紋絲不亂的頭發(fā)上倦春,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天,我揣著相機(jī)與錄音落剪,去河邊找鬼睁本。 笑死,一個(gè)胖子當(dāng)著我的面吹牛忠怖,可吹牛的內(nèi)容都是我干的呢堰。 我是一名探鬼主播,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼脑又,長吁一口氣:“原來是場噩夢啊……” “哼暮胧!你這毒婦竟也來了锐借?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤往衷,失蹤者是張志新(化名)和其女友劉穎钞翔,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體席舍,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡布轿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了来颤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片汰扭。...
    茶點(diǎn)故事閱讀 40,427評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖福铅,靈堂內(nèi)的尸體忽然破棺而出萝毛,到底是詐尸還是另有隱情,我是刑警寧澤滑黔,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布笆包,位于F島的核電站,受9級特大地震影響略荡,放射性物質(zhì)發(fā)生泄漏庵佣。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一汛兜、第九天 我趴在偏房一處隱蔽的房頂上張望巴粪。 院中可真熱鬧,春花似錦粥谬、人聲如沸肛根。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽晶通。三九已至,卻和暖如春哟玷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背一也。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工巢寡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人椰苟。 一個(gè)月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓抑月,卻偏偏與公主長得像,于是被迫代替她去往敵國和親舆蝴。 傳聞我的和親對象是個(gè)殘疾皇子谦絮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評論 2 359

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理题诵,服務(wù)發(fā)現(xiàn),斷路器层皱,智...
    卡卡羅2017閱讀 134,693評論 18 139
  • 最近性锭,終于要把《WEB請求處理系列》提上日程了,一直答應(yīng)小伙伴們給分享一套完整的WEB請求處理流程:從瀏覽器叫胖、Ng...
    七寸知架構(gòu)閱讀 31,419評論 27 253
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,264評論 25 707
  • 1. 概述 在網(wǎng)絡(luò)環(huán)境中一般用戶只需要在瀏覽器中輸入url如www.sunny.com就可以到對應(yīng)服務(wù)器獲取相應(yīng)的...
    ghbsunny閱讀 2,897評論 0 7
  • "**附屬醫(yī)院在哪兒你知道嗎草冈?" "干嘛一定要去我們學(xué)校的附屬醫(yī)院呢?其他醫(yī)院不行嗎瓮增?" "不是怎棱,我是去看一位瑞士...
    臺(tái)木閱讀 260評論 0 0