vue.config.js跨域问题解决

讲解视频

问题背景

目标地址:
在这里插入图片描述
而当前项目启动是http,协议名不同,所以跨域了

解决步骤和解答

1. 新建vue.config.js文件

2. 添加如下代码:

一般目标路径target写 域名 就可以了

在这里插入图片描述

但其实,写路径也可以,不写路径也可以,没有强制的要求

  • 写路径,就要替换
    在这里插入图片描述

  • 不写路径就不用替换

3. 配置好后,修改访问方式

修改前:
在这里插入图片描述修改后:

在这里插入图片描述

重写域名pathRewrite,指的是把
在这里插入图片描述里面的api替换成空,而不是目标路径尾部的api换成空

  • 修改了,需要替换的情况
    在这里插入图片描述

  • 没修改,不需要替换的情况
    在这里插入图片描述
    明白了这一点,我的项目也可以替换成:
    在这里插入图片描述

记录一下自己的疑惑(跨域问题)

代码介绍

vite.config.js 配置代理服务器

  server: {
    proxy: {
      '/tyqw': {
        //   '/api/v1/services/aigc/text-generation/generation': {

        // target: 'https://dashscope.aliyuncs.com' // 目标服务器地址
        // target: 'http://localhost:3000' // 目标服务器地址
        target: 'https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation/', // 目标服务器地址

        changeOrigin: true, // 是否改变源地址
        rewrite: (path) => path.replace(/^\/tyqw/, '') // 重写路径
      },
      '/xfxh': {
        //   '/api/v1/services/aigc/text-generation/generation': {

        // target: 'https://dashscope.aliyuncs.com' // 目标服务器地址
        // target: 'http://localhost:3000' // 目标服务器地址
        target:
          'https://spark-api.xf-yun.com/v1.1/chat?authorization=YXBpX2tleT0nMjhlNDIwNzBhOWZjNTIzMjgyMjRjYjQwZGEzYjdiZTYnLCBhbGdvcml0aG09J2htYWMtc2hhMjU2JywgaGVhZGVycz0naG9zdCBkYXRlIHJlcXVlc3QtbGluZScsIHNpZ25hdHVyZT0nMzBuU1ByMjZvZHpRa2YrdVdLdC8rb3BPZ2Jzd1FSWXlzVjRrd3ExQTJERT0n&date=Sun%2C+31+Mar+2024+09%3A29%3A25+GMT&host=127.0.0.1%3A5173', // 目标服务器地址

        changeOrigin: true, // 是否改变源地址
        rewrite: (path) => path.replace(/^\/tyqw/, '') // 重写路径
      }
    }
  }

