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

跨域问题总结

文章目录

    • 概要
    • web应用整体请求流程
    • 技术名词解释
    • 跨域问题产生的原理
    • 解决方案
      • 前端代码角度
      • 前端服务器角度
      • 后端代码角度
      • 后端服务器角度
    • 小结

概要

在不成熟的前后端开发过程中,经常遇到跨域问题;
在前后端分离的模式下的开发过程中,经常遇到跨域问题;

本文章针对跨域问题提供几个有效的解决方案;

web应用整体请求流程

前端给后端发ajax、aioxs,中间要经过web服务器转手,然后后端接收请求、处理、响应,
有些情况下,可能没有web服务器这一步,这是一个闭环;

技术名词解释

跨域(Cross-Origin)是指在Web开发中,当前前端页面所在的域(域名、协议、端口)与请求的目标资源的域不一致时,浏览器会阻止页面发起跨域请求。这是出于安全考虑,以防止恶意网站获取用户的敏感信息或进行其他安全攻击。

跨域问题主要涉及到浏览器的同源策略(Same-Origin Policy)。同源策略要求网页只能从同一域的源加载资源,不同源的资源请求将会受到限制。

具体而言,同源策略包括以下几个方面:

协议相同: 两个页面的协议必须相同,比如都是http或https。
域名相同: 两个页面的域名必须相同,包括主域名和子域名。
端口相同: 两个页面的端口号必须相同。

跨域问题产生的原理

就是因为浏览器的同源策略,导致前端通过浏览器发给后端的请求,被浏览器阻止了。

解决方案

前端代码角度

如果你的前端是框架开发的,前端代码里可以用代理的方式实现。比如:

  server: {proxy: {'/common': {target: envs.VITE_API_BASE_URL,changeOrigin: true,secure: false,},'/iot': {target: envs.VITE_API_BASE_URL,changeOrigin: true,secure: false,},'/farm': {target: envs.VITE_API_BASE_URL,changeOrigin: true,secure: false,},'/admin': {target: envs.VITE_API_BASE_URL,changeOrigin: true,secure: false,}},},

前端服务器角度

可以在前端web服务器配置文件内写反代,原理就是前端请求当前域名/api,这样浏览器就不会报错,前端web服务器接收到api的请求时去转发请求到后端服务器,

server {listen 80;server_name your_domain.com;  # 替换为你的域名location / {root /path/to/your/frontend/app;  # 替换为你的前端应用的路径index index.html;try_files $uri $uri/ /index.html;}location /api/ {proxy_pass http://localhost:5000;  # 替换为你的API服务器地址和端口proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection 'upgrade';proxy_set_header Host $host;proxy_cache_bypass $http_upgrade;}# 可以添加其他配置,如SSL证书等,根据实际需求
}

后端代码角度

// 允许任何来源访问
header("Access-Control-Allow-Origin: *");// 允许的请求方法
header("Access-Control-Allow-Methods: GET, POST, OPTIONS");// 允许的请求头字段
header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept");// 响应类型
header("Content-Type: application/json; charset=utf-8");// 如果是预检请求(OPTIONS),直接返回空响应体,结束执行
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {header("HTTP/1.1 200 OK");exit();
}

有些框架比如laravel,还支持中间价的优雅语法实现,和这个代码大同小异,可以自行百度

后端服务器角度

server {listen 80;server_name your_domain.com;  # 替换为你的域名location / {# 允许任何来源访问add_header 'Access-Control-Allow-Origin' '*';# 允许的请求方法add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';# 允许的请求头字段add_header 'Access-Control-Allow-Headers' 'Origin, X-Requested-With, Content-Type, Accept';# 响应类型add_header 'Content-Type' 'application/json; charset=utf-8';# 可以添加其他配置,如代理到后端应用等,根据实际需求}# 可以添加其他配置,如SSL证书等,根据实际需求
}

小结

一个请求的发起到后端接收到后端响应,这是一个闭环的流程,在这个流程上的每一步都可以实现跨域问题的解决

