解决 Axios 跨域问题,轻松实现接口调用

这篇具有很好参考价值的文章主要介绍了解决 Axios 跨域问题,轻松实现接口调用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

跨域是指访问另外一个域的资源,由于浏览器的同源策略,默认情况下使用 XMLHttpRequest 和 Fetch 请求时是不允许跨域的。跨域的根本原因是浏览器的同源策略,这是由浏览器对 JavaScript 施加的安全限制。

axios解决跨域,前端,后端,java,json,javascript

Axios 跨域常见报错

跨域请求被阻止 (Cross-Origin Request Blocked)

这是由浏览器实施的同源策略导致的错误。浏览器在默认情况下不允许从一个源发送请求到另一个源,除非目标服务器明确授权。如果没有采取任何跨域解决方案,浏览器会拦截该请求,并报告此错误。

无法获取响应内容 (No 'Access-Control-Allow-Origin' header is present on the requested resource)

当使用 CORS (跨域资源共享) 解决方案时,服务器需要在响应头中添加 Access-Control-Allow-Origin 头信息来指示允许访问资源的来源。如果服务器没有正确配置这个头信息或配置不正确,浏览器会报告此错误,表示未经授权无法获取响应内容。

请求出现网络错误 (Network Error)

当跨域请求在发送时出现网络错误(例如目标服务器不可访问、请求超时等),Axios 会捕获这个错误,并将其报告为 "Network Error"。

预检请求失败 (Preflight request failed)

当使用 CORS 发起一些复杂的请求(例如带有自定义头信息或使用 PUT、DELETE 等非简单请求类型),浏览器会在发送真实请求之前发送一个 OPTIONS 预检请求。如果服务器没有正确处理 OPTIONS 请求或未返回正确的预检响应头,浏览器会报告 "Preflight request failed" 错误。

代理服务器错误

如果使用代理服务器作为解决方案,但代理服务器配置有误或不可用,Axios 可能会报告与代理服务器连接相关的错误。

Axios 跨域的解决方法

axios解决跨域,前端,后端,java,json,javascript

1. CORS

CORS 需要服务器设置 Access-Control-Allow-Origin 响应头,表示该资源可以被指定的域进行跨域访问。

 
// 服务端代码
res.setHeader('Access-Control-Allow-Origin', '*'); 

2. 服务端启用 CORS

比如 Node.js  Express 启用 CORS:

 
const express = require('express')
const app = express()

app.use(function (req, res, next) {

  // 启用 CORS
  res.header('Access-Control-Allow-Origin', '*');

  next();  
})

3. JSONP

JSONP 的原理是动态插入

 
    import axios from 'axios';

axios.get('/api/user?callback=fetchUser');

function fetchUser(user) {
  console.log(user); 
}

服务端返回 JSON 数据并带上函数调用:

 
  fetchUser({
  name: 'jack'
})

4. 代理服务器

在开发环境下,可以在本地启动一个代理服务器,实现跨域访问。在下面的例子中,客户端可以通过访问代理服务器的 /api/data 路由来获取目标服务器上的数据。

 
    // Node.js 代理服务器
const express = require('express');
const axios = require('axios');
const app = express();
const port = 3000;

app.use(express.json());

app.get('/api/data', async (req, res) => {
  try {
    const response = await axios.get('https://目标服务器的URL/data');
    res.json(response.data);
  } catch (error) {
    res.status(500).json({ error: 'Failed to fetch data from the target server' });
  }
});

app.listen(port, () => {
  console.log(`Proxy server is running on http://localhost:${port}`);
});

Axios 跨域代码实例

假设存在一个需要跨域访问的 API:

 
  
axios.get('http://cross-domain-api.com/users')

可以在本地 3000 端口启动一个 Express 代理服务器:

 
    const express = require('express');
const { createProxyMiddleware } = require('http-proxy-middleware');

const app = express();

app.use('/api', createProxyMiddleware({ 
  target: 'http://cross-domain-api.com', // 跨域目标接口
  changeOrigin: true 
}))

app.listen(3000);

然后修改 axios 请求地址,指向代理服务器即可:

 
axios.get('http://localhost:3000/api/users')
 
## 提示与注意事项
  • 选择跨域解决方案时,考虑到项目的复杂性和需求,选择最合适的方法。
  • JSONP 只支持 GET 请求,不适用于所有场景。
  • CORS 需要服务器端的支持,在一些旧版本的浏览器中可能不完全支持。

使用 Apifox 调试后端接口

Apifox = Postman + Swagger + Mock + JMeter,Apifox 支持调试 http(s)、WebSocket、Socket、gRPC、Dubbo 等协议的接口,并且集成了 IDEA 插件。在后端人员写完服务接口时,测试阶段可以通过 Apifox 来校验接口的正确性,图形化界面极大的方便了项目的上线效率。

axios解决跨域,前端,后端,java,json,javascript

总结

