当前位置: 首页 > news >正文

前端解决跨域问题( 6种方法 )

本专栏是汇集了一些HTML常常被遗忘的知识,这里算是温故而知新,往往这些零碎的知识点,在你开发中能起到炸惊效果。我们每个人都没有过目不忘,过久不忘的本事,就让这一点点知识慢慢渗透你的脑海。
本专栏的风格是力求简洁明了。

文章目录

    • 解决前端跨域问题的方法:
      • 1. CORS(跨域资源共享)
      • 2.JSONP(JSON with Padding)
      • 3. Proxy(代理)
      • 4. PostMessage
      • 5.WebSocket
      • 6. 服务器端反向代理

跨域问题是指当一个网页试图访问来自不同源(域名、协议、端口)的资源时,浏览器会出于安全考虑而限制这种访问。这是因为浏览器的同源策略防止了恶意网站获取其他网站的敏感信息。

在这里插入图片描述

解决前端跨域问题的方法:

1. CORS(跨域资源共享)

CORS 是一种 W3C 标准,它允许服务器明确地允许来自其他源的请求。通过在服务器端设置适当的响应头,例如 Access-Control-Allow-Origin,可以指定允许哪些源进行跨域请求。这种方法需要服务器端的配合,因为需要在服务器上配置 CORS。

具体实现步骤如下:

  • 在服务器端,通过设置响应头Access-Control-Allow-Origin来指定允许的跨域源。例如,Access-Control-Allow-Origin: * 表示允许来自任何源的跨域请求,或者可以指定具体的源,如Access-Control-Allow-Origin: http://example.com
  • 服务器还可以设置其他 CORS 相关的头部,如Access-Control-Allow-Methods(允许的请求方法)、Access-Control-Allow-Credentials(是否允许携带凭证)等。
  • 在客户端,发起跨域请求时,浏览器会根据服务器返回的 CORS 头部信息来判断是否允许该请求。

CORS 是一种比较灵活和常用的跨域解决方案,但需要服务器端的支持和配置。

2.JSONP(JSON with Padding)

JSONP 是一种利用 <script> 标签的跨域请求方式。它通过动态创建一个 <script> 标签,并将跨域请求的 URL 作为其 src 属性。服务器端需要将响应的数据以函数调用的形式返回,客户端通过定义对应的回调函数来接收数据。

具体实现步骤如下:

  • 在客户端,创建一个全局的回调函数,用于处理接收到的数据。
  • 通过动态创建 <script> 标签,并设置其 src 属性为跨域请求的 URL,同时将回调函数的名称作为查询参数传递给服务器。
  • 服务器接收到请求后,根据查询参数中的回调函数名称,将数据包装成函数调用的形式返回。
  • 客户端的浏览器会执行返回的脚本,从而触发回调函数,并将数据传递给回调函数进行处理。

JSONP 的缺点是只支持 GET 请求,并且在安全性和灵活性方面有一些限制。

3. Proxy(代理)

可以在本地搭建一个代理服务器,将跨域请求通过代理服务器转发到目标服务器。代理服务器可以处理 CORS 相关的问题,并将响应返回给客户端。

具体实现步骤如下:

  • 在本地搭建一个代理服务器,可以使用 Node.js 等技术实现。
  • 客户端将跨域请求发送到代理服务器,代理服务器根据配置将请求转发到目标服务器。
  • 目标服务器返回的数据经过代理服务器后再返回给客户端。

代理服务器可以提供更多的控制和定制,但需要额外的开发和维护工作。

4. PostMessage

如果跨域的两个页面属于同一父域下的不同子域,或者属于同一页面的不同 iframe,可以使用 postMessage 方法进行通信。通过窗口或 iframe 之间的消息传递来实现数据共享。

具体实现步骤如下:

  • 发送方通过 window.postMessage 方法发送消息,指定目标窗口或 iframe 的源。
  • 接收方通过注册 message 事件来监听和处理接收到的消息。

postMessage 方法适用于一些特定的场景,但对于跨不同域的情况并不适用。

5.WebSocket

WebSocket 是一种基于 TCP 的全双工通信协议,它允许客户端和服务器之间建立持久的连接,并进行实时的双向数据传输。通过 WebSocket,跨域通信可以更加高效和实时。

具体实现步骤如下:

  • 客户端和服务器都需要支持 WebSocket 协议,并建立 WebSocket 连接。
  • 一旦连接建立,双方可以通过 WebSocket 进行实时的消息收发。

WebSocket 适用于需要实时通信的场景,如实时聊天、实时数据推送等。

6. 服务器端反向代理

将前端应用部署到一个反向代理服务器后面,然后通过代理服务器来处理跨域请求。代理服务器可以将请求转发到后端的不同服务器,并处理 CORS 相关的问题。

