WebView跨域請(qǐng)求相關(guān)問(wèn)題

問(wèn)題描述

在某個(gè)地區(qū) DNS被污染的前提下,業(yè)務(wù)側(cè)希望webView也可以通過(guò)走cronet長(zhǎng)連接(ip直連)+gslb來(lái)跳過(guò)local dns那一步咱筛,但后續(xù)實(shí)施的時(shí)候發(fā)現(xiàn)某個(gè)webView頁(yè)面下的某些js請(qǐng)求響應(yīng)碼雖然是200彼妻,但是卻沒(méi)有接收到任何數(shù)據(jù)內(nèi)容嫌佑,前端頁(yè)面提示接口請(qǐng)求異常。


雙端差異

上面都是走cronet和長(zhǎng)連接的訪問(wèn)侨歉,為啥ios沒(méi)問(wèn)題而android有問(wèn)題呢屋摇?和同事重現(xiàn)下路徑發(fā)現(xiàn),ios那邊是在web.xx.com下面用sapi.xx.com去發(fā)起接口請(qǐng)求幽邓,是沒(méi)有Options方法發(fā)起的炮温,但是android的webView下的web.xx.com頁(yè)面下的每個(gè)sapi.xx.com每次Get/Post請(qǐng)求都會(huì)發(fā)起Options請(qǐng)求,和業(yè)務(wù)服務(wù)求助該sapi.xx.com資源請(qǐng)求是否可以執(zhí)行跨域操作牵舵。

簡(jiǎn)單科普下什么是跨域:在A域名網(wǎng)站下柒啤,但是里面的js請(qǐng)求卻使用了B域名做資源請(qǐng)求簡(jiǎn)稱跨域請(qǐng)求倦挂。如果js也是用A域名做資源請(qǐng)求就不會(huì)跨域。


問(wèn)題相關(guān)描述

http基礎(chǔ)知識(shí)

請(qǐng)求頭:

Origin : 表示了請(qǐng)求的來(lái)源

Referer : 請(qǐng)求頭包含了當(dāng)前請(qǐng)求頁(yè)面的來(lái)源頁(yè)面的地址担巩,即表示當(dāng)前頁(yè)面是通過(guò)此來(lái)源頁(yè)面里的鏈接進(jìn)入的方援。

Access-Control-Request-Method : 請(qǐng)求頭 **Access-Control-Request-Method** 出現(xiàn)于 preflight request(預(yù)檢請(qǐng)求)中,用于通知服務(wù)器在真正的請(qǐng)求中會(huì)采用哪種 HTTP 方法涛癌。

Access-Control-Request-Headers : 請(qǐng)求頭 **Access-Control-Request-Headers** 出現(xiàn)于 preflight request(預(yù)檢請(qǐng)求)中肯骇,用于通知服務(wù)器在真正的請(qǐng)求中會(huì)采用哪些請(qǐng)求頭。

響應(yīng)頭:

Access-Control-Allow-Origin**Access-Control-Allow-Origin** 響應(yīng)標(biāo)頭指定了該響應(yīng)的資源是否被允許與給定的來(lái)源(origin)共享祖很。(對(duì)應(yīng)Origin笛丙,說(shuō)明運(yùn)行在哪個(gè)網(wǎng)頁(yè)下執(zhí)行跨域請(qǐng)求)

Access-Control-Allow-Methods :響應(yīng)首部 **Access-Control-Allow-Methods** 在對(duì) preflight request.(預(yù)檢請(qǐng)求)的應(yīng)答中明確了客戶端所要訪問(wèn)的資源允許使用的方法或方法列表。(支持哪些跨域的http方法)

Access-Control-Allow-Headers : 響應(yīng)首部 **Access-Control-Allow-Headers** 用于 preflight request(預(yù)檢請(qǐng)求)中假颇,列出了將會(huì)在正式請(qǐng)求的 Access-Control-Request-Headers 字段中出現(xiàn)的首部信息胚鸯。

Access-Control-Allow-Credentials**Access-Control-Allow-Credentials** 響應(yīng)頭用于在請(qǐng)求要求包含 credentials(Request.credentials 的值為 include)時(shí),告知瀏覽器是否可以將對(duì)請(qǐng)求的響應(yīng)暴露給前端 JavaScript 代碼笨鸡。(允許跨域行為會(huì)返回true)

