通过业务场景理解跨域与请求(简单与非简单)

web运维:跨域(NGINX跨域配置为例) 跨域在现在的web开发中,已经 是一个很常见的场景了,作为运维,也是一个应该掌握的知识点 阅读详情

业务场景中出现的问题

近期我单独负责一个项目的前端工作,在网络方面是和后端分离开发,在前端发起网络请求就会存在跨域的问题。

tips:由于开发阶段前后端分离,所以会存在种种的跨域情况,为了便于开发联调所以才进行跨域处理

通常的解决方案是CORS(跨域资源共享),CORS需要浏览器和服务器同时支持。由于本地浏览器基本都支持这个方案,所以仅需要后端进行相应的allow配置。当后端配置好以后,按道理应该没有请求跨域问题了,但是涉及到post请求会产生跨域问题。

问题的表现

在通过POST请求服务器的资源时,浏览器控制台出现跨域以及预请求问题。我们请求服务器资源的过程实际上是发送请求到服务器资源所映射的一个IP地址。Web代理服务通过Nginx来实现,它收到前端的请求以后,将请求传递给W框架,并拦截OPTIONS请求,回绝404。
Nginx接收到W框架的反馈,则表现为302临时重定向。由于访问不到服务器的资源,所以就会重定向到公司统一的404页。

问题的定位

我们整个项目后端的服务是强依赖公司的一个(类Spring MVC)W框架,它在处理网络请求的过程会进行过滤(有相应的过滤模块),由于W框架的设定,目前只支持HEAD、GET、POST三种请求方式,因此其余的请求方式会被拦截,我的POST请求被拦截了吗?答案是错误的,拦截的不是POST而是预检请求OPTIONS。什么是OPTIONS请求?什么时候会出现OPTIONS请求?

什么是OPTIONS请求

接近官方的定义如下:

HTTP 的 OPTIONS 方法 用于获取目的资源所支持的通信选项。客户端可以对特定的 URL 使用 OPTIONS 方法,也可以对整站(通过将 URL 设置为“*”)使用该方法。 --MDN WEB DOCS

OPTIONS请求也是在进行非简单请求才会出现的。(补充简单与非简单请求)
浏览器将CORS请求分成两类

两种请求

同时满足一下两大条件,就属于简单请求。

 (1)请求方法是一下三种之一
	HEAD
	GET
	POST
 (2)HTTP的头信息不超出一下几种字段
	Accept
	Accept-Language
	Content-Language
	Last-Event-ID
	Content-Type:只限于三个值(application/x-www-form-urlencoded、multipart/form-data、text/plain)

凡是不同时满足上面两个条件,就属于非简单请求。

什么时候会出现OPTIONS请求

非简单请求会在正式通信之前,增加一次HTTP查询请求,就是我们所说的OPTIONS预检请求。

所以OPTIONS预检请求的出现条件:请求为非简单请求

回归问题本身

请求失败的原因在于OPTIONS请求没有被W框架支持,由于项目强依赖W框架,所以有以下两种解决方案:
一、不跨域,这样就不会产生非简单请求,也就不会发送OPTIONS预检请求。
二、跨域但不发送非简单请求,简单请求也不会发送OPTIONS预检请求。

由于我们的业务需要(Content-Type: application/json),且前端采用的网络框架axios默认Content-Type为application/json,这样就导致跨域一定会发送非简单请求,所以只能采用方案一。

解决问题

CORS本来就是跨域问题的解决方案,但是却受到了(low)W框架的影响。
解决跨域还可以通过前端设置代理(proxy)的方式模拟本域进行通信。
以下是vue框架的proxy代理方案

proxyTable: {
	'/api': {
		 target: 'http://www.example.com', // 设置你调用的接口域名和端口号
       	 changeOrigin: true,     // 跨域
         pathRewrite: {
         '^/api': '/'          
        }
   }
}

总结

当我们再次解决了项目的跨域问题以后,使得网络通信变得顺畅。此次问题的解决投入了我较大的精力,问题出现的原因在于:1、经验的欠缺;2、问题定位不够准确;3、对原有概念的偏差理解。只能继续加油呀。

非常好的mdn官方资源,帮助理解CORS相关内容

跨域资源共享标准新增了一组 HTTP 首部字段,允许服务器声明哪些源站通过浏览器有权限访问哪些资源。另外,规范要求,对那些可能对服务器数据产生副作用的 HTTP 请求方法(特别是 GET 以外的 HTTP 请求,或者搭配某些 MIME 类型的 POST 请求),浏览器必须首先使用 OPTIONS 方法发起一个预检请求(preflight request),从而获知服务端是否允许该跨域请求。服务器确认允许之后,才发起实际的 HTTP 请求。在预检请求的返回中,服务器端也可以通知客户端,是否需要携带身份凭证(包括 Cookies 和 HTTP 认证相关数据)。
CORS请求失败会产生错误,但是为了安全,在JavaScript代码层面是无法获知到底具体是哪里出了问题。你只能查看浏览器的控制台以得知具体是哪里出现了错误。 ------mdn