相关文章:

跨域问题总结

文章目录 概要web应用整体请求流程技术名词解释跨域问题产生的原理解决方案前端代码角度前端服务器角度后端代码角度后端服务器角度 小结 概要 在不成熟的前后端开发过程中,经常遇到跨域问题; 在前后端分离的模式下的开发过程中,经常遇到跨域…...

K8s-MySQL主从集群

K8s-MySQL主从集群 引言 该案例代码均可从https://github.com/WeiXiao-Hyy/k8s_example 获取,欢迎Star! 需求 一个“主从复制”的MySQL集群有一个主节点Master有多个从节点Slave从节点需要能水平扩展所以写操作只能在主节点上执行读操作可以在所有节点…...

seo js转码工具

js转码工具作用 用于把js加密 如果不想让别人看到自己的js 代码就可以使用这个方法 js工具网址 https://tool.chinaz.com/js.aspx 效果...

【SQL】601. 体育馆的人流量(with as 临时表;id减去row_number()思路)

前述 知识点学习: with as 和临时表的使用12、关于临时表和with as子查询部分 题目描述 leetcode题目:601. 体育馆的人流量 思路 关键:如何确定id是连续的三行或更多行记录 方法一: 多次连表,筛选查询方法二&…...

java上传本地文件到服务器共享

在Windows系统中,将本地文件夹中的某个文件上传到另一台Windows服务器电脑上,前提:两台电脑网络互通,要接收文件的Windows服务器文件夹开启了共享,可以被本机用如下方式进行写入和读取: 如何配置服务器共享请自行百度查找。 所需要的maven依赖如下: <dependency>…...

Redis场景总结

使用场景 在大型的秒杀库存扣减&#xff0c;app首页流量高峰&#xff0c;很容易将传统的关系型数据库(mysql&#xff0c;oracle等&#xff09;给压垮。 还有很多没必要持久化的数据&#xff0c;比如说短信验证码&#xff0c;点赞数等。 分布式锁。 分布式缓存(会话共享)。 …...

2024.3.11 C++作业

1、提示并输入一个字符串&#xff0c;统计该字符中大写、小写字母个数、数字个数、空格个数以及其他字符个数要求使用C风格字符串完成 #include <iostream>using namespace std;int main() {char str[20];cout << "please enter the str:";gets(str);in…...

【wps】wps与office办公函数储备使用(结合了使用案例 持续更新)

【wps】wps与office办公函数储备使用(结合了使用案例 持续更新) 1、TODAY函数 返回当前电脑系统显示的日期 TODAY函数&#xff1a;表示返回当前电脑系统显示的日期。 公式用法&#xff1a;TODAY() 2、NOW函数 返回当前电脑系统显示的日期和时间 NOW函数&#xff1a;表示返…...

初级爬虫实战——伯克利新闻

文章目录 发现宝藏一、 目标二、简单分析网页1. 寻找所有新闻2. 分析模块、版面和文章 三、爬取新闻1. 爬取模块2. 爬取版面3. 爬取文章 四、完整代码五、效果展示 发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不…...

WPF资源的继承

假设这里有一个全局的资源 <Style TargetType"TextBlock"><Setter Property"FontSize" Value"40"/> </Style> 这是时候有些控件可能需要一个样式在这个基础上加一点内容的 <Style x:Key"textBlockStyle" Targ…...

linux网络通信(TCP)

TCP通信 1.socket----->第一个socket 失败-1&#xff0c;错误码 参数类型很多&#xff0c;man查看 2.connect 由于s_addr需要一个32位的数&#xff0c;使用下面函数将点分十进制字符串ip地址以网络字节序转换成32字节数值 同理端口号也有一个转换函数 我们的端口号位两个字…...

Mybatis 多个简单类型参数传入sql语句