備注:協(xié)議定義學(xué)習(xí)

跨域訪問(wèn)過(guò)程

  1. 在A網(wǎng)頁(yè)下面姜钳,用了B域名進(jìn)行Get的資源請(qǐng)求(命名為B1),這時(shí)候?yàn)g覽器會(huì)用B1會(huì)自動(dòng)發(fā)起Options請(qǐng)求(命名為B2)形耗,B2會(huì)帶上Origin哥桥、Refer、Access-Control-Request-Method激涤、Access-Control-Headers等必要請(qǐng)求頭訪問(wèn)服務(wù)端拟糕,服務(wù)端允許該B2請(qǐng)求在A網(wǎng)頁(yè)下面進(jìn)行跨域操作,就會(huì)在響應(yīng)頭里面插入access_control_allow_origin 倦踢、access_control_methods送滞、access_control_allow_headers、 access_control_allow_credentials : true(運(yùn)行進(jìn)行跨域操作)
  2. 獲取到響應(yīng)頭4個(gè)核心的key和value后辱挥,瀏覽器才會(huì)用B1進(jìn)行發(fā)起真實(shí)的業(yè)務(wù)請(qǐng)求犁嗅,這時(shí)候B1往頭部access_control_request_headers里面聲明過(guò)的key才允許塞入口頭部進(jìn)行請(qǐng)求,最終B1的響應(yīng)頭也會(huì)包含access_control_allow_origin 晤碘、access_control_methods褂微、access_control_allow_headers、 access_control_allow_credentials這最重要的4個(gè)頭部信息园爷,如果缺少一個(gè)網(wǎng)絡(luò)層都認(rèn)為不安全宠蚂,都不會(huì)正確返回業(yè)務(wù)數(shù)據(jù)。

解決辦法

本身跨域問(wèn)題都是需要經(jīng)過(guò)服務(wù)端去審核此次行為是否安全腮介,所以不該是客戶端解決肥矢。所以應(yīng)該由長(zhǎng)連接的服務(wù)端把Options的請(qǐng)求轉(zhuǎn)發(fā)到具體業(yè)務(wù)去校驗(yàn)其安全性,不應(yīng)該簡(jiǎn)單的把Options請(qǐng)求返回200就結(jié)束了叠洗。


排查問(wèn)題思路

  1. 對(duì)比成功/失敗兩個(gè)請(qǐng)求頭和響應(yīng)頭的差距甘改,把字節(jié)流內(nèi)容打印出來(lái)。
  2. 嘗試代碼寫(xiě)死缺少的請(qǐng)求頭和響應(yīng)頭灭抑,復(fù)現(xiàn)相同場(chǎng)景下是否可以解決該問(wèn)題十艾。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市腾节,隨后出現(xiàn)的幾起案子忘嫉,更是在濱河造成了極大的恐慌,老刑警劉巖案腺,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件庆冕,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡劈榨,警方通過(guò)查閱死者的電腦和手機(jī)访递,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)同辣,“玉大人拷姿,你說(shuō)我怎么就攤上這事『岛” “怎么了响巢?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)棒妨。 經(jīng)常有香客問(wèn)我踪古,道長(zhǎng),這世上最難降的妖魔是什么券腔? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任灾炭,我火速辦了婚禮,結(jié)果婚禮上颅眶,老公的妹妹穿的比我還像新娘蜈出。我一直安慰自己,他們只是感情好涛酗,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布铡原。 她就那樣靜靜地躺著,像睡著了一般商叹。 火紅的嫁衣襯著肌膚如雪燕刻。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,144評(píng)論 1 285
  • 那天剖笙,我揣著相機(jī)與錄音卵洗,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛过蹂,可吹牛的內(nèi)容都是我干的十绑。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼酷勺,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼本橙!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起脆诉,我...
    開(kāi)封第一講書(shū)人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤甚亭,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后击胜,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體亏狰,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年偶摔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了暇唾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡啰挪,死狀恐怖信不,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情亡呵,我是刑警寧澤抽活,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站锰什,受9級(jí)特大地震影響下硕,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜汁胆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一梭姓、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧嫩码,春花似錦誉尖、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至丢间,卻和暖如春探熔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背烘挫。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工诀艰, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓其垄,卻偏偏與公主長(zhǎng)得像苛蒲,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子捉捅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

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