post为什么会发送两次请求详解

在这里插入图片描述

文章目录

  • 导文
  • 跨域请求的预检
  • 复杂请求的定义
  • 服务器响应预检请求
  • 总结


导文

在Web开发中,开发者可能会遇到POST请求被发送了两次的情况,如下图:
在这里插入图片描述
尤其是在处理跨域请求时。这种现象可能让开发者感到困惑,但实际上它是浏览器安全机制和跨域资源共享(CORS)规范的一部分。
在这里插入图片描述
因为在开发当中经常会遇到跨域请求的问题。当前端应用试图从一个源(origin)上的Web页面访问另一个源上的资源时,浏览器会执行跨域请求,其中POST请求常常会伴随着两次发送:一次OPTIONS请求(CORS预检)和一次实际的POST请求。

跨域请求的预检

当Web页面中的脚本尝试访问与页面本身不同源(即协议、域名或端口中至少有一个不同)的资源时,浏览器会执行一种称为“同源策略”的安全限制。然而,为了满足某些跨域交互的需求,浏览器引入了CORS(跨域资源共享)机制。

CORS中,当浏览器遇到某些类型的跨域请求(通常称为“复杂请求”)时,它会首先发送一个OPTIONS请求到目标服务器,询问是否允许该跨域请求。这个OPTIONS请求被称为“预检请求”(preflight request)。

复杂请求的定义

复杂请求是指那些不仅仅是简单的GET或POST请求的请求。以下情况通常被视为复杂请求:

  • 使用POSTPUTDELETEHTTP方法。
  • 请求中包含自定义的HTTP头字段。
  • 请求体(Body)中包含非文本数据(如JSONXML)。

当浏览器检测到跨域请求满足上述任何一个条件时,它就会发送一个OPTIONS预检请求。这个预检请求会包含一些特定的HTTP头字段,如Access-Control-Request-Method(表示将要使用的HTTP方法)和Access-Control-Request-Headers(表示将要使用的自定义头字段)。

服务器响应预检请求

服务器在接收到OPTIONS预检请求后,会根据其CORS配置来决定是否允许该跨域请求。如果允许,服务器会返回一个包含适当CORS头字段的响应,如Access-Control-Allow-Origin(表示允许哪些源的请求)和Access-Control-Allow-Methods(表示允许哪些HTTP方法)。

一旦服务器响应了预检请求并允许了跨域请求,浏览器就会发送实际的POST请求(或其他类型的请求)。

总结

当涉及到跨域请求,尤其是复杂请求时,POST请求可能会先发送一个OPTIONS预检请求,然后再发送实际的POST请求。这是浏览器安全机制和CORS规范的一部分,旨在确保跨域请求的安全性和合规性。开发者在处理这类请求时应该了解这一机制,并相应地配置服务器以支持CORS
整个完整的请求流程有如下图所示:
在这里插入图片描述

您好,我是肥晨。
欢迎关注我获取前端学习资源,日常分享技术变革,生存法则;行业内幕,洞察先机。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI数据分析:根据Excel表格数据进行时间序列分析

ChatGPT中输入提示词: 你是一个Python编程专家,要完成一个Python脚本编写的任务,具体步骤如下: 读取Excel表格:"F:\AI自媒体内容\AI行业数据分析\toolify月榜\toolify2023年-2024年月排行榜汇总数据.xlsx"…

SQL 表连接(表关联)

目录 一、INNER JOIN(内连接,等值连接) 二、LEFT JOIN(左连接) 三、RIGHT JOIN(右连接): 一、INNER JOIN(内连接,等值连接) 用途:获取两个表中字段能匹配上…

【stable diffusion】ComfyUI扩展安装以及”127.0.0.1拒绝了我们的连接请求“解决记录

目录 扩展安装”127.0.0.1拒绝了我们的连接请求“解决记录操作1操作2操作3操作4总结扩展安装 虽然大家都推荐将扩展包直接放到extension文件夹的方式,但我还是推荐直接在sd webui的扩展处下载,酱紫比较好维护一点,我个人感觉。 按照上图顺序点击会出现”URLError: <url…

[自动驾驶 SoC]-3 英伟达Orin