企业AI Agent的跨域学习:打破数据孤岛,实现全局优化 本文深入探讨了企业AI Agent的跨域学习,重点在于如何通过这一技术手段打破数据孤岛,实现全局优化。首先,我们将介绍企业AI Agent的概念及其在跨域学习中的重要性,解释为何数据孤岛是当前企业面临的重大挑战。接下来,我们将详细阐述AI Agent的核心概念和跨域学习的理论基础,通过对比分析不同跨域学习算法,揭示其优缺点和应用场景。在算法原理部分,我们将使用Mermaid流程图和Python代码详细讲解跨域学习的数学模型和算法实现。 阅读详情

相关推荐

TMS320F28377D的sys/bios双核工程配置详解——从零搭建到RAM优化

本文详细解析了TMS320F28377D双核系统在sys/bios环境下的工程配置与RAM优化策略。从开发环境搭建、SYS/BIOS工程创建到双核CMD文件配置,提供了实战技巧和常见问题解决方案,帮助开发者高效实现电力电子控制系统中的双核协作与性能优化。

weixin_28292761的博客 600

跨域实战解析

在网络资源中关于什么是跨域、跨域问题怎么解决等文章层出不穷,涵盖了各种详尽的解释和解决方案,已经是一个“老掉牙”的话题。但是仔细对比阅读也可以发现网上的大多数文章之间也是互相借鉴,最大的特点就是直接了当的告诉你怎么去解决跨域,前端解决也好,后端解决也罢,每次看完资料后,总是感觉很少有文档能帮助我直观的去理解不同的解决方式之间到底有什么区别,因此决定借这个机会深入学习一下。

qq_40776617的博客 2561

用Python实现单层感知器:5分钟搞定逻辑与/或/异或分类(附避坑指南)

本文通过Python代码实战,详细讲解了单层感知器的核心原理与实现步骤,5分钟内即可完成逻辑与、或运算的分类任务。文章深入剖析了单层感知器的能力边界,解释了其无法解决异或(XOR)等线性不可分问题的根本原因,并提供了学习率设置、权重初始化等关键避坑指南,帮助初学者直观理解神经网络的基础。

ttt77的博客 1084

跨域与同源策略

域名由英文字母、数字、英文点、英文横杠组成,不区分大小写。每一个点分隔开的部分称为一个标号,每一个标号都不能超过 63 个字符。标号的级别从左到右由低到高,因此最右边的标号称之为顶级域名,次右边的域名称之为二级域名,再左边的域名称之为三级域名。其实域名的完整写法应该是顶级域名后面再加一个点,这个点就是根。

花铛 900

Android 开发实战:从零到一集成 espeak-ng 实现中文离线 TTS(无需账号开箱即用)

本文详细介绍了如何在 Android 项目中集成 espeak-ng,实现中文离线语音播报。通过下载 so 库、编写 Java 接口、封装管理类,开发者可快速构建无需账号的 TTS 功能。文章覆盖从零到一的开发步骤、调试技巧及性能优化,适合中高级 Android 开发者参考。

全栈 3318

UE4载具性能调优指南:从参数设置到实战优化

本文详细解析了UE4载具性能调优的关键技巧,从WheeledVehicle类构建到轮子参数、传动系统设置,再到物理属性与操控调校。通过实战案例分享,帮助开发者优化载具的速度、加速度等核心性能,提升游戏体验。特别适合需要精细调校载具物理特性的开发者参考。

weixin_29019241的博客 469

什么是简单请求?简单请求和跨域的关系

简单请求不会发生跨域 cors 预检请求,预检请求 Preflight Request 是用于验证是否允许非简单请求的一种 OPTIONS 请求。预检请求是 CORS 机制的一部分,用于确保跨域请求的安全性,预检失败,不会发送实际的跨域请求。注意这三个条件是或的关系,如果 get 请求加上了自定义的请求头,那么就不是简单请求了。简单请求的跨域请求不会发送预检请求。话虽然这样说,但是实际的简单请求头还有很多字段,比如 origin 、host等【如下图也是一个简单请求的头部】这些字段是浏览器自动设置的。

有一棵树的博客 838

13 万字 C 语言从入门到精通保姆级教程2021 年版

