【CORS 报错】跨域请求问题:CORS 多种环境下的解决方案

在这里插入图片描述

🔥 个人主页:空白诗

在这里插入图片描述

文章目录

    • 一、CORS错误的常见原因
    • 二、解决方案
      • 1. Vue3 + Vite项目下的解决方案
        • 创建Vue3 + Vite项目
        • 配置Vite的代理
        • 发送请求
      • 2. jQuery项目下的解决方案
        • 使用CORS请求头
        • 使用JSONP
      • 3. 其他环境下的解决方案
        • 使用服务器端代理
            • 设置CORS头
            • 使用Nginx配置代理
    • 三、总结

在这里插入图片描述

跨域资源共享(CORS, Cross-Origin Resource Sharing)问题是前端开发中的常见挑战。本文将详细介绍在不同环境下(如Vue3 + Vite项目、jQuery项目以及其他环境下)的解决方案。


一、CORS错误的常见原因

跨域问题的本质是浏览器出于安全考虑,限制从一个源(域、协议、端口)加载资源到另一个源。这种安全机制被称为“同源策略”。同源策略规定,只有当请求的URL与当前网页的URL具有相同的协议、域名和端口时,浏览器才允许该请求通过。

  1. 缺乏CORS头
    服务器没有设置正确的CORS响应头,导致浏览器拒绝请求。例如,浏览器期望服务器响应中包含 Access-Control-Allow-Origin 头,如果没有设置该头,浏览器会阻止请求。

  2. 跨域请求被禁止
    默认情况下,浏览器会阻止跨域请求以保护用户的安全。如果服务器没有允许特定的域进行访问,浏览器会抛出CORS错误。

  3. 预检请求失败
    对于一些复杂的请求,浏览器会发送一个预检请求(OPTIONS请求)来确认服务器是否允许该请求。如果预检请求失败,则会导致CORS错误。


二、解决方案

1. Vue3 + Vite项目下的解决方案

通过Vite的开发服务器代理功能,可以将本地的请求代理到不同的服务器,从而避免跨域问题。以下是具体步骤:

创建Vue3 + Vite项目
npm create vite@latest
cd your-project-name
npm install

选择Vue3模板,并进入项目目录。

配置Vite的代理

在Vite项目的根目录下找到vite.config.ts(或vite.config.js),并进行以下配置:

import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';export default defineConfig({plugins: [vue()],server: {proxy: {'/api': {target: 'http://api.example.com', // 目标服务器changeOrigin: true, // 是否改变请求源rewrite: (path) => path.replace(/^\/api/, ''), // 重写路径},},},
});
发送请求

在Vue组件中,可以通过axios或者fetch发送请求。例如:

<template><div><button @click="fetchData">获取数据</button><div v-if="data">{{ data }}</div></div>
</template><script lang="ts">
import { defineComponent, ref } from 'vue';
import axios from 'axios';export default defineComponent({setup() {const data = ref(null);const fetchData = async () => {try {const response = await axios.get('/api/data');data.value = response.data;} catch (error) {console.error('请求错误:', error);}};return {data,fetchData,};},
});
</script>

2. jQuery项目下的解决方案

在jQuery项目中,可以通过设置请求头或使用JSONP来解决CORS问题。

使用CORS请求头

确保服务器设置了正确的CORS头,如 Access-Control-Allow-Origin。在客户端发起请求时:

<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script>$.ajax({url: 'http://api.example.com/data',method: 'GET',success: function(data) {console.log(data);},error: function(xhr, status, error) {console.error('请求错误:', error);}});
</script>
使用JSONP

如果服务器支持JSONP,可以通过以下方式解决跨域问题:

<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script>$.ajax({url: 'http://api.example.com/data',method: 'GET',dataType: 'jsonp', // 使用JSONPsuccess: function(data) {console.log(data);},error: function(xhr, status, error) {console.error('请求错误:', error);}});
</script>

3. 其他环境下的解决方案

使用服务器端代理

在许多情况下,可以在服务器端设置一个代理,将跨域请求通过服务器端转发。例如,在Node.js中可以使用http-proxy-middleware

const { createProxyMiddleware } = require('http-proxy-middleware');app.use('/api', createProxyMiddleware({target: 'http://api.example.com',changeOrigin: true,pathRewrite: {'^/api': '',},
}));
设置CORS头

确保服务器响应中包含正确的CORS头。例如,在Node.js + Express中:

const express = require('express');
const app = express();app.use((req, res, next) => {res.header('Access-Control-Allow-Origin', '*');res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');next();
});app.get('/data', (req, res) => {res.json({ message: 'Hello World' });
});app.listen(3000, () => {console.log('Server running on port 3000');
});
使用Nginx配置代理

在Nginx中,可以通过配置代理解决CORS问题:

server {listen 80;server_name yourdomain.com;location /api/ {proxy_pass http://api.example.com/;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}
}

三、总结

CORS问题是前端开发中常见的一个挑战,但通过合理的代理配置和服务器设置可以有效解决。在不同环境下,可以使用Vite的代理功能、设置请求头、JSONP、服务器端代理、Nginx代理等多种方式来解决跨域问题。希望本文对你理解和解决CORS问题有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/44929.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PS拉框选择工具

Photoshop&#xff08;PS&#xff09;中的拉框选择工具&#xff0c;也称为选框工具&#xff0c;是图像处理中非常基础且强大的工具之一。它允许用户通过绘制矩形、椭圆形以及单行、单列的选择框来选定图像中的特定区域。本教程将详细介绍选框工具的使用方法、技巧及其属性设置。…

前端vue3 登录页面 响应式开发

一个登录页面 我直接上代码了 结构是这样的 Login 页面 <template><a-layout class"login-box"><a-layout-content class"login-content"><a-row align"middle" justify"center" class"login-content-ma…

蝙蝠避障:为盲人出行插上科技的翅膀

在这个五彩斑斓的世界里&#xff0c;每一步都充满了探索与惊喜。但对于我这样的视障者来说&#xff0c;每一次出行都是一场未知的冒险。我时常面临着难以想象的挑战&#xff1a;如何安全地穿越繁忙的街道&#xff0c;怎样准确地识别前方的障碍物&#xff0c;乃至简单地找到回家…

Facebook的未来蓝图:从元宇宙到虚拟现实的跨越

随着科技的不断演进和社会的数字化转型&#xff0c;虚拟现实&#xff08;VR&#xff09;和增强现实&#xff08;AR&#xff09;作为下一代计算平台正逐渐走进人们的视野。作为全球领先的科技公司之一&#xff0c;Facebook正在积极探索并推动这一领域的发展&#xff0c;以实现其…

vue中el-table前端导出excel数据表格

一、el-table为正常时&#xff0c;导出方法如下&#xff1a; 1.添加导出按钮 <el-button class"greenLinearbg dc" size"small" click"webExportTotalExcel()" v-if"totalBillShow">导出</el-button>2.导出方法 // we…

【每日一练】python的类.对象.成员.行为.方法传参综合实例(保姆式教学)

运行结果: 本节课程内容&#xff1a;类的使用 1.掌握类的定义和使用方法 2.掌握类的成员的方法使用 3.掌握self关键字的作用 4.定义在类里的函数是类的一种行为&#xff0c;叫方法 5.带传参的行为使用方法 类基本分两部分组成&#xff1a;1.属性,2.方法 类的使用语法&#xf…

springCloud整合Dubbo案例

前言&#xff1a; 好久没有使用dubbo了&#xff0c;温习一下。 一、先搭建一个SpringCloud框架 整体框架如下图 1. 先创建一个父工程&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4…

开发者必读:获取电商API的多种渠道

开发电商软件往往需要对接电商API&#xff0c;电商API可以从哪些渠道获取&#xff1f;下面给大家介绍两种获取渠道。 一、从电商平台开放平台获取电商API 电商平台的开放平台是获取电商API最直接的渠道&#xff0c;但是电商平台较多&#xff0c;每一个电商平台都需要单…

Vue3 引入腾讯地图 包含标注简易操作

1. 引入腾讯地图API JavaScript API | 腾讯位置服务 (qq.com) 首先在官网注册账号 并正确获取并配置key后 找到合适的引入方式 本文不涉及版本操作和附加库 据体引入参数参考如下图 具体以链接中官方参数为准标题 在项目根目录 index.html 中 写入如下代码 <!-- 引入腾…

Socks5代理为什么比HTTP代理快?

在数字化日益深入的时代&#xff0c;网络安全和隐私保护成为了公众关注的焦点。为了应对网络威胁&#xff0c;保护个人隐私和数据安全&#xff0c;代理技术应运而生。在众多代理协议中&#xff0c;SOCKS5代理和HTTP代理是两种较为常见的选择。然而&#xff0c;为何SOCKS5代理在…

网页设计零基础入门:前端技术全攻略

在当今互联网飞速发展的时代&#xff0c;前端网页设计已经成为一个备受关注的领域。随着其重要性的不断提高&#xff0c;越来越多的专业人士和爱好者开始对前端设计感兴趣&#xff0c;希望通过掌握这项技术开辟自己的职业道路。然而&#xff0c;对于新手设计师来说&#xff0c;…

ollama + lobechat 搭建自己的多模型助手

背景 人工智能已经推出了快2年了&#xff0c;各种模型和插件&#xff0c;有渐渐变成熟的趋势&#xff0c;打造一个类似 hao123网站的人工智能模型入口&#xff0c;也变得有需求了。用户会去比较多个ai给出的答案&#xff0c;作为程序员想拥有一台自己的GPU服务器来为自己服务。…

如何在vue的项目中导入阿里巴巴图标库

阿里巴巴矢量图标库官网&#xff1a;iconfont-阿里巴巴矢量图标库 选择你喜欢的图标&#xff0c;添加入库 点击添加至项目&#xff0c;并新建文件夹&#xff0c;点击确定 选择font-class&#xff0c;点击生成代码 代码生成后&#xff0c;在网站上打开 全选复制到style 点击复制…

springboot系列九: 接收参数相关注解

文章目录 基本介绍接收参数相关注解应用实例PathVariableRequestHeaderRequestParamCookieValueRequestBodyRequestAttributeSessionAttribute 复杂参数基本介绍应用实例 自定义对象参数-自动封装基本介绍应用实例 基本介绍 1.SpringBoot 接收客户端提交数据 / 参数会使用到相…

【小白也能看的懂】想要玩转AI大模型,这4招你得知道

前言 对于大部分人来说&#xff0c;能够灵活使用AI工具&#xff0c;并对自己每个常用的AI工具优劣势很清楚&#xff0c;就已经足够了。不过&#xff0c;毕竟AI发展实在太快&#xff0c;多了解一些相关的知识点&#xff0c;以全局的视角去看AI&#xff0c;可以避免管中窥豹&…

【错题集-编程题】买卖股票的最好时机(四)(动态规划)

力扣对应题目链接&#xff1a;188. 买卖股票的最佳时机 IV - 力扣&#xff08;LeetCode&#xff09; 牛客对应题目链接&#xff1a;买卖股票的最好时机(四)_牛客题霸_牛客网 (nowcoder.com) 一、分析题目 1、状态表示 为了更加清晰的区分买入和卖出&#xff0c;我们换成有股…

【鸿蒙学习笔记】通过用户首选项实现数据持久化

官方文档&#xff1a;通过用户首选项实现数据持久化 目录标题 使用场景第1步&#xff1a;源码第2步&#xff1a;启动模拟器第3步&#xff1a;启动entry第6步&#xff1a;操作样例2 使用场景 Preferences会将该数据缓存在内存中&#xff0c;当用户读取的时候&#xff0c;能够快…

云WAF | 云waf基础知识详解

随着数字时代的到来&#xff0c;网络安全问题越来越突出&#xff0c; Web应用防火墙&#xff08;WAF&#xff09;是保障 Web应用安全的一道重要防线。在云计算环境下&#xff0c;云环路由云平台&#xff08;WAF&#xff09;的出现&#xff0c;其融合了 WAF的能力和云计算的灵活…

【Linux】IP地址与主机名

文章目录 1.IP地址2.特殊IP地址3.主机名4.域名解析 1.IP地址 每一台联网的电脑都会有一个地址&#xff0c;用于和其它计算机进行通讯 IP地址主要有2个版本&#xff0c;V4版本和V6版本 IPv4版本的地址格式是&#xff1a;a.b.c.d,其中abcd表示0~255的数字&#xff0c;如192.168.…

PS 2024【最新】中文白嫖版!,安装教程,图文步骤

文章目录 软件介绍软件下载安装步骤 软件介绍 Photoshop&#xff0c;简称“PS” Adobe Photoshop&#xff0c;简称“PS”&#xff0c;是由Adobe Systems开发和发行的图像处理软件。Photoshop主要处理以像素所构成的数字图像。使用其众多的编修与绘图工具&#xff0c;可以有效地…