定制app开发vue跨域问题解决:Access to XMLHttpRequest at‘httplocalhost

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

一、背景补充(jsonp)


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

因为浏览器有同源策略(补充:协议、域名、端口相同是同源,
同源策略限制:
1、js脚本不能访问另一个域下的cookie、localstorage
2、不能操作另一个域dom
3、ajax不能跨域请求
也就是限制不同源的资源交互,不能跨域访问,但是在一个页面中引入不同域的js却可以自由访问,例如img这个标签,基于这个原理jsonp出现。
jsonp和json没关系,json是数据交换格式,jsonp是非官方数据传输协议。
怎么实现,前端传callback参数,后端用这个参数的值作为函数名称包裹json数据,这样给前端的就是js代码了。

二、实践解决跨域方法(基于封装好的axios,非原生)
1.在根目录下找到vue.config.js文件(如果没有该文件则自己创建),在proxy中设置跨域,在proxy中设置要访问的地址,并重写/api为空的字符串。

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

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

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

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

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

再补充一下原理:

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

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

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

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

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发