什么是跨域?
域名 协议 ip地址 端口 任何一个不一样 就跨域
解决跨域?
1 jsonp —使用script的src发送 只能get 请求
2 cors 后台设置允许跨域 需要后台设置 允许跨域
所有后台语言 都可以设置
3 服务器代理,服务器之间不存在跨域问题
vue在 vue.config.js 可以配置重写webpack代理
webpack代理原理:
说白了 就是通过 在本地通过nodejs 启动一个微型服务,
然后我们先请求我们的微型服务, 微型服务是服务端, 服务端**
代我们
去请求我们想要的跨域地址, 因为服务端是不受同源策略
**的限制的, 具体到开发中,打包工具webpack集成了代理的功能,可以采用配置webpack的方式进行解决, 但是这种仅限于 本地开发期间, 等项目上线时,还是需要另择代理 nginx
以下为vuecli中配置代理的配置 :
官方地址:
https://cli.vuejs.org/zh/config/#devserver-proxy
// 在根目录添加一个 vue.config.js 文件
// 重启项目
module.exports = {
//以下配置的效果
// “/api/getok.php” --> http://122.51.238.153/getok.php
// 修改的配置
devServer: {
proxy: {
//如果地址以/api开头,它就会请求到 http://122.51.238.153
'/api': {
target: 'http://122.51.238.153',
changeOrigin: true,
ws: true,
pathRewrite: {
'^/api': '', //重写请求路径
},
}
}
}
}
target
:接口域名;
changeOrigin
: 如果设置为true
,那么本地会虚拟一个服务端接收你的请求并代你发送该请求;
ws
: 是否代理 websockets
pathRewrite
:写 /api/xx/xx. 最后代理的路径就是 http://xxx.xx.com/api/xx/xx.
不对啊, 我正确的接口路径里面没有/api啊. 所以就需要 pathRewrite
,用'^/api':''
, 把’/api’去掉, 这样既能有正确标识, 又能在请求接口的时候去掉/api.
上线了如果还有跨域 可以让后台设置 允许跨域