axios跨域请求详解

一、axios跨域请求cookie丢失

当使用axios发起跨域请求时,可能会遇到cookie丢失的问题。

这是因为在跨域请求时,浏览器默认会禁止携带cookie信息,防止CSRF攻击。

解决这个问题的方法有两种:一种是在服务端设置Access-Control-Allow-Credentials为true,表示允许跨域请求携带cookie;另一种是在axios请求的withCredentials设置为true,表示允许跨域请求携带cookie。


// 服务端代码
app.use((req, res, next) => {
  res.header('Access-Control-Allow-Credentials', 'true');
  res.header('Access-Control-Allow-Origin', req.headers.origin);
  next();
});

// axios跨域请求
axios.get(url, {
  withCredentials: true
}).then(res => {
  console.log(res);
}).catch(error => {
  console.log(error);
});

二、axios实现跨域请求

axios可以通过设置请求头,实现跨域请求。

在axios请求时,可以设置请求头中的”Access-Control-Allow-Origin”,”Access-Control-Allow-Methods”和”Access-Control-Allow-Headers”字段,让服务端允许跨域请求。


// axios跨域请求
axios.get(url, {
  headers: {
    'Access-Control-Allow-Origin': '*',
    'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE',
    'Access-Control-Allow-Headers': 'Content-Type, Authorization'
  }
}).then(res => {
  console.log(res);
}).catch(error => {
  console.log(error);
});

三、axios跨域请求设置

除了设置请求头和withCredentials外,我们还可以通过配置axios的全局设置,来实现跨域请求。具体来说,我们可以通过设置axios.defaults.baseURL和axios.defaults.withCredentials来实现跨域请求。


// 设置axios的全局配置
axios.defaults.baseURL = 'http://example.com';
axios.defaults.withCredentials = true;

// axios跨域请求
axios.get(url).then(res => {
  console.log(res);
}).catch(error => {
  console.log(error);
});

四、vue3 axios跨域请求

在vue3中,我们可以通过安装vue-axios插件,来进行跨域请求。

首先,在vue项目中安装vue-axios插件:


npm install axios vue-axios --save

然后,在main.js中进行配置:


import axios from 'axios';
import VueAxios from 'vue-axios';
import Vue from 'vue';

Vue.use(VueAxios, axios);

Vue.axios.defaults.baseURL = '/api';
Vue.axios.defaults.withCredentials = true;

最后,在组件中使用:


const params = {
  name: 'Alice',
  age: 18
};

this.axios.get('/user', {params}).then(res => {
  console.log(res);
}).catch(error => {
  console.log(error);
});

五、axios请求头允许跨域

有时候我们需要在请求头中添加一些自定义的字段,此时需要在服务端配置Access-Control-Allow-Headers,允许跨域请求头中包含自定义字段。


// 服务端代码
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Token');

// axios请求头设置
const headers = {
  'Authorization': 'Bearer xxx',
  'Token': 'yyy'
};

axios.get(url, {headers}).then(res => {
  console.log(res);
}).catch(error => {
  console.log(error);
});

六、axios封装请求

为了方便调用,我们可以把常用的axios请求封装成一个函数。


// 封装请求函数
const request = (url, method, data) => {
  const config = {
    method,
    url,
    headers: {'Content-Type': 'application/json'},
    data
  };
  return axios(config);
};

// 使用封装的请求函数进行请求
const params = {
  name: 'Alice',
  age: 18
};

request('/user', 'get', params).then(res => {
  console.log(res);
}).catch(error => {
  console.log(error);
});

七、axios添加请求头跨域

我们还可以把跨域请求需要的请求头,封装进axios的拦截器中,这样可以使请求更加方便。


// 添加拦截器
axios.interceptors.request.use(config => {
  config.headers['Content-Type'] = 'application/json';
  config.headers['Authorization'] = 'Bearer xxx';
  return config;
}, error => {
  return Promise.reject(error);
});

// axios请求
axios.get(url).then(res => {
  console.log(res);
}).catch(error => {
  console.log(error);
});

八、axios解决跨域

在使用axios进行跨域请求时,可能会遇到各种各样的问题,比如请求返回404错误,请求超时等等。

解决这些问题的方法有很多种,比如调整请求方式、修改请求头、增加请求参数等等。

下面是一些常见的解决方案:

1、把跨域请求的域名加入到CORS白名单中;

2、在服务端设置Access-Control-Allow-Origin为请求域名;

3、把请求的数据类型从JSON改成字面量;

4、使用JSONP代替AJAX请求;

5、使用代理服务器,把请求转发到目标服务器。

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-22 08:06
下一篇 2024-12-22 08:06

相关推荐

  • 使用axios获取返回图片

    使用axios获取返回图片是Web开发中很常见的需求。本文将介绍如何使用axios获取返回图片,并从多个方面进行详细阐述。 一、安装axios 使用axios获取返回图片前,首先需…

    编程 2025-04-29
  • Axios请求数据乱码问题解决

    本文将从以下三个方面详细阐述Axios请求数据乱码问题的原因和解决方法: 一、设置请求头 Axios请求数据乱码的原因可能是因为请求时没有设置请求头的编码方式,而且默认的编码方式是…

    编程 2025-04-28
  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • Python安装OS库详解

    一、OS简介 OS库是Python标准库的一部分,它提供了跨平台的操作系统功能,使得Python可以进行文件操作、进程管理、环境变量读取等系统级操作。 OS库中包含了大量的文件和目…

    编程 2025-04-25
  • Python输入输出详解

    一、文件读写 Python中文件的读写操作是必不可少的基本技能之一。读写文件分别使用open()函数中的’r’和’w’参数,读取文件…

    编程 2025-04-25
  • nginx与apache应用开发详解

    一、概述 nginx和apache都是常见的web服务器。nginx是一个高性能的反向代理web服务器,将负载均衡和缓存集成在了一起,可以动静分离。apache是一个可扩展的web…

    编程 2025-04-25
  • MPU6050工作原理详解

    一、什么是MPU6050 MPU6050是一种六轴惯性传感器,能够同时测量加速度和角速度。它由三个传感器组成:一个三轴加速度计和一个三轴陀螺仪。这个组合提供了非常精细的姿态解算,其…

    编程 2025-04-25
  • git config user.name的详解

    一、为什么要使用git config user.name? git是一个非常流行的分布式版本控制系统,很多程序员都会用到它。在使用git commit提交代码时,需要记录commi…

    编程 2025-04-25
  • 详解eclipse设置

    一、安装与基础设置 1、下载eclipse并进行安装。 2、打开eclipse,选择对应的工作空间路径。 File -> Switch Workspace -> [选择…

    编程 2025-04-25

发表回复

登录后才能评论