解决axios跨域问题的方法详解

一、跨域问题解释

跨域问题是指在一个域名下,访问另一个域名的资源时出现了限制,这种限制是由浏览器实行了同源策略所引起的。

所谓同源即同协议、同域名、同端口,只要有一个不同就是跨域了。

二、常用解决跨域问题的方法

1. CORS(Cross-Origin Resource Sharing)

CORS基于HTTP头部添加可访问的域名地址来进行跨域请求,相对于自己上前端开发的人员只需配置请求后台API的路径即可。如下:


axios({
    method: 'get',
    url: 'https://api.apiopen.top/getJoke?page=1&count=2&type=video'
    withCredentials: true //后端要设置Access-Control-Allow-Credentials: true 才能访问
}).then(res=> {
      console.log(res)
})

其原理是在浏览器中发起请求时,在请求头部中添加Origin字段标记本次请求的来源域名,服务器端在处理请求之后添加Access-Control-Allow-Origin: *标识跨域接受哪些域名可以带cookie发出请求。

2. 代理

webpack代理,或者前段nginx代理,可以让请求变成本地请求来解决跨域问题,也能防止客户端请求时直接访问第三方服务器;同时请求的代理也可以在本地开发时模拟接口数据。


"proxy": {
    "/api": {
      "target": "https://api.apiopen.top", //代理的后台
      "changeOrigin": true,
      "pathRewrite": {"^/api": ""}//这个不解释
    }
} 

3. JSONP

JSONP利用的是页面的script标签跨域请求不受浏览器同源策略的限制来获取数据,通过写回调函数,数据会当做参数传递到回调函数中,再通过回调函数来操作拿到的数据。

4. nginx反向代理

nginx可以做网关,同时也作为反向代理,将请求按照配置转发到对应的后台服务器,同时可以在nginx上设置CORS。

5. postMessage通信

window.postMessage(message, targetOrigin)方法是用来来自不同域的窗口之间的通信的。例如,假设文档 A 包含一个,该 来自文档 B,如果在 的 Javascript 中调用了 window.postMessage() 方法,那么,文档 A 中用于监听的 JavaScript 代码能够接收到消息。

三、实际应用

根据实际情况选择使用以下解决跨域问题的方式,对于后端设置了CORS的情况可以直接使用axios,对于不允许前端直接访问后端接口的情况使用代理,对于只支持JSONP方式的可以使用第三方库jsonp引用,对于已经有nginx服务器的可使用nginx反向代理,对于iframe嵌套的,可以使用postMessage或者window.name进行传递数据。

这里是示例代码,使用CORS和代理解决Axios跨域问题的实现:

CORS方式


axios({
  url: "https://api.apiopen.top/getJoke",
  method: "get",
  withCredentials: true,
  headers: { "Access-Control-Allow-Origin": "*" }
}).then(res => {
  console.log(res.data);
});

代理方式


axios({
  url: "/api/getJoke",
  method: "get"
}).then(res => {
  console.log(res.data);
});

以上就是解决axios跨域问题的几种方式了,根据实际需求进行选择。希望可以为大家提供帮助。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/151939.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-11-12 00:53
下一篇 2024-11-12 00:53

相关推荐

  • Python官网中文版:解决你的编程问题

    Python是一种高级编程语言,它可以用于Web开发、科学计算、人工智能等领域。Python官网中文版提供了全面的资源和教程,可以帮助你入门学习和进一步提高编程技能。 一、Pyth…

    编程 2025-04-29
  • 如何解决WPS保存提示会导致宏不可用的问题

    如果您使用过WPS,可能会碰到在保存的时候提示“文件中含有宏,保存将导致宏不可用”的问题。这个问题是因为WPS在默认情况下不允许保存带有宏的文件,为了解决这个问题,本篇文章将从多个…

    编程 2025-04-29
  • ArcGIS更改标注位置为中心的方法

    本篇文章将从多个方面详细阐述如何在ArcGIS中更改标注位置为中心。让我们一步步来看。 一、禁止标注智能调整 在ArcMap中设置标注智能调整可以自动将标注位置调整到最佳显示位置。…

    编程 2025-04-29
  • 解决.net 6.0运行闪退的方法

    如果你正在使用.net 6.0开发应用程序,可能会遇到程序闪退的情况。这篇文章将从多个方面为你解决这个问题。 一、代码问题 代码问题是导致.net 6.0程序闪退的主要原因之一。首…

    编程 2025-04-29
  • Python中init方法的作用及使用方法

    Python中的init方法是一个类的构造函数,在创建对象时被调用。在本篇文章中,我们将从多个方面详细讨论init方法的作用,使用方法以及注意点。 一、定义init方法 在Pyth…

    编程 2025-04-29
  • Python创建分配内存的方法

    在python中,我们常常需要创建并分配内存来存储数据。不同的类型和数据结构可能需要不同的方法来分配内存。本文将从多个方面介绍Python创建分配内存的方法,包括列表、元组、字典、…

    编程 2025-04-29
  • Python中读入csv文件数据的方法用法介绍

    csv是一种常见的数据格式,通常用于存储小型数据集。Python作为一种广泛流行的编程语言,内置了许多操作csv文件的库。本文将从多个方面详细介绍Python读入csv文件的方法。…

    编程 2025-04-29
  • 使用Vue实现前端AES加密并输出为十六进制的方法

    在前端开发中,数据传输的安全性问题十分重要,其中一种保护数据安全的方式是加密。本文将会介绍如何使用Vue框架实现前端AES加密并将加密结果输出为十六进制。 一、AES加密介绍 AE…

    编程 2025-04-29
  • 用不同的方法求素数

    素数是指只能被1和自身整除的正整数,如2、3、5、7、11、13等。素数在密码学、计算机科学、数学、物理等领域都有着广泛的应用。本文将介绍几种常见的求素数的方法,包括暴力枚举法、埃…

    编程 2025-04-29
  • Python学习笔记:去除字符串最后一个字符的方法

    本文将从多个方面详细阐述如何通过Python去除字符串最后一个字符,包括使用切片、pop()、删除、替换等方法来实现。 一、字符串切片 在Python中,可以通过字符串切片的方式来…

    编程 2025-04-29

发表回复

登录后才能评论