具体实现步骤如下:

  • 设置反向代理服务器,如 Nginx 或 Apache。
  • 在反向代理服务器中配置适当的规则和头信息,以处理跨域请求。

这种方法需要对服务器配置有一定的了解,并可能需要一些额外的配置工作。

选择跨域解决方法时,需要考虑项目的具体需求、安全性、可行性和可维护性等因素。同时,还需要注意跨域请求的安全性,避免暴露敏感信息或受到跨站请求伪造(CSRF)等攻击。

相关文章:

前端解决跨域问题( 6种方法 )

本专栏是汇集了一些HTML常常被遗忘的知识&#xff0c;这里算是温故而知新&#xff0c;往往这些零碎的知识点&#xff0c;在你开发中能起到炸惊效果。我们每个人都没有过目不忘&#xff0c;过久不忘的本事&#xff0c;就让这一点点知识慢慢渗透你的脑海。 本专栏的风格是力求简洁…...

Linux 理解进程

目录 一、基本概念 二、描述进程-PCB 1、task_struct-PCB的一种 2、task_ struct内容分类 三、组织进程 四、查看进程 1、ps指令 2、top命令 3、/proc文件系统 4、在/proc文件中查看指定进程 5、进程的工作目录 五、通过系统调用获取进程标示符 1、getpid()/get…...

鸿蒙App基础

基础说明 .1、应用模型 .1.1、构成要素 应用组件 应用组件是应用的基本组成单位&#xff0c;是应用的运行入口。用户启动、使用和退出应用过程中&#xff0c;应用组件会在不同的状态间切换&#xff0c;这些状态称为应用组件的生命周期。应用组件提供生命周期的回调函数&…...

算法部署优化工程师面试题整理

&#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;C/C面试整理 &#x1f380;CSDN主页 发狂的小花 &#x1f304;人生秘诀&#xff1a;学习的本质就是极致重复! 目录 整体情况简介 高性能计算基础 AI 框架知识 算…...

C#,入门教程(26)——数据的基本概念与使用方法

上一篇&#xff1a; C#&#xff0c;入门教程(25)——注释&#xff08;Comments&#xff09;你会吗&#xff1f;看多图演示&#xff0c;学真正注释。https://blog.csdn.net/beijinghorn/article/details/124681888 本文所述的知识基本上适用于C/C&#xff0c;java等其他语言。 …...

加密与安全_PGP、OpenPGP和GPG加密通信协议

文章目录 PGPOpenPGPGPG工作原理工作流程用途案例说明过程 代码实现pom依赖PgpEncryptionUtilPgpDecryptionUtilCommonUtilsPgpEncryptionTest 小结 PGP PGP (Pretty Good Privacy) 是一种加密通信协议&#xff0c;用于保护电子邮件和文件的安全性和隐私。它通过使用加密、数字…...

Maven模块化最佳实践

一&#xff0c;模块化的原因及意义 模块化是一种将大型的软件系统拆分成相互独立的模块的方法。具有以下优势&#xff1a; 代码复用&#xff1a;不同的模块可以共享相同的代码。这样可以避免重复编写相同的代码&#xff0c;提高开发效率。 模块独立性&#xff1a;每个模块都可…...

嵌入式C语言中 #pragma once 的作用

1、#pragma once有什么作用&#xff1f; 为了避免同一个头文件被包含&#xff08;include&#xff09;多次&#xff0c;C/C中有两种宏实现方式&#xff1a; 一种是#ifndef方式&#xff1b; 另一种是#pragma once方式。 在能够支持这两种方式的编译器上&#xff0c;二者并没…...

spring-cloud-openfeign 3.0.0(对应spring boot 2.4.x之前版本)之前版本feign整合ribbon请求流程

在之前写的文章配置基础上 https://blog.csdn.net/zlpzlpzyd/article/details/136060312 下图为自己整理的...

#数据结构 线性表的顺序存储

目录 每日文案 一、线性表的定义 二、线性表的操作 顺序表的存储结构 顺序表的初始化操作 判断顺序表是否为空表 将顺序表置为空表 计算顺序表中的元素个数 取出顺序表中的对应位置元素 取出对应数值的位序 在对应位置插入元素 将对应位置的元素删除 将顺序表中的数据…...

[iOS]高版本MacOS运行低版本Xcode

Xcode 版本支持文档 目的&#xff1a; 在MacOS Sonoma 系统上安装 Xcode14.3.1 第一步 先在Xcode下载一个Xcode14.3.1的压缩包 第二步 本地解压Xcode&#xff0c;将外层目录名变更为Xcode_14.3.1&#xff0c;将文件拷贝到 /Applications目录下。 第三步 变更xcode-sel…...

