vue跨域问题:Access to XMLHttpRequest at‘httplocalhost解决

 更新时间:2023年01月19日 09:40:00   作者:笛子兔  
在前端发出Ajax请求的时候,有时候会产生跨域问题,下面这篇文章主要给大家介绍了关于vue跨域问题:Access to XMLHttpRequest at‘httplocalhost的解决办法,需要的朋友可以参考下

前言

前两天遇到了跨域问题,报了Access to XMLHttpRequest at‘httplocalhost的错,在网上找了一些资料,我是通过配置vue.config.js、proxy实现的,感觉非常方便,分享给大家!

一、背景补充(jsonp)

首先,来个背景,为什么会出现跨域?--(先了解一下另一种jsonp,我用的不是这种方法,但怎么说呢,比如面试,多了解几种方法总是好的,jsonp就不贴具体方法了,因为我这次没试)

因为浏览器有同源策略(补充:协议、域名、端口相同是同源,

同源策略限制:

1、js脚本不能访问另一个域下的cookie、localstorage

2、不能操作另一个域dom

3、ajax不能跨域请求

也就是限制不同源的资源交互,不能跨域访问,但是在一个页面中引入不同域的js却可以自由访问,例如img这个标签,基于这个原理jsonp出现。

jsonp和json没关系,json是数据交换格式,jsonp是非官方数据传输协议。

怎么实现,前端传callback参数,后端用这个参数的值作为函数名称包裹json数据,这样给前端的就是js代码了。

二、实践解决跨域方法(基于封装好的axios,非原生)

1.在vue项目根目录下找到vue.config.js文件(如果没有该文件则自己创建),在proxy中设置跨域,在proxy中设置要访问的地址,并重写/api为空的字符串。

vue.config.js
 
// const { defineConfig } = require('@vue/cli-service')
//在vue中使用proxy进行跨域的原理是:
//将域名发送给本地的服务器(启动vue项目的服务,loclahost:8080),
//再由本地的服务器去请求真正的服务器。
module.exports = {
  devServer:{
    proxy:{
      '/api':{//表示拦截以/api开头的请求路径
        target:'http://(这里填你项目真实的后端地址)',
        changOrigin: true,//是否开启跨域
        pathRewrite:{
          '^/api':'' //重写api,把api变成空字符,因为我们真正请求的路径是没有api的
        }
      }
    }
  }
}

也就是把vue.config.js配置成上图所示。

2、在axios.create的时候将baseURL设置为api ,简单两步,就完成啦。

http.js(封装axios的那个文件)
 
import axios from 'axios'
var http=axios.create({
    baseURL:'api',//把原来的项目地址,改成api,解决跨域问题
    timeout:3000
})

我就是通过以上这两步,解决了我的跨域问题,希望给大家参考。

再补充一下原理:

1、为什么要重写api变为空字符?

因为如果像我们那样配置好后,我们请求的实际路径会带上api,但我们发起请求的时候是不需要api的,所以要把他变成空字符。

2、在vue中使用proxy进行跨域的原理是:

将域名发送给本地的服务器(启动vue项目的服务,loclahost:8080),再由本地的服务器去请求真正的服务器。

总结

到此这篇关于vue跨域问题:Access to XMLHttpRequest at‘httplocalhost解决的文章就介绍到这了,更多相关vue跨域问题解决内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Vue3 实现一个自定义toast 小弹窗功能

    Vue3 实现一个自定义toast 小弹窗功能

    这篇文章主要介绍了Vue3 实现一个自定义toast 小弹窗,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-09-09
  • vue3+pinia的快速入门使用教程

    vue3+pinia的快速入门使用教程

    Pinia是Vue的一个存储库,它允许你跨组件/页面共享状态,下面这篇文章主要给大家介绍了关于vue3+pinia的快速入门使用,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • vue.config.js中的devServer使用

    vue.config.js中的devServer使用

    这篇文章主要介绍了vue.config.js中的devServer使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • vue中的过滤器实例代码详解

    vue中的过滤器实例代码详解

    这篇文章主要介绍了vue中的过滤器,本文通过文字实例代码相结合的形式给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-06-06
  • Vue+mui实现图片的本地缓存示例代码

    Vue+mui实现图片的本地缓存示例代码

    这篇文章主要介绍了Vue+mui实现图片的本地缓存的实例代码,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-05-05
  • vue+vue-meta-info动态设置meta标签教程

    vue+vue-meta-info动态设置meta标签教程

    这篇文章主要介绍了vue+vue-meta-info动态设置meta标签教程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • vue分类筛选filter方法简单实例

    vue分类筛选filter方法简单实例

    这篇文章主要介绍了vue分类筛选filter方法的简单实例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • vue 调用 RESTful风格接口操作

    vue 调用 RESTful风格接口操作

    这篇文章主要介绍了vue 调用 RESTful风格接口操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • 通过fastclick源码分析彻底解决tap“点透”

    通过fastclick源码分析彻底解决tap“点透”

    这篇文章主要介绍了通过fastclick源码分析彻底解决tap“点透”问题的知识内容,有兴趣的朋友学习一下吧。
    2017-12-12
  • 详解使用vue-cli脚手架初始化Vue项目下的项目结构

    详解使用vue-cli脚手架初始化Vue项目下的项目结构

    这篇文章主要介绍了详解使用vue-cli脚手架初始化Vue项目下的项目结构,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03

最新评论