13 万字C语言保姆级教程,从入门到精通。

李南江 61万+

简述业务请求过程

业务请求过程: 前端 html 页面发起ajax请求(http://localhost:8080/factoryController/findAll),访问SpringMVC框架的 Controller控制层,SpringMVC框架解析请求,找到要调用的某个Controller,找到其中的findAll方法,同时把请求提交的参数封装到java对象中。之后Controller层把请求传递给Spring框架的Service业务层,Service层在把请求传递给 Mybatis框架的Mappe...

qq_63742528的博客 615

基于深度学习的野生菌菇检测识别分类系统(YOLOv8 + UI界面 + 数据集)

随着深度学习技术的迅猛发展,计算机视觉领域的应用得到了广泛的关注。野生菌菇的检测与识别是一个复杂而又有趣的问题,涉及到物体检测、图像分类以及自然语言处理等技术。本文将介绍如何基于YOLOv8模型,结合自定义UI界面与数据集,构建一个高效且精确的野生菌菇检测识别分类系统。首先,我们将介绍YOLOv8的原理与特点,然后详细描述如何构建和训练野生菌菇识别模型,并介绍如何为该系统设计UI界面,最终形成一个完整的系统。本文内容包括代码实现、模型训练及数据集准备等,旨在为有类似需求的开发者提供参考和帮助。目录摘要目录。

YOLO 1546

Supreme小程序自动化抢购终端——源码架构与执行流程全解析

本系统是一套基于开发的桌面端小程序自动化抢购终端。把只有开发者能跑的脚本,包装成普通用户也能操作的桌面工具。参数自动捕获 → 商品多关键词检索 → sku/尺码/库存映射 → 多商品任务队列 → 定时/立即抢购 → 订单创建 → 支付参数拉取 → 本地服务生成支付链接 → 手机微信扫码付款这套 Supreme 抢购终端,表面上看是一个"下单工具"。但从工程角度审视,它已经具备了一个小型桌面自动化系统GUI 层:CustomTkinter 现代化界面,线程安全业务层:多商品队列、定时调度、任务编排。

猫敷雪 203

跨域问题理解

这种url携带参数以post方式发送请求属于简单请求,不会出现跨域,而如果使用平常的json方式传参设置content-type,则出现跨域问题。1、简单请求不存在跨域。

huan1213858的博客 261

【GameFramework框架】一、框架介绍

这是GameFramework框架教程的第一篇,但是博主不准备直接就讲GameFramework框架。【GameFramework框架】二、GameFramework框架介绍了。框架(Framework)通常被理解为一种基础要素的集合,它们用于承载系统的必要功能。约束性:框架定义了解决特定问题的边界,并将相关的软件组件约束在这个范围内,以保持框架的内聚性和解决问题的专注性。支撑性:框架本身不直接解决问题,而是提供一个基础的支撑结构,使得在其上构建的解决方案更为灵活和高效。

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 1万+

浅谈跨域安全

跨域问题对于我本人来说一直是一个很头疼的问题,因为每次听到什么CORS啊、JSONP啊等等就会不知所措,其实如果从开发的角度深入进去,就是很简单的串门。看了B站蜗牛学苑的视频,终于把跨域完全理解了。接下来,让我们从JSONP、CORS和CSP三个部分,深入理解跨域问题,如果有一起做实验的,希望可以提前准备好两台服务器+每台服务器上部署一个web服务请把握好这两句话,带着这两句话拿下跨域。

黑白的博客 6739

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

对象存储 COS 帮您轻松搞定跨域访问需求

丨背景早期为了避免 CSRF(跨站请求伪造) 攻击,浏览器引入了 “同源策略” 机制。如果两个 URL 的协议,主机名(域名/IP),端口号一致,则视为这两个 URL “同源”,属于同一...

云存储小天使的博客 4754

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Flask框架踩坑之ajax跨域请求实现

业务场景: 前后端分离需要对接数据接口。 接口测试是在postman做的,今天才开始和前端对接,由于这是我第一次做后端接口开发(第一次嘛,问题比较多)所以在此记录分享我的踩坑之旅,以便能更好的理解,应用。 问题: 前端ajax请求后端接口出现跨域问题,如下图。 翻译:因为响应头没有"Access-Control-Allow-Origin",所以接口拒绝把数据返回给前端。 想要学习...

人生苦短, 还不用Python? 786

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Litestar CORS配置:解决跨域请求的完整指南

你是否曾在开发Web应用时遇到过"Access to fetch at 'http://api.example.com' from origin 'http://localhost:3000' has been blocked by CORS policy"这样的错误?跨域资源共享(Cross-Origin Resource Sharing, CORS)是现代Web开发中不可避免的挑战,尤其当后端...

gitblog_00643的博客 992

axios请求mysql_axios请求中跨域及post请求问题解决方案

闲话不多说,用到vue的童鞋们应该大部分都会遇到请求中的各种奇葩问题,昨天研究一天,终于搞出来个所以然了,写篇文章拯救一下广大的童鞋们,某度娘当然也可以搜到,但一般解决了一个问题后就会出现另外一个问题,一个接一个,不断的问题涌现在我的console里面。印象中,我应该遇到过403,405,302,这几个错误,403错误通常是因为跨域请求无权限,而405是因为方法不允许method not allo...

weixin_35516624的博客 227

js跨域名传参_那些年我们“跨”过的“域”(接口篇)

编者按:本文作者高峰,360奇舞团前端工程师,W3C性能工作组/WOT工作组成员。作为前端开发,从入行起,应该就接触过跨域的概念。工作中,在与服务端配合时,也经常需要处理跨域相关问题。如果你不能理解到底什么是跨域,那在与服务端配合解决跨域问题时,你可能就要落入对方的掌控之中了(哈哈,开个玩笑)。为了避免这一尴尬的境地,今天我来带着大家一起重温并巩固一下以下内容:什么是跨域,跨域有哪些实际...

weixin_39638086的博客 312

深入跨域 - 从初识到入门 | 京东物流技术团队

跨域这两个字就像一块狗皮膏药一样黏在每一个前端开发者身上,无论你在工作上或者面试中无可避免会遇到这个问题。如果在网上搜索跨域问题,会出现许许多多方案,这些方案有好有坏,但是对于阐述跨域的原理和在什么情况下需要用什么方案,缺少系统性的说明。大家在工作中可能因为大佬们已经配置好了,不会产生跨域,但是作为一个前端的开发人员,面对跨域的问题,还是需要从原理上去理解跨域的原因,在不同的情况中,我们该如何去处理。

JDDTechTalk的博客 427

前端Ajax跨域解决方案

业务场景: 前后端分离需要对接数据接口。 接口测试是在postman做的,今天才开始和前端对接,由于这是我第一次做后端接口开发(第一次嘛,问题比较多)所以在此记录分享我的踩坑之旅,以便能更好的理解,应用。 问题: 前端ajax请求后端接口出现跨域问题,如下图。 翻译:因为响应头没有"Access-Control-Allow-Origin",所以接口拒绝把数据返回给前端。 ...

diaojinxun8373的博客 293

那些年我们“跨”过的“域”(接口篇)

编者按:本文作者高峰,360奇舞团前端工程师,W3C性能工作组/WOT工作组成员。作为前端开发,从入行起,应该就接触过跨域的概念。工作中,在与服务端配合时,也经常需要处理跨域相关问题。如...

奇舞周刊 904

flask负载均衡_Flask框架踩坑之ajax跨域请求实现

业务场景:前后端分离需要对接数据接口。接口测试是在postman做的,今天才开始和前端对接,由于这是我第一次做后端接口开发(第一次嘛,问题比较多)所以在此记录分享我的踩坑之旅,以便能更好的理解,应用。问题:前端ajax请求后端接口出现跨域问题,如下图。翻译:因为响应头没有"Access-Control-Allow-Origin",所以接口拒绝把数据返回给前端。什么是Access-Control-A...

weixin_39705069的博客 126

ajax跨域请求问题总结

总结一下近期遇到ajax跨域请求问题 业务场景描述: 移动端页面放在阿里云服务器 进入页面后, 需要访问另一个服务器的接口,ajax请求使用用GET,POST,PUT等方法 服务端需要进行cors配置 操作过程中出现的问题 发送PUT请求时,请求头的method变成OPTIONS, 且浏览器控制台给出提示:Method PUT is not allowed by Access-Control...

weixin_30794499的博客 129

Node.js跨域请求终极指南:5种代理服务实现方案详解

在现代Web开发中,**Node.js跨域请求**是每个开发者必须掌握的核心技能!😊 由于浏览器的同源策略限制,前端应用在访问不同域名、端口或协议的资源时会遇到跨域问题。本指南将为你详细介绍5种实用的Node.js代理服务实现方案,帮助你轻松解决跨域难题。 ## 🔍 理解跨域请求的本质 **跨域请求**发生在浏览器尝试访问与当前页面不同源的资源时。同源策略要求协议、域名和端口完全一致,否则

gitblog_00056的博客 539
上一篇: HTML meta标签总结与属性使用介绍
下一篇: VUE路由变更页面未更新问题
DoubleSRZee
博客等级 码龄10年 7粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值