仿牛客项目Day5:开发登录、退出功能

登录功能 数据库 创建了一个表login_ticket来记录登录凭证&#xff0c;类似于session 核心字段是ticket entity 创建了一个类loginTicket mapper 处理login_ticket的mapper接口层&#xff0c;用来往里面查询数据、增加数据和修改数据 查询数据通过ticket来查 select是通…...

Vue3全家桶 - Vue3 - 【3】模板语法(指令+修饰符 + v-model语法糖)

一、模板语法 主要还是记录一些指令的使用和vue2的区别&#xff1b;vue3指令导航&#xff1b; 1.1 v-text 和 v-html 指令的区别&#xff1a; v-text&#xff1a; 更新元素的文本内容&#xff1b;v-text 通过设置元素的 textContent 属性来工作&#xff0c;因此它将覆盖元素…...

OpenCV开发笔记(七十七):相机标定(二):通过棋盘标定计算相机内参矩阵矫正畸变摄像头图像

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/136616551 各位读者&#xff0c;知识无穷而人力有穷&#xff0c;要么改需求&#xff0c;要么找专业人士&#xff0c;要么自己研究 红胖子(红模仿)的博…...

2024蓝桥杯每日一题(时间日期)

一、第一题&#xff1a;日期差值 解题思路&#xff1a;模拟 写一个计算时间的板子两者相减 【Python程序代码】 mon [0,31,28,31,30,31,30,31,31,30,31,30,31] def pd(x):if x%4000 or (x%40 and x%100!0):return Truereturn False def get_day(y,m,d):res 0for i …...

js【详解】事件

给 DOM 节点绑定事件 推荐使用 addEventListener 函数 第一个参数&#xff1a;事件名称第二个参数&#xff1a;事件处理函数&#xff08;第一个参数为 event&#xff09;第三个参数&#xff1a; true 采用捕获法来处理事件false 【推荐】采用冒泡法来处理事件 let div1 docu…...

webpack5基础--14_优化css

Css 处理 提取 Css 成单独文件 Css 文件目前被打包到 js 文件中&#xff0c;当 js 文件加载时&#xff0c;会创建一个 style 标签来生成样式 这样对于网站来说&#xff0c;会出现闪屏现象&#xff0c;用户体验不好 我们应该是单独的 Css 文件&#xff0c;通过 link 标签加载…...

Skywalking(9.7.0) 告警配置

图片被吞&#xff0c;来这里看吧&#xff1a;https://juejin.cn/post/7344567669893021736 过年前一天发版&#xff0c;大家高高兴兴准备回家过年去了。这时候老板说了一句&#xff0c;记得带上电脑&#xff0c;关注用户反馈。有紧急问题在高速上都得给我找个服务区改好。 但是…...

删除、创建、验证Kafka安装自带的__consumer_offsets topic

删除Kafka自带Topic 一般情况下&#xff0c;你删除Kafka自带的__consumer_offsets topic&#xff0c;会报错提示不能删除。 倔强的你直接找到zookeeper删掉了它&#xff0c;list查看确实没有这个topic了&#xff0c;但是这会导致消费者和偏移量无法记录。 创建Kafka自带的Topi…...

在文件夹下快速创建vue项目搭建vue框架详细步骤

一、首先在你的电脑目录下新建一个文件夹 进入该文件夹并打开控制台&#xff08;输入cmd指令&#xff09; 进入控制台后输入 vue create springboot_vue (自己指定名称) 如果出现这类报错如&#xff1a;npm install 的报错npm ERR! network request to http://registry.cnp…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

GitHub 趋势日报 (2025年06月06日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

NPOI Excel用OLE对象的形式插入文件附件以及插入图片

static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)

一、OpenBCI_GUI 项目概述 &#xff08;一&#xff09;项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台&#xff0c;其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言&#xff0c;首次接触 OpenBCI 设备时&#xff0c;往…...

Windows 下端口占用排查与释放全攻略

Windows 下端口占用排查与释放全攻略​ 在开发和运维过程中&#xff0c;经常会遇到端口被占用的问题&#xff08;如 8080、3306 等常用端口&#xff09;。本文将详细介绍如何通过命令行和图形化界面快速定位并释放被占用的端口&#xff0c;帮助你高效解决此类问题。​ 一、准…...

【java面试】微服务篇

【java面试】微服务篇 一、总体框架二、Springcloud&#xff08;一&#xff09;Springcloud五大组件&#xff08;二&#xff09;服务注册和发现1、Eureka2、Nacos &#xff08;三&#xff09;负载均衡1、Ribbon负载均衡流程2、Ribbon负载均衡策略3、自定义负载均衡策略4、总结 …...