如果只有一个简单类型的参数传入sql语句&#xff0c;我们可以在在#{}中可以随意命名&#xff0c;都可以获取到数据。但通常与接口方法中的参数同名。 但是如果有多个简单类型参数&#xff0c;如果没有特殊处理&#xff0c;那么Mybatis无法根据参数名获取数据。 正确获取方式如…...

SpringCloud OpenFeign 服务接口调用

一、前言 接下来是开展一系列的 SpringCloud 的学习之旅&#xff0c;从传统的模块之间调用&#xff0c;一步步的升级为 SpringCloud 模块之间的调用&#xff0c;此篇文章为第四篇&#xff0c;即介绍 Feign 和 OpenFeign 服务接口调用。 二、概述 2.1 Feign 是什么 Feign 是一…...

WAP网站商业计划书(附下载)

这份文件“WAP网站商业计划书.zip”详细阐述了一个由富有创造力和远见的大学生团队构思的创业项目。这个计划旨在开发并运营一个专注于无线应用协议&#xff08;WAP&#xff09;技术的网站&#xff0c;以服务于移动设备用户群体&#xff0c;提供一个易于访问、功能丰富且用户体…...

【存储】ZYNQ+NVMe小型化全国产存储解决方案

文章目录 1、背景2、基础理论3、设计方案3.1、FPGA设计方案3.1.1、NVMe控制器实现3.1.2、NVMe控制器实现 3.2 驱动软件设计方案3.2.1 读写NVMe磁盘软件驱动3.2.2 NVMe磁盘驱动设计3.2.3 标准EXT4文件系统设计 3.3 上位机控制软件设计方案 4、测试结果4.1 硬件测试平台说明4.2 测…...

数据结构之栈详解(C语言手撕)

&#x1f389;个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名乐于分享在学习道路上收获的大二在校生 &#x1f648;个人主页&#x1f389;&#xff1a;GOTXX &#x1f43c;个人WeChat&#xff1a;ILXOXVJE &#x1f43c;本文由GOTXX原创&#xff0c;首发CSDN&…...

Docker学习——Dock镜像

什么是Docker镜像 Docker 镜像类似于虚拟机镜像&#xff0c;可以将它理解为一个只读的模板。 一个镜像可以包含一个基本的操作系统环境&#xff0c;里面仅安装了 Apache 应用程序&#xff08;或 用户需要的其他软件&#xff09; 可以把它称为一个 Apache 镜像。镜像是创建 Do…...

CorelDRAW Graphics Suite2024专业图形设计软件Windows/Mac最新25.0.0.230版

CorelDRAW Graphics Suite 2024是一款专业的图形设计软件&#xff0c;它集成了CorelDRAW Standard 2024和其他高级图形处理工具&#xff0c;为用户提供了全面的图形设计和编辑解决方案。 该软件拥有强大的矢量编辑功能&#xff0c;用户可以轻松创建和编辑矢量图形&#xff0c;…...

el-form表单中,对非表单内字段增加校验的方法

1、问题说明&#xff1a; 在开发表单的时候&#xff0c;可能会遇到el-form-item中绑定的值不在表单绑定的数据对象中。 此时用prop绑定该字段名是无效的&#xff0c;需要单独对这个字段进行校验。 在el-form-item中有一个属性 error 。用于表单域验证错误信息&#xff0c;设…...

【VTKExamples::Points】第四期 ExtractEnclosedPoints

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 公众号:VTK忠粉 前言 本文分享VTK样例ExtractEnclosedPoints,并解析接口vtkExtractEnclosedPoints,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我…...

学Simulink——基于Simulink的坡道起步防溜坡电机转矩控制

目录 手把手教你学Simulink ——基于Simulink的坡道起步防溜坡电机转矩控制 一、问题背景 二、系统架构与控制逻辑 1. 控制层级 2. 防溜坡转矩需求 三、无传感器坡度估计方法 方法:基于加速度计 + 车速微分 Simulink 实现 四、防溜坡转矩控制器设计 1. 基础转矩规划…...