然后修改请求地址

 .post('tyqw', data, config)
    // .post('/tyqw', data, config)
    //   '/api/v1/services/aigc/text-generation/generation': {

    .then((response) => {

问题1:.post(‘tyqw’, data, config)

.post('tyqw', data, config)
 .post('/tyqw', data, config)

这两种写法都可以吗,为什么

在发送网络请求时,.post('tyqw', data, config).post('/tyqw', data, config) 这两种写法的含义是不同的,主要取决于你的应用程序的基本路径和路由设置。

  1. .post('tyqw', data, config): 这种写法是相对路径的写法,表示发送 POST 请求到当前页面的基本路径下的 tyqw 路径。如果你的当前页面的基本路径为 http://example.com/myapp/,那么这个请求实际上是发送到 http://example.com/myapp/tyqw

  2. .post('/tyqw', data, config): 这种写法是绝对路径的写法,表示发送 POST 请求到根路径下的 tyqw 路径。无论当前页面的路径是什么,都会发送请求到 http://example.com/tyqw

这两种写法都可以,取决于你的需求和项目的配置。使用相对路径可以使得你的代码更加灵活,而使用绝对路径可以保证请求的准确性,不会受到页面路径的影响。

需要注意的是,对于前端单页应用(SPA)等情况下,通常会使用绝对路径来发送请求,以确保路由切换时能够正确地发送请求到后端 API。

这也就是为什么我这两种写法都没有报错,因为我的路由是跟路径,所以不管是相对还是绝对路径,都是一样的

问题2: target: ‘https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation/’

target: ‘https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation/’, // 目标服务器地址
改成
target: ‘https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation’, // 目标服务器地址
会有影响吗,这两种写法有什么区别

在目标服务器地址的最后是否包含斜杠 / 会对请求产生影响,这取决于服务器的配置和预期的行为。下面是这两种写法的区别:

  1. 'https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation/':这种写法表示目标服务器地址以斜杠结尾。当发送请求时,如果请求中的路径没有指定具体的文件或资源,服务器可能会做重定向处理,将请求重定向到一个类似于 'https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation/index.html' 的具体资源上。

  2. 'https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation':这种写法表示目标服务器地址没有斜杠结尾。在这种情况下,请求将直接发送到指定的路径,不会触发重定向行为。

如果目标服务器的配置能够处理这两种情况并且行为一致,那么这两种写法不会有太大影响。但如果服务器的配置或行为有所不同,这两种写法可能会导致不同的结果。通常建议根据服务器的实际行为来选择适当的写法。

  • 25
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在vue2中,可以通过配置vue.config.js文件来实现跨域。具体步骤如下: 1. 在项目根目录下创建vue.config.js文件。 2. 在vue.config.js文件中添加以下代码: ``` module.exports = { devServer: { proxy: { '/api': { target: 'http://localhost:300', // 代理的目标地址 changeOrigin: true, // 是否跨域 pathRewrite: { '^/api': '' // 重写路径 } } } } } ``` 3. 在代码中使用axios等请求库时,将请求地址改为代理地址,例如: ``` axios.get('/api/data') ``` 这样就可以实现跨域请求了。其中,target为代理的目标地址,changeOrigin为是否跨域,pathRewrite为重写路径。 ### 回答2: Vue.js是一种直观、轻量、高效的前端框架,它遵从组件化开发思想,能够简化用户界面开发过程,并支持以JSON格式进行开发。但是在开发过程中,经常涉及到跨域问题,而Vue2提供了一种功能强大的方式,即vue.config.js配置方法来解决跨域问题。 在Vue2中,跨域请求需要在服务器端进行配置。在vue.config.js中,可以通过配置devServer属性来实现解决跨域请求的问题。其中devServer属性包含了一系列的配置,包括:host、port、open、proxy等。其中proxy属性是配置跨域请求的最主要方法。 在使用proxy属性时,需要通过向proxy对象添加属性来配置跨域请求。具体的方法是:比如需要访问一个远程API服务地址,这个API服务地址为:http://www.apiserver.com/api。在配置文件中,需要添加以下代码: ``` module.exports = { devServer: { proxy: { '/api': { target: 'http://www.apiserver.com', changeOrigin: true, secure: false, pathRewrite: { '^/api': '/api' } } } } } ``` 以上配置的含义是:将本地开发环境中的请求中的/api路径映射到远程服务地址:http://www.apiserver.com/api中。需要注意的是,由于跨域请求是基于HTTP协议实现的,需要在请求中添加一些标头信息来支持请求的正确传输,因此在配置中需要设置changeOrigin属性为true。而secure属性则设置为false,因为异域服务器一般不会开启HTTPS协议。另外,需要使用pathRewrite属性来映射本地请求的路径信息和远程服务的路径信息。 总结来说,Vue2使用vue.config.js配置跨域请求的方法非常简单。只需要在配置文件中添加一个proxy对象,并在proxy对象中添加需要跨域访问的目标地址即可。通过这种方法,Vue2可以轻松地在开发环境中实现与远程服务器的通信。 ### 回答3: Vue.js 是一款流行的 JavaScript 框架,它提供了丰富的功能和开发工具,使得构建复杂客户端应用程序变得更加容易和高效。但是在实际开发中,由于浏览器的安全策略,可能需要跨域访问不同的 API 服务,这就需要对 Vue 项目进行配置跨域Vue2 使用 vue.config.js 进行配置。vue.config.js 是一个可选的配置文件,如果你的 Vue2 项目需要改变一些默认配置,那么你就需要创建这个文件,并在其中进行配置。在 Vue2 中,配置文件默认是不提供的,所以要手动创建。 在 vue.config.js 中配置跨域需要使用 devServer.proxy 选项。devServer 是一个 webpack-dev-server 的选项,用来配置开发服务器的行为。proxy 选项用来指定代理配置。代理是一种常用的跨域解决方案,在客户端发起请求时,它会将请求发送到服务器,并将服务器的响应返回给客户端。 首先,在项目根目录下创建一个 vue.config.js 文件,并写入以下代码: ``` module.exports = { devServer: { proxy: { '/api': { target: 'http://api.example.com', changeOrigin: true, pathRewrite: { '^/api': '' } } } } } ``` 在上述代码中,我们定义了一个名为 api 的代理配置,将项目中的以 /api 开头的请求转发到 http://api.example.com 地址下。其中,changeOrigin 选项表示将请求头中的 host 设置为目标地址,pathRewrite 选项表示将 /api 开头的路径重写为空字符串。这样的话,当我们在客户端使用 axios 发送请求时,只需要将请求地址设置为 /api/xxx 就可以实现跨域访问后端 API 了。 总之,通过 vue.config.js 配置跨域可以有效地解决 Vue2 项目中跨域访问的问题,同时也可以提高我们的开发效率并改善用户体验。但是,需要注意的是,在生产环境中必须关闭跨域访问,否则会存在安全风险。因此,在生产环境中应该使用服务器端代理、JSONP、CORS 等其他跨域解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值