首页 > 其他分享 >解决vue axios跨域 Request Method: OPTIONS问题(预检请求)

解决vue axios跨域 Request Method: OPTIONS问题(预检请求)

时间:2023-07-16 16:31:36浏览次数:27  
标签:Axios 跨域 api 配置 Request Vue axios

解决Vue Axios跨域问题(预检请求)

一、问题描述

在前后端分离开发中,前端通过Vue框架发起Ajax请求时,如果请求的URL与前端所在的域名不一致,就会触发浏览器的跨域机制。其中一种常见的跨域问题是"Request Method: OPTIONS",也称为预检请求。在本文中,我们将说明如何解决这个问题。

二、解决流程

为了解决Vue Axios跨域问题,我们需要采取一系列的步骤。下面是解决该问题的具体流程:

步骤 描述
第一步 安装并配置Axios
第二步 在Vue项目中引入Axios
第三步 配置代理服务器
第四步 配置跨域解决方案

下面我们将详细介绍每一步应该做什么,以及提供相应的代码示例。

三、具体步骤及代码示例

第一步:安装并配置Axios

首先,在Vue项目中安装Axios。打开终端,进入Vue项目的根目录,执行以下命令安装Axios:

npm install axios --save

安装完成后,在src目录中新建一个util目录,并在util目录下创建一个api.js文件,用于定义接口请求相关的方法。

// api.js文件
import axios from 'axios'

// 创建axios实例
const service = axios.create({
  baseURL: process.env.VUE_APP_BASE_API, // 根据实际情况配置baseURL
  timeout: 5000 // 请求超时时间
})

// 请求拦截器
service.interceptors.request.use(
  config => {
    // 在请求发送之前做一些处理,如添加token等
    // ...
    return config
  },
  error => {
    // 请求错误处理
    // ...
    return Promise.reject(error)
  }
)

// 响应拦截器
service.interceptors.response.use(
  response => {
    // 在接收响应做一些处理,如判断响应状态码等
    // ...
    return response.data
  },
  error => {
    // 响应错误处理
    // ...
    return Promise.reject(error)
  }
)

export default service

第二步:在Vue项目中引入Axios

在main.js中引入Axios,并挂载到Vue原型上,以便在组件中使用。

// main.js文件
import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import axios from './util/api'

Vue.prototype.$axios = axios

new Vue({
  router,
  store,
  render: h => h(App)
}).$mount('#app')

第三步:配置代理服务器

为了解决跨域问题,我们需要在Vue项目中配置一个代理服务器。在Vue项目的根目录下创建vue.config.js文件,并添加以下配置:

// vue.config.js文件
module.exports = {
  devServer: {
    proxy: {
      '/api': {
        target: 'http://localhost:8080', // 代理目标地址
        changeOrigin: true, // 是否跨域
        pathRewrite: {
          '^/api': '' // 重写路径,去掉/api前缀
        }
      }
    }
  }
}

第四步:配置跨域解决方案

最后,我们需要在后端服务器中进行相关配置。不同的后端服务器有不同的解决方案,以下是一些常见的解决方案。

1. Nginx配置

如果使用Nginx作为后端服务器,可以在Nginx的配置文件中进行跨域配置。打开Nginx的配置文件(一般位于/etc/nginx/nginx.conf或/usr/local/nginx/conf/nginx.conf),在http模块中添加以下配置:

location /api/ {
  proxy_pass http://localhost:8080/;
}
2. Spring Boot配置

如果使用Spring Boot作为后端服务器,可以在后端的配置文件中添加以下配置:

@Configuration
public class CorsConfig {

  @Bean
  public WebMvcConfigurer corsConfigurer() {
    return new WebMvcConfigurer() {
      @Override
      public void addCorsMappings(Cors

标签:Axios,跨域,api,配置,Request,Vue,axios
From: https://blog.51cto.com/u_16175475/6738629

相关文章

  • 【四】Ajax与异步编程之数据传输格式ajax同源策略和跨域方案
    【四】Ajax与异步编程之数据传输格式ajax同源策略和跨域方案【1】同源策略同源策略(ameoriginpolicy),是浏览器为了保护用户信息在服务端的安全的而设置一种安全机制。所谓的同源就是指代通信的两个地址(例如服务端接口地址与浏览器客户端页面地址)之间比较,是否协议、域名(IP)和......
  • axios详解以及完整封装方法
    """一、axios是什么Axios是一个基于promise网络请求库,作用于node.js和浏览器中。它是isomorphic的(即同一套代码可以运行在浏览器和node.js中)。在服务端它使用原生node.jshttp模块,而在客户端(浏览端)则使用XMLHttpRequests。axios有以下特性:从浏览器创建X......
  • SAP ABAP 函数 TR_REQUEST_CHOICE
    TR_REQUEST_CHOICE是SAPABAP中的一个函数模块,它用于在系统中处理传输请求。传输请求是SAP系统中的一个重要概念,它用于管理和控制系统中对象的传输。这些对象可以是程序、表、视图等。TR_REQUEST_CHOICE函数模块提供了一种界面,允许用户在系统中选择一个传输请求。它有一个......
  • 60.如何解决跨域问题
    60.如何解决跨域问题?相关知识点:通过jsonp跨域document.domain+iframe跨域location.hash+iframewindow.name+iframe跨域postMessage跨域跨域资源共享(CORS)nginx代理跨域nodejs中间件代理跨域WebSocket协议跨域回......
  • java拦截器获取POST请求体后Controller异常Required request body is missing OR Stre
    解决办法参考文档:https://blog.csdn.net/qierkang/article/details/88544691springboot拦截器获取POST请求体后导致Controller中@RequestBody参数异常RequiredrequestbodyismissingORStreamclosed.1.为什么会报这个错?因为http的body只能读取一次。2.为什么body设计为只......
  • java 跨域
       ......
  • 老杜 JavaWeb 讲解(十) —— HttpServletRequest接口源码分析
    (十二)HttpServletRequest接口源码分析对应视频:21-HttpServletRequest接口12.1介绍HttpServletRequest是一个接口,全限定名称:jakarta.servlet.http.HttpServletRequestHttpServletRequest接口是Servlet规范中的一员。HttpServletRequest接口的父接口:ServletRequest......
  • ASP.NET MVC4 WEB API跨域
    ASP.NETMVC4WEBAPI跨域web.config文件里加些东西即可 <system.webServer> <httpProtocol> <customHeaders> <addname="Access-Control-Allow-Origin"value="*"/> <addname="Access-Control-Allow-H......
  • Vue3+Vue-Router+TypeScript+Vite+Element-Plus+Axios+Pinia快速搭建开发框架
    1、环境准备(1)首先你得需要安装node和npm2、环境初始化(1)先随意找个文件夹,初始化vite#安装pnpmnpmi-gpnpm#初始化vitepnpmcreatevite#安装依赖pnpminstall(2)最后我们执行pnpmrundev3、安装插件(1)Eslint校验代码工具安装eslint#安装eslint......
  • HttpServletRequest 流数据不可重复读问题以及解决方案
    1.HttpServletRequest流数据不可重复读的原因HttpServletRequest的request.getInputStream()只可以读取一次参数,由于InputStream这个流数据的特殊性,在Java中读取InputStream数据时,内部是通过一个指针的移动来读取一个一个的字节数据的,当读完一遍后,这个指针并不会res......