問題描述:
在angularjs中涵卵,使用$.ajax向服務(wù)器請求資源時(shí)变隔,在Chrome調(diào)試面板中,Network里有兩次看似相同的網(wǎng)絡(luò)請求做盅。
在請求時(shí),前者與后者的時(shí)間差距在500毫秒以內(nèi)窘哈。
查閱網(wǎng)上資料:
- 1.是submit和button的默認(rèn)事件導(dǎo)致重復(fù)提交吹榴,加個(gè)preventDefault()或者unbind('click)
- 2.angular路由里聲明了controller,然后在html里又用了ng-controller滚婉,導(dǎo)致的图筹。
然而,我這里并不是让腹,幾經(jīng)查找發(fā)現(xiàn)一個(gè)關(guān)鍵詞preflight
远剩。
原來,在請求中分為簡單請求和復(fù)雜請求兩種骇窍。具體區(qū)別瓜晤,參見文檔:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS
preflight的作用是:不同于簡單請求,“預(yù)請求”要求必須先發(fā)送一個(gè) [OPTIONS]方法請求給目的站點(diǎn)腹纳,來查明這個(gè)跨站請求對于目的站點(diǎn)是不是安全的可接受的痢掠。這樣做驱犹,是因?yàn)榭缯菊埱罂赡軙?huì)對目的站點(diǎn)的數(shù)據(jù)產(chǎn)生影響。
明白原理后足画,發(fā)現(xiàn)第一次請求服務(wù)器沒有實(shí)質(zhì)數(shù)據(jù)返回雄驹,第二次請求返回了具體數(shù)據(jù)。并且锌云,服務(wù)器端API僅被調(diào)用了一次荠医。也就是第一次請求是為了第二次請求做準(zhǔn)備。