同源策略和跨域
- 同源策略:当发起一个http请求的时候,我们当前的网址和被请求的网址的-》 协议、域名、端口必须一致,如果有一个不同就产生了非同源 策略,也就是跨域了.
- 同源策略的目的是为了保护站点资源的安全性
- 同源策略只有浏览器有,其他的软件,系统没有的.
如果产生了非同源策略[跨域],如何解决?
- jsonp
- 原理: 创建一个script标签,使用src属性请求,因为这个标签不受浏览器同源策略限制,所以可以跨域请求
- 其他的
- img
- link
- iframe
- 借助后端语言完成请求代理
- java
- php
- nodejs
- vue项目中使用vue.config.js里面配置跨域
- vue.config.js 是vue脚手架的配置文件
- vue@cli 创建vue项目
- vue脚手架底层是基于webpack封装的
- webpack不是给浏览器用的,必须使用nodejs来执行
- nodejs是把浏览器的内核抽离了出来,安装到了电脑的全局环境中,让任何位置都可以允许js文件.nodejs是后端语言.
- 代理请求的过程:vue.config.js => webpack => nodejs[后端程序代理请求]
- cors跨域
- 后端做了请求的白名单处理 *
- 只要前端的浏览器支持cors跨域就可以
封装自己的axios
axios
- 目前是最火的前端请求库-工具,它是基于ajax和promise封装的,它强大的地方在于可以运行在浏览器端,也可以运行在nodejs端.
- 安装使用和封装
- 安装:npm i axios
第一个方法:
在vue.config.js
devServer:{
proxy:{
"^/api":{//用‘/api’来拼接
target:"接口"
}
}
},
main.js
import axios from 'axios';
Vue.prototype.$http = axios;
//请求拦截器
axios.interceptors.request.use((config) => {
return config
},
function (error) {
return Promise.reject(error)
}
)
第二种:
在vue.config.js
devServer: {
proxy: {
'^/ht': {//用‘/ht’来拼接
target: '接口',
pathRewrite: { '^/ht': '' }//调用完后删除'/ht'
},
}
},
//在router
//进入电商页面时优先显示home页面
//redirect: "/home",
main.js
import axios from 'axios'
axios.interceptors.request.use((config)=>{
return config
})
axios.defaults.baseURL='/ht/'
Vue.prototype.$http=axios
页面中正常调用接口