Axios 跨域常用的解决方法有 CORS、JSONP、代理等,开发环境可通过代理服务器实现跨域,CORS 需要服务端设置 Access-Control-Allow-Origin 响应头,JSONP 只支持 GET 请求。选择适合项目需求的解决方案能够很好地解决跨域问题,保障应用的正常运行。

知识扩展:

  • FastAPI 与 Flask:Python Web 两大流行框架综合对比
  • Axios 怎么通过 FormData 对象上传文件?

参考资料:文章来源地址https://www.toymoban.com/news/detail-743835.html

  • MDN - 跨域资源共享CORS:跨源资源共享(CORS) - HTTP | MDN

到了这里,关于解决 Axios 跨域问题,轻松实现接口调用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 1.vue3+vite开发中axios使用及跨域问题解决

    一、跨域问题解决  1.基于vite+vue3配置时,在vite.congig.js文件server项目中添加 proxy代理   文件名:vite.congig.js 2.axios封装时设置基本路径baseURL 二、provide/inject 实现axios 全区使用   在main.js中provide    app.provide(\\\'axios\\\', axios)   在组件内获取   import { inject } from \\\'vue\\\'   const axios = i

    2024年02月12日
    浏览(31)
  • 【Vue.js】Vue3全局配置Axios并解决跨域请求问题

    对于前后端分离项目,前端和后端端口不能重复,否则会导致前端或者后端服务起不来。例如前端访问地址为: http://localhost:8080/ ,后端访问地址为 http://localhost:8081/ 。后端写好Controller,当用Axios访问该接口时,将会报错: Access to XMLHttpRequest at \\\' http://localhost:8081/login \\\' from

    2024年02月05日
    浏览(52)
  • 【Vue 快速入门系列】一文透彻vue中使用axios及跨域问题的解决

    Axios(ajax i/o system),是Vue创建者主推的请求发送方式,因其简单的配置与良好的性能被前端爱好者所喜爱。众所周知,在进行网页设计时经常需要从后端拿数据,在Web应用初期会将整个页面或者文档直接拿过来,随着Web应用的发展,人们对性能的不断提升,逐渐向无页面刷新

    2024年02月12日
    浏览(30)
  • 前端异步请求并解决跨域问题(Ajax+axios框架)、后端响应多个数据(JSON)

    目录 一、前后端同步异步请求 1.同步请求: 2.异步请求: 3.跨域问题(前端问题) 4.axios框架(封装后) 二、后端向前端响应多个数据-JSON 1.同步请求:         发送一个请求,回应请求,回应的内容会覆盖浏览器中的内容,这样会 打断 前端其他的正常操作。 2.异步请求:

    2024年02月07日
    浏览(54)
  • 记:vite3+vue3+axios前端项目跨域问题解决【前端和服务器nginx配置】

    前言:什么是跨域,网上一搜一大把,所以这里直接跳过,直入主题。 处理方式:不通过后端处理跨域,通过前端+服务器nginx处理。 1.前端涉及处理跨域的必要配置(开发环境、生产环境):vite3、vue3、axios 2.服务器涉及处理跨域的配置(生产环境):nginx【主要用到其配置

    2024年02月01日
    浏览(41)
  • axios二次封装(详细+跨域问题)

    一,为什么要对axios进行二次封装? 答:主要是要用到请求拦截器和响应拦截器; 请求拦截器 : 可以在发请求之前可以处理一些业务 响应拦截器 : 当服务器数据返回以后,可以处理一些事情 二,axios的二次封装 2.1 安装axios 在当前的项目路径下安装 安装成功 2.2 通常情况下

    2024年02月06日
    浏览(33)
  • Vue+axios如何解决跨域

    1、为什么会产生跨域?        出于浏览器的同源策略限制。                                                                                                             同源策略(Sameoriginpolicy)是一种约定,是浏览器的一种安全机制,它阻止了 不同域 之间

    2024年02月17日
    浏览(34)
  • Vue axios 的使用与跨域问题

    功能特点 可以在浏览器中发送 XMLHttpRequests 请求 可以在 node.js 中发送 http请求 支持 Promise API 可以拦截请求和响应 可以转换请求和响应数据 客户端支持防止 CSRF 提供了一些并发请求的接口(重要,方便了很多的操作) 自动转JSON数据格式 axios 处理错误处:只需使用 catch() 支持

    2024年02月03日
    浏览(29)
  • axios如何解决跨域的方案

    由于解决跨域需要用到headers属性,所以在axios形参中需要用对象形式包裹,同时api接口也要放在url属性当中, 废话不多说,直接上代码,然后在请求接口 ---- 到浏览器的控制台 — 点击刚刚请求的接口 ---- 找到Request Headers 下 ----application/octet-stream ,如果有看到这个属性代表解

    2024年02月11日
    浏览(33)
  • axios请求解决跨域问题has been blocked by CORS policy: No ‘Access-Control-Allow-Origin‘ header is

    我们在Vue实现axios请求时,出现跨域问题,我们有两种解决方案(当然我们的请求路径和axios都是没问题的)    第一种加上CrossOrigin注解 第二种写一个config配置类 希望能帮到各位,

    2024年02月12日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包