别再只用CardView做卡片了!解锁Android Material Design中CardView的5个隐藏用法与实战技巧

解锁Android CardView的5个高阶玩法&#xff1a;从交互动画到性能调优 在Material Design的世界里&#xff0c;CardView早已超越了简单的阴影和圆角容器角色。当大多数开发者还在用基础属性构建静态卡片时&#xff0c;真正的高手已经在探索这些隐藏能力&#xff1a;如何让卡片像…...

7脚 LED数码屏的刷新显示,乱码请指正

我是新手近段时间的工作是点亮7脚LED数码屏&#xff0c;刷新时遇到了困惑请大家帮助指正&#xff0c;在此表示非常感谢。 下面是7脚LED数码屏结构图。 用了7个 case下面是刷新代码switch(ScanPinNum){// ---------------- CASE1: PIN1------------------------case 1: …...

基于Python的情绪识别模型:从原理到实践

摘要情绪识别作为自然语言处理&#xff08;NLP&#xff09;领域的重要分支&#xff0c;在人机交互、社交媒体分析、客户服务等场景中具有广泛应用。本文系统介绍基于Python的情绪识别模型构建方法&#xff0c;涵盖数据预处理、特征提取、模型选择、训练评估及部署应用等关键环节…...

网络爬虫是自动从互联网上采集数据的程序网络爬虫是自动从互联网上采集数据的程序,Python凭借其丰富的库生态系统和简洁语法,成为了爬虫开发的首选语言。本文将全面介绍

网络爬虫是自动从互联网上采集数据的程序网络爬虫是自动从互联网上采集数据的程序&#xff0c;Python凭借其丰富的库生态系统和简洁语法&#xff0c;成为了爬虫开发的首选语言。本文将全面介绍如何使用Python构建高效、合规的网络爬虫。一、爬虫基础与工作原理 网络爬虫本质上是…...

让大模型异步地增强推理能力

当大模型进入推理时代&#xff0c;如何在不牺牲效果的前提下&#xff0c;把测试时扩展做得更快、更稳、更高效&#xff1f;ATTS给出了一种值得关注的新答案。过去一年&#xff0c;大模型的发展逻辑正在发生一个明显变化。如果说早期大家更关注“模型有多大、数据有多少、训练得…...

长治厨卫改造哪个公司有经验

如果你家住长治&#xff0c;房子房龄超过10年&#xff0c;大概率已经被厨卫问题磨得头疼&#xff1a;瓷砖起翘脱落、下水反味臭整屋、防水漏到楼下赔罚款、插座不够用插线板绕得到处都是……根据国内家装行业2024年存量房改造调研数据&#xff0c;63%的老房业主首次改造优先选厨…...

FlicFlac:开源音频转换工具从原理到实践

FlicFlac&#xff1a;开源音频转换工具从原理到实践 【免费下载链接】FlicFlac Tiny portable audio converter for Windows (WAV FLAC MP3 OGG APE M4A AAC) 项目地址: https://gitcode.com/gh_mirrors/fl/FlicFlac 在数字音频处理领域&#xff0c;格式转换是连接不同…...

gitru:一个由 Rust 打造的零依赖 Git 提交信息校验工具蚕

一、项目背景与核心价值 1. 解决的核心痛点 Navicat的数据库连接密码并非明文存储&#xff0c;而是通过AES算法加密后写入.ncx格式的XML配置文件中。一旦用户忘记密码&#xff0c;常规方式只能重新配置连接&#xff0c;效率极低。本项目只作为学习研究使用&#xff0c;不做其他…...

多平台内容同步利器:面向教育工作者的开源推流方案

多平台内容同步利器&#xff1a;面向教育工作者的开源推流方案 【免费下载链接】obs-multi-rtmp OBS複数サイト同時配信プラグイン 项目地址: https://gitcode.com/gh_mirrors/ob/obs-multi-rtmp 在数字化教学日益普及的今天&#xff0c;教育工作者常常面临一个挑战&…...