2024国产成人精品免费视频|日本免费一区二区三区毛片|久久97超碰色中文字幕|亚洲天堂a中文字幕

https與http混用導(dǎo)致post請(qǐng)求變成OPTIONS請(qǐng)求的案例

2022-08-12 11:46 欄目:技術(shù)開(kāi)發(fā) 查看(10872)

某站點(diǎn)反饋極少數(shù)情況下某正常接口返回的結(jié)果為空,而正常情況下這個(gè)接口返回的結(jié)果不可能為空。

x1 問(wèn)題分析

通過(guò)打開(kāi)日志記錄分析日志,發(fā)現(xiàn)服務(wù)端請(qǐng)求日志中出現(xiàn)了異常的OPTIONS請(qǐng)求,而正常情況下應(yīng)該是post請(qǐng)求。如下圖所示:

微信截圖_20220812110039

從上述日志記錄可知,在請(qǐng)求的header中還包含了origin字段,正常非跨域的請(qǐng)求是不會(huì)出現(xiàn)這個(gè)字段的。但是這個(gè)網(wǎng)站并沒(méi)有做前后端分離,理論上在站內(nèi)訪(fǎng)問(wèn)不會(huì)存在跨域請(qǐng)求。再次根據(jù)上述日志細(xì)看,發(fā)現(xiàn)referer等信息都是http請(qǐng)求的頁(yè)面,也就是這個(gè)請(qǐng)求是在http頁(yè)面發(fā)起了。

然而這個(gè)網(wǎng)站默認(rèn)訪(fǎng)問(wèn)方式是https,只是沒(méi)做強(qiáng)制必須用https訪(fǎng)問(wèn),也就是http也可以訪(fǎng)問(wèn)。估計(jì)是極個(gè)別網(wǎng)站手動(dòng)輸入頁(yè)面地址使用的是http路徑訪(fǎng)問(wèn)。請(qǐng)求例子如下:

ajax('post','http://test.csweigou.com/api/test/index',{data},0,function (d) {
   console.log(d);
});

在http頁(yè)面發(fā)送上述請(qǐng)求后,發(fā)現(xiàn)控制臺(tái)網(wǎng)絡(luò)監(jiān)聽(tīng)界面出現(xiàn)了3次記錄,如圖所示:

微信截圖_20220812112635

上述三個(gè)記錄分別是:①、307重定向;②、跨站請(qǐng)求被禁止;③、觸發(fā)預(yù)檢。而在后臺(tái)服務(wù)端日志中看到的OPTIONS請(qǐng)求其實(shí)就是第三條記錄產(chǎn)生的。如圖所示:

微信截圖_20220812112922

x2 問(wèn)題解決

在后臺(tái)服務(wù)端獲取前臺(tái)發(fā)送的請(qǐng)求數(shù)據(jù)的時(shí)候,我們一般是不會(huì)使用OPTIONS來(lái)接受數(shù)據(jù),于是就導(dǎo)致了最開(kāi)始提到的接口數(shù)據(jù)為空的異常結(jié)果。要避免解決這樣的問(wèn)題可以強(qiáng)制使用https,全站強(qiáng)制啟用https訪(fǎng)問(wèn),即便用戶(hù)手工輸入http鏈接也會(huì)重定向到https,這樣就不會(huì)產(chǎn)生跨站請(qǐng)求。

x3 相關(guān)知識(shí)鏈接

關(guān)于出現(xiàn)OPTIONS請(qǐng)求,這種請(qǐng)求方式并不是我們預(yù)期常見(jiàn)的訪(fǎng)問(wèn)請(qǐng)求,根據(jù)查閱相關(guān)資料可知有如下幾個(gè)跟OPTIONS有關(guān)系的要點(diǎn)(下面3個(gè)要點(diǎn)是網(wǎng)絡(luò)上其他網(wǎng)友總結(jié)的,僅供參考):

1、Http Options Method:OPTIONS請(qǐng)求方法的主要用途有兩個(gè):①、獲取服務(wù)器支持的HTTP請(qǐng)求方法;②、用來(lái)檢查服務(wù)器的性能。

2、CORS:即跨域資源共享,是一種網(wǎng)絡(luò)瀏覽器的技術(shù)規(guī)范,它為Web服務(wù)器定義了一種方式,允許網(wǎng)頁(yè)從不同的域訪(fǎng)問(wèn)其資源。而這種訪(fǎng)問(wèn)是被同源策略所禁止的。CORS系統(tǒng)定義了一種瀏覽器和服務(wù)器交互的方式來(lái)確定是否允許跨域請(qǐng)求。

3、Preflighted Requests:即預(yù)檢請(qǐng)求,是CORS中一種透明服務(wù)器驗(yàn)證機(jī)制。預(yù)檢請(qǐng)求首先需要向另外一個(gè)域名的資源發(fā)送一個(gè) HTTP OPTIONS 請(qǐng)求頭,其目的就是為了判斷實(shí)際發(fā)送的請(qǐng)求是否是安全的。下面的2種情況需要進(jìn)行預(yù)檢: ①、簡(jiǎn)單請(qǐng)求,比如使用Content-Type 為 application/xml 或 text/xml 的 POST 請(qǐng)求; ②、置自定義頭,比如 XJSON等。

與我們的項(xiàng)目經(jīng)理聯(lián)系
掃二維碼與項(xiàng)目經(jīng)理溝通

我們?cè)谖⑿派?4小時(shí)期待你的聲音

解答本文疑問(wèn)/技術(shù)咨詢(xún)/運(yùn)營(yíng)咨詢(xún)/技術(shù)建議/互聯(lián)網(wǎng)交流

轉(zhuǎn)載請(qǐng)注明出處:https與http混用導(dǎo)致post請(qǐng)求變成OPTIONS請(qǐng)求的案例 - 微構(gòu)網(wǎng)絡(luò)
分享:
標(biāo)簽:
天祝| 介休市| 尉犁县| 卫辉市| 桂平市| 民丰县| 上高县| 长沙市| 长阳| 延边| 龙山县| 德州市| 九台市| 微博| 乌兰县| 绥中县| 深水埗区| 洛宁县| 罗甸县| 扎赉特旗| 沐川县| 榆中县| 鄂尔多斯市| 弋阳县| 仁寿县| 肃南| 西乌| 沈阳市| 墨江| 舞钢市| 龙南县| 潢川县| 金塔县| 乐平市| 乡城县| 云南省| 仁怀市| 正宁县| 永丰县| 高阳县| 海兴县|