XMLHttpRequest簡(jiǎn)單了解一下

XMLHttpRequest簡(jiǎn)單了解一下

最近的項(xiàng)目開發(fā)中遇到這么一個(gè)問題:

因?yàn)槟承v史原因,后端大大需要對(duì)線上數(shù)據(jù)做些修復(fù)處理,但是因?yàn)椴皇呛?jiǎn)單執(zhí)行個(gè)SQL就能解決,所以就需要前端觸發(fā)哈。
但是呢,我們的前端小妹又懶得寫個(gè)頁(yè)面寫個(gè)按鈕事件,所以打算就直接寫個(gè)HTTP GET請(qǐng)求,調(diào)用后端的Dubbo接口來進(jìn)行修復(fù)處理。
這樣就很簡(jiǎn)單咯~
上線后直接在瀏覽器中調(diào)用這個(gè)get請(qǐng)求,數(shù)據(jù)就修復(fù)啦~
嗯,想象很美好,可是一上線就傻眼了,調(diào)用接口直接 403 Forbidden了,
查看了一下代碼才想起,當(dāng)初為了避免csrf攻擊,我們?cè)谏a(chǎn)環(huán)境的Node端做了Referer來源校驗(yàn), 代碼如下:

app.use('/api/*', function(req, res, next) {
  // 引入 "來源" 判斷,避免 CSRF 攻擊
  const baseUri = '.xxx.com'  // 合法域名
  if (runtime === 'product') {
    // 如果 referer 不存在那么返回 403
    if (!req.headers.referer) {
      res.sendStatus(403)
      return
    }
    // 利用 url.parse 獲取 hostname
    const refererURL = url.parse(req.headers.referer)
    // 判斷 hostname 是否合法
    const isAllowed = refererURL.hostname.endsWith(baseUri)
    if (!isAllowed) {
      res.sendStatus(403)
      return
    }
  }
  next()
})  

OMG!難不成我們要修改代碼重新走上線流程么?!就為了一個(gè)按鈕?!想想就可怕...

冷靜了一會(huì)兒后,我們開始想辦法解決。

這時(shí),我們想到了原生的ajax請(qǐng)求(即使用XMLHttpRequest)。

首先,打開控制臺(tái),創(chuàng)建一個(gè)異步對(duì)象

const ajax = new XMLHttpRequest();

然后,設(shè)置請(qǐng)求的url參數(shù)

ajax.open('get', '/api/hotfix/');
// 參數(shù)一是請(qǐng)求的類型, 參數(shù)二是請(qǐng)求的url, 可以帶參數(shù)

最后, 發(fā)送請(qǐng)求

ajax.send();

完美 └(^^)┐ ┌(^^)┘

當(dāng)然如果需要查看請(qǐng)求是否發(fā)送成功還可以做如下操作:

// 注冊(cè)事件 onreadystatechange 狀態(tài)改變就會(huì)調(diào)用
ajax.onreadystatechange = function () {
   if (ajax.readyState === 4 && ajax.status === 200) {
    // 如果能夠進(jìn)到這個(gè)判斷 說明請(qǐng)求成功
   console.log('請(qǐng)求成功');
   }
}

記錄完畢~(?ˉ?ˉ?)

關(guān)于XMLHttpRequest更多了解可移步XMLHttpRequest MDN

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,725評(píng)論 25 709
  • 每次教育部等官方學(xué)科評(píng)估出路,某乎會(huì)成為甚于當(dāng)年人人渣浪的開撕中心 我感覺瀏覽和評(píng)論的鍵盤俠們可能分以下幾種: 高...
    Dear_Cata閱讀 433評(píng)論 0 0
  • 成為這個(gè)超級(jí)展會(huì)的一員,我屬于后勤布置梯度,體驗(yàn)這繁華背后的巨大的準(zhǔn)備工作。你看到的最好的,是我們工作99%的
    花霧非非閱讀 136評(píng)論 0 0
  • 二十歲的姑娘 她遇到他,在異國(guó),一同留學(xué),他是她的學(xué)弟。平時(shí)的交流和一起打工的生活,使得她對(duì)他漸生好感。 她是語(yǔ)速...
    她she閱讀 294評(píng)論 0 0
  • “她的眼睛很漂亮,漂亮到仿佛可以從中看到日月星辰,山川河流,可以看到北國(guó)的風(fēng)雪和南國(guó)的花開,可以看到大漠孤煙和小橋...
    晨曦喲閱讀 511評(píng)論 0 0

友情鏈接更多精彩內(nèi)容