NVIDIA Jetson AGX OrinTM series (资料来源&#xff1a;nvidia-jetson-agx-orin-technical-brief.pdf) 1 整体介绍 1) Orin SoC结构 Orin SoC&#xff0c;如下图所示&#xff0c;由一个NVIDIA Ampere architecture GPU, Arm Cortex-A78AE CPU, 下一代深度学习核视觉处理加速…

python相关知识-logging日志、property属性、上下文管理器、生成器等

1.logging日志 目的&#xff1a; 1.可以很方便的了解程序的运行情况 2.可以分析用户的操作行为、喜好等信息 3.方便开发人员检查bug 级别介绍&#xff1a; 1.DEBUG&#xff1a;程序调试bug时使用 2.INFO&#xff1a;程序正常运行时使用 3.WARNNING&#xff1a;程序未按…

学会python——读取大文本文件(python实例六)

目录 1、认识Python 2、环境与工具 2.1 python环境 2.2 Visual Studio Code编译 3、读取大文本文件 3.1 代码构思 3.2 代码示例 3.3 运行结果 4、总结 1、认识Python Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强…

基于机器学习的变频器故障诊断方法(MATLAB,Python)

变频器故障数据由MATLAB Simulink生成。 import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns from sklearn.neighbors import KNeighborsClassifier from sklearn.svm import SVC from sklearn.ensemble import RandomForestClass…

UniVue更新日志:使用Carousel组件实现轮播图效果

github仓库 稳定版本仓库&#xff1a;https://github.com/Avalon712/UniVue 开发版本仓库&#xff1a;https://github.com/Avalon712/UniVue-Develop UniVue扩展框架-UniVue源生成器仓库&#xff1a;https://github.com/Avalon712/UniVue-SourceGenerator 更新说明 今天的更…

【面试干货】String、StringBuilder、StringBuffer 的区别

【面试干货】String、StringBuilder、StringBuffer 的区别 1、String2、StringBuffer3、StringBuilder4、性能对比5、使用建议 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在Java中&#xff0c;String、StringBuilder和StringBuffer是用…

是否要把展会客户引到国际站等付费平台?

有人问我&#xff1a;那些在展会来的客户&#xff0c;如果让我们发网站链接&#xff0c;是否要发公司的付费平台&#xff0c;比如阿里&#xff0c;中国制造网等&#xff1f; 我的建议是不要发&#xff0c;最好是发公司的官网链接。接着她说公司在付费平台上更新得比较频繁&…

湖北省小学毕业学籍照片采集流程及教师手机拍摄方法说明

随着教育信息化的不断推进&#xff0c;学籍管理也越来越规范和便捷。湖北省小学毕业学籍照片采集作为学籍管理的重要组成部分&#xff0c;对于确保学生信息的准确性和完整性具有重要意义。本文将详细介绍湖北省小学毕业学籍照片采集的流程&#xff0c;并提供教师使用手机拍摄照…

KKT基础知识

KKT条件定义 KKT条件(Karush–Kuhn–Tucker conditions)是最优化&#xff08;特别是非线性规划&#xff09;领域最重要的成果之一&#xff0c;是判断某点是极值点的必要条件。 最优化问题 要选择一组参数&#xff08;变量&#xff09;&#xff0c;在满足一定的限制条件&…

个人云服务器已经被安全合规等卡脖子 建议不要买 买了必定后悔 安全是个大问题 没有能力维护

我的想法 自己买一个云服务器&#xff0c;先自己边做边学习&#xff0c;向往硅谷精神&#xff0c;财富与自由。如果能赚钱&#xff0c;就开个公司。这次到期就放弃了。 我前前后后6年花6000多元买云服务器。业余花了无数的精力&#xff0c;从2018到现在 &#xff0c;也没有折…

【代码随想录——动态规划——第三周】

1.目标和 这里设置背包的最大长度为2100即可&#xff0c;因为题目中有说数组之和小于1000.但考虑到我们需要实行jnums[i]所以保守起见我们设置的数应该稍大于2000即可&#xff0c;这里我们设置为2100。 1.1 我的解法&#xff08;粗糙了&#xff09; func findTargetSumWays(n…

VMware安装Debian,Debian分区,虚拟机使用NAT模式联网,Linux设置静态IP

官网 https://www.debian.org/download stable是稳定版 win下amd64就行&#xff0c;macOs装arm架构的 安装Debian虚拟机 教程里没有的只管往下点就完了 哪个都行 选镜像 选安装位置 别超过宿主机内核就行 看你需求 NAT模式 虚拟 看你需求 其他的也检查一下 图形安装 选中文 继…

MoneyPrinterPlus:AI自动短视频生成工具,详细使用教程

MoneyPrinterPlus是一款使用AI大模型技术,一键批量生成各类短视频,自动批量混剪短视频,自动把视频发布到抖音,快手,小红书,视频号上的轻松赚钱工具。 之前有出过一期基本的介绍&#xff0c;但是后台收到有些小伙伴说&#xff0c;不知道如何使用。 今天我将会手把手的详细介绍…

1.动手学习深度学习课程安排及深度学习数学基础

视频资源B站&#xff1a;动手学习深度学习——李沐 目录 目标内容将学到什么1.N维数组样例2.访问2维数组元素3.数据操作4.线性代数5.矩阵计算6.自动求导 目标 介绍深度学习景点和最新模型 LeNet AlexNet VGG ResNet LSTM BERT… 机器学习基础 损失函数&#xff0c;目标函数&a…

抖音矩阵系统搭建,AI剪辑短视频,一键管理矩阵账号

目录 前言&#xff1a; 一、抖音矩阵系统有哪些功能&#xff1f; 1.AI智能文案 2.多平台账号授权 3.多种剪辑模式 4. 矩阵一键发布&#xff0c;智能发布 5.抖音爆店码功能 6.私信实时互动 7.去水印及外链 二、抖音矩阵系统可以解决哪些问题&#xff1f; 总结&#xff…

如何将接口返回/n替换为react.js中的换行符

将每个/n替换为ReactJS中的一个<br>标记。cpa_ability为后端返回的字段名

[js] 数字分开显示

<div id"number-container" class"number-container"></div>const number 123.45; // 要拆分的数字&#xff08;包括小数&#xff09; const numberContainer document.getElementById(number-container);// 将数字转换为字符串&#xff0c;…