当前位置: 首页 > news >正文

通过Vue自带服务器实现Ajax请求跨域(vue-cli)

通过Vue自带服务器实现Ajax请求跨域(vue-cli)

跨域

  • 原理:从A页面访问到B页面,并且要获取到B页面上的数据,而两个页面所在的端口、协议和域名中哪怕有一个不对等,那么这种行为就叫跨域。
  • 注意:类似通过请求进行跨域的,大部分情况下并不是发不出去,也有可能是被浏览器拦截了。

为什么端口、协议和域名有一个不同就不能跨域?

  • 同源策略:同源策略是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受 到 XSS、CSRF 等攻击。同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个 ip 地址, 也是非同源的。

实现方案(需要安装axios)

在这里插入图片描述

  • 原理:浏览器和浏览器之间避免不了同源策略,但是通过服务器和服务器之间的传递是不需要同源策略的。
    • 当在【页面】中点击【发送请求】,则请求会去连接同在【8080服务器】
    • 再通过【8080服务器】的请求,连接到【8081服务器】的程序
    • 【8081服务器】响应,将数据传回【8080服务器】
    • 【8080服务器】响应,将数据传到【页面】上

安装axios

  • 原理:是一种基于promise实现对ajax技术的一种封装,可以满足于各种前端框架,用于负责与后端交互,get、post后端接口信息,相当前后端的窗口。
  • 安装方法:
    • 打开CMD窗口,通过命令跳转到当时安装Vue的文件路径中
    • 在窗口中输入npm i axios,当出现added 6 packages in 2m,就安装成功了
  • 使用方法:XXX.vue文件中,在<script></script>的第一行输入import axios from 'axios'即可(如果你的axios安装时弄了一个文件夹存放的话,那么将'axios'=>'./文件名/axios')

启动Vue内置服务器8080的代理功能,在vue.config.js中进行配置

第一种:简单开启

  • 原理:优先从proxy的路径上去访问get('请求路径')的资源,也就是(拼接)http://localhost:8000/请求路径,如果没有找到资源,则再从代理服务器上访问资源。
  • 缺点:这种配置方法不适合支持配置多个代理。
    • 这种单一的从8080端口=>8081端口当然可行,但是还有8082、8083、8084…(这么多端口每个配一遍就完了!!!)
// vue.config.js文件
devServer : {// Vue内置服务器8080端口proxy : 'http://localhost:8000'
}
// XXX.vue文件
axios.get('/请求路径').then(response => {// response.data:响应数据信息console.log('响应数据', response.data);},error => {// error.message:出现错误时,显示错误信息console.log('错误信息', error.message);}
)

第二种:高级开启(常用)

devServer : {proxy : {// 凡事请求路径以/api开始的,都走这个代理'/api' : {// 端口路径target : 'http://localhost:8000',// 重写'/api'路径pathRewrite : {'^/api':''},// 默认值true:表示支持 websocketws : true,// 默认值true:表示改变起源(让目标服务器不知道真正的起源)changeOrigin : true},'/foo' : {target : '<other_url>'}}}
  • 注意:pathRewrite : {'^/api':''}原本是没有的,可以自己添加,用来重写’/api’路径,
    • 以上的意思是将’/api’路径改为空,也就是请求路径前不用写’/api’
// XXX.vue文件
axios.get('(如果没设置pathRewrite的话,这里是要加上/api的)/请求路径').then(response => {// response.data:响应数据信息console.log('响应数据', response.data);},error => {// error.message:出现错误时,显示错误信息console.log('错误信息', error.message);}
)
http://www.lryc.cn/news/209556.html

相关文章:

  • Vue2-计算属性的用法
  • SM3加密udf
  • ce从初阶到大牛(两台主机免密登录)
  • CS224W2.3——传统基于特征的方法(图层级特征)
  • 【CSS】包含块
  • [SpringCloud] Nacos 简介
  • TypeScript - 字符串的字面类型
  • CRM客户管理系统源码 带移动端APP+H5+小程序
  • Mac版好用的Git客户端 Fork 免激活
  • 有一个带头结点的单链表L,设计一个算法使其元素递增有序
  • JAVA将EEE MMM dd HH:mm:ss zzz yyyy日期格式化为yyyy-MM-dd HH:mm:ss形式
  • 【Qt】文件系统
  • PostgreSQL 基础知识
  • 基于 ResNet18 架构使用 deformable convolution的车道线检测
  • C++in/out输入输出流[IO流]
  • MongoDB的安装
  • SQL查询优化---如何查询截取分析
  • vue3基础流程
  • Vue 数据绑定 和 数据渲染
  • 【原创】解决Kotlin无法使用@Slf4j注解的问题
  • CDN是如何实现全球节点同步的
  • Centos7 Linux系统下生成https的crt和key证书
  • 性能测试工具——Jmeter的安装【超详细】
  • 系列三十、Spring AOP vs AspectJ AOP
  • 面向对象设计模式——策略模式
  • Kubernetes - Ingress HTTP 负载搭建部署解决方案(新版本v1.21+)
  • 刚刚:腾讯云3年轻量2核2G4M服务器优惠价格366元三年
  • `include指令【FPGA】
  • iphone备份后怎么转到新手机,iphone备份在哪里查看
  • JAVA毕业设计106—基于Java+Springboot的外卖系统(源码+数据库)