Vue 是一個將視圖與數據雙向綁定的框架,它在前端開發中十分流行。Vue 內置了很多有用的工具,其中包括 axios —— 一個基于 Promise 的 HTTP 庫,它可以用于瀏覽器和 node.js 環境。
然而,在 Vue 開發過程中,你可能會遇到跨域問題。跨域請求是由客戶端發起的,且請求的地址和當前頁面地址不一致,這可能會影響到瀏覽器的安全策略。因此,為了保證前端的安全,瀏覽器會對跨域請求進行限制。
如果你使用 axios 來請求跨域 API,你可能會得到以下錯誤信息:
Access to XMLHttpRequest at 'http://xxx.com/api' from origin 'http://localhost:8080' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
這是因為在默認情況下,瀏覽器不允許跨域請求。在處理跨域請求時,我們需要在服務端設置一些參數,例如 HTTP header。
如果你能掌握這些技巧,那么,通過 axios 完成跨域請求將非常容易。
下面我們將演示如何使用 axios 進行跨域請求:
axios.get('http://xxx.com/api', { headers: { 'Access-Control-Allow-Origin': '*' } }) .then(response =>console.log(response.data)) .catch(error =>console.log(error))
在上面的代碼中,我們設置了一個 HTTP header,其中 “Access-Control-Allow-Origin” 字段用于指定允許訪問的源。使用通配符 “*” 可允許來自所有地址的請求。
不過,需要注意的是,如果我們不希望允許所有地址的訪問,可以將通配符替換為具體的地址,例如:
axios.get('http://xxx.com/api', { headers: { 'Access-Control-Allow-Origin': 'http://localhost:8080' } }) .then(response =>console.log(response.data)) .catch(error =>console.log(error))
在上面的代碼中,我們指定了允許訪問的源,這將保證我們只能從 localhost:8080 地址中訪問。如果來源地址不是指定的地址,則將無法發送請求。
另外,可能還需要在后端設置其他參數,例如:
Access-Control-Allow-Headers
: 允許請求頭中包含的字段Access-Control-Allow-Methods
: 允許使用的 HTTP 方法Access-Control-Allow-Credentials
: 是否允許發送 cookies
為了保證前端的安全,建議在開發時盡量在后端設置必要的參數,并將允許訪問的地址設置為具體的地址,以防止來自惡意用戶的攻擊。
上一篇vue2核心