深入剖析跨域请求发送两次的原因及解决方案(上)

在这里插入图片描述

🤍 前端开发工程师、技术日更博主、已过CET6
🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1
🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》
🍚 蓝桥云课签约作者、上架课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入门到实战全面掌握 uni-app》

文章目录

  • 一、引言
    • 解释跨域请求的概念和常见场景
    • 提出问题:为什么有时请求会发两次
  • 二、跨域请求的原理
    • HTTP 协议和跨域限制的基本原理
    • 介绍 CORS(跨域资源共享)的工作方式

一、引言

解释跨域请求的概念和常见场景

跨域请求是指在不同域名的网页中,通过XMLHttpRequest或Fetch等方法发起请求。跨域请求是一种安全机制,用于限制跨域请求,防止XSS攻击等安全问题。

常见跨域请求的场景有以下几种:

  1. 不同域名:如果请求的域名与当前页面的域名不同,则属于跨域请求。例如,当前页面域名是example1.com,请求的域名是example2.com,则属于跨域请求。

  2. 不同协议:如果请求的协议(如HTTP、HTTPS等)与当前页面的协议不同,则属于跨域请求。例如,当前页面协议是HTTP,请求的协议是HTTPS,则属于跨域请求。

  3. 不同端口:如果请求的端口与当前页面的端口不同,则属于跨域请求。例如,当前页面端口是80,请求的端口是8080,则属于跨域请求。

  4. iframe跨域:如果当前页面是通过iframe加载其他页面,且域名、协议或端口不同,则属于跨域请求。

  5. 跨域请求头:如果请求的请求头中包含一些特殊字段,如RefererUser-Agent等,也可能触发跨域请求。

在实际项目中,如果需要进行跨域请求,可以采用以下方法解决跨域问题:

  1. CORS(跨域资源共享):服务器端设置CORS相关的响应头,允许指定范围内的跨域请求。这是最常用且推荐的方式。

  2. 代理服务器:通过配置代理服务器,将跨域请求转换为同域请求。这种方法适用于某些跨域请求限制较严格的场景。

  3. JSONP:使用JSONP技术,通过动态<script>标签发起跨域请求。这种方法存在安全隐患,不推荐使用。

总之,跨域请求是一种安全机制,可以限制跨域请求,防止XSS攻击等安全问题。在实际项目中,可以根据需求选择合适的解决方案来解决跨域问题。

提出问题:为什么有时请求会发两次

请求有时会发两次的原因可能有以下几点:

  1. 浏览器缓存机制:浏览器可能会缓存之前的请求响应,当再次发起请求时,浏览器会先检查缓存,如果找到缓存的响应,则会直接使用缓存的响应,然后再发一次请求。

  2. 预请求(Preflight Request):当发起跨域请求时,浏览器会先发送一个预请求(通常是OPTIONS请求),用于询问服务器是否允许该跨域请求。如果服务器返回允许,则再发送正式的请求。如果预请求失败,则不会发送正式的请求。

  3. 浏览器兼容性问题:某些浏览器可能会在发送请求时出现兼容性问题,导致请求被重复发送。

  4. 后端服务器问题:后端服务器可能出现某些问题,导致浏览器收到了两次请求的响应。

如果请求发两次的原因是浏览器缓存机制,则可以在请求的URL后面添加一个随机数,或者使用其他方法避免浏览器缓存响应。如果请求发两次的原因是预请求,则可以在服务器端设置CORS(跨域资源共享)相关的响应头,允许指定范围内的跨域请求。如果请求发两次的原因是浏览器兼容性问题,则可能需要升级浏览器版本,或者尝试使用其他浏览器进行测试。如果请求发两次的原因是后端服务器问题,则需要检查后端服务器的状态,并进行相应的修复。

总之,要解决请求发两次的问题,需要先分析具体原因,然后针对不同的原因进行相应的解决。

二、跨域请求的原理

HTTP 协议和跨域限制的基本原理

HTTP协议(超文本传输协议)是用于传输超文本数据的协议。它定义了客户端和服务器之间的通信规则,包括请求方法、状态码、响应头等。HTTP协议是基于TCP/IP协议的应用层协议。

跨域限制的基本原理是同源策略。同源策略是浏览器的一种安全机制,用于限制跨域请求,防止XSS攻击等安全问题。同源策略要求,浏览器只允许加载同源的网页,否则会限制加载。同源策略限制的方面包括:

  1. 跨域请求:浏览器限制跨域请求,例如,不同域名、不同协议、不同端口等。

  2. 跨域脚本:浏览器限制跨域脚本,例如,通过<script>标签加载不同域名的脚本。

  3. 跨域样式:浏览器限制跨域样式,例如,通过<link>标签加载不同域名的样式表。

  4. 跨域图片:浏览器限制跨域图片,例如,通过<img>标签加载不同域名的图片。

在实际项目中,如果需要进行跨域请求,可以采用以下方法解决跨域问题:

  1. CORS(跨域资源共享):服务器端设置CORS相关的响应头,允许指定范围内的跨域请求。这是最常用且推荐的方式。

  2. 代理服务器:通过配置代理服务器,将跨域请求转换为同域请求。这种方法适用于某些跨域请求限制较严格的场景。

  3. JSONP:使用JSONP技术,通过动态<script>标签发起跨域请求。这种方法存在安全隐患,不推荐使用。

总之,同源策略是浏览器的一种安全机制,用于限制跨域请求,防止XSS攻击等安全问题。在实际项目中,可以根据需求选择合适的解决方案来解决跨域问题。

介绍 CORS(跨域资源共享)的工作方式

CORS(跨域资源共享)是一种新的跨域访问机制,它允许跨域请求。CORS允许一个域的网页访问另一个域的内容,从而实现了跨域访问。

CORS的工作方式如下:

  1. 基本原理:CORS是通过服务器端设置响应头实现的。当客户端发起跨域请求时,服务器可以在响应头中添加一些特殊字段,告诉浏览器是否允许该跨域请求。

  2. 请求过程

    • 预请求:在发送正式请求之前,浏览器会先发送一个预请求(通常是OPTIONS请求),用于询问服务器是否允许该跨域请求。

    • 正式请求:如果服务器返回允许,则浏览器再发送正式的请求。

    • 响应处理:浏览器根据服务器返回的响应头,决定是否允许跨域请求。如果允许,则继续处理响应;如果不允许,则阻止响应。

  3. 响应头:服务器端可以通过设置以下响应头来控制跨域请求:

    • Access-Control-Allow-Origin:指定允许跨域请求的域名。可以设置为*,表示允许任何域名进行跨域请求。

    • Access-Control-Allow-Methods:指定允许跨域请求的HTTP方法,如GETPOST等。

    • Access-Control-Allow-Headers:指定允许跨域请求的请求头。

    • Access-Control-Expose-Headers:指定允许跨域请求的响应头。

  4. 注意事项

    • 预请求:预请求是不携带请求参数的,也不会触发业务逻辑,只是为了确认服务器是否允许跨域请求。

    • 安全:CORS虽然允许跨域请求,但并不是无限制的。服务器端可以通过响应头来限制跨域请求的类型、请求头等,从而保证安全性。

在实际项目中,如果需要进行跨域请求,可以采用CORS机制,通过服务器端设置响应头来解决跨域问题。

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

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

相关文章

linux kernel 内存踩踏之KASAN_SW_TAGS(二)

一、背景 linux kernel 内存踩踏之KASAN&#xff08;一&#xff09;_kasan版本跟hasan版本区别-CSDN博客 上一篇简单介绍了标准版本的KASAN使用方法和实现&#xff0c;这里将介绍KASAN_SW_TAGS和KASAN_HW_TAGS 的使用和背后基本原理&#xff0c;下图是三种方式的对比&#x…

计算机设计大赛 深度学习中文汉字识别

文章目录 0 前言1 数据集合2 网络构建3 模型训练4 模型性能评估5 文字预测6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习中文汉字识别 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xf…

RegExp正则表达式左限定右限定左右限定,预查询,预查寻,断言 : (?<= , (?= , (?<! , (?!

RegExp正则表达式左限定右限定左右限定,预查询,预查寻,断言 : (?< , (? , (?<! , (?! 有好多种称呼 (?< , (? , (?<! , (?! 有好多种称呼 , 我称为: 左限定, 右限定, 左否定, 右否定 (?<左限定)    (?右限定)(?<!左否定)    (?!右限定) 再…

人力资源智能化管理项目(day10:首页开发以及上线部署)

学习源码可以看我的个人前端学习笔记 (github.com):qdxzw/humanResourceIntelligentManagementProject 首页-基本结构和数字滚动 安装插件 npm i vue-count-to <template><div class"dashboard"><div class"container"><!-- 左侧内…

【JavaScript】面试手写题精讲之数组(下)

引入 这章主要讲的是数组的排序篇&#xff0c;我们知道面试的时候&#xff0c;数组的排序是经常出现的题目。所以这块还是有必要进行一下讲解的。笔者观察了下前端这块的常用算法排序题&#xff0c;大概可以分为如下 冒泡排–> 稳定排序插入排序–> 稳定排序选择排序–…

EasyRecovery软件免费版与付费版有哪些功能区别?

免费版的EasyRecovery软件在功能和恢复能力上确实存在一些限制。 首先&#xff0c;在数据恢复方面&#xff0c;免费版通常只能恢复最多1GB的数据。这意味着&#xff0c;如果你需要恢复的数据量超过1GB&#xff0c;你将需要升级到付费版才能完全恢复。 其次&#xff0c;免费版…

Packet content transfer stopped (received 8 bytes)

esp32烧录程序时报错&#xff1a;A fatal error occurred: Packet content transfer stopped (received 8 bytes) 解决方法&#xff1a; 降低上传速度&#xff0c;使用115200&#xff1b;更换flash模式&#xff0c;使用DIO方式重试如果还不行&#xff0c;检查flash连接情况&am…

第11章 GUI

11.1 Swing概述 Swing是Java语言开发图形化界面的一个工具包。它以抽象窗口工具包&#xff08;AWT&#xff09;为基础&#xff0c;使跨平台应用程序可以使用可插拔的外观风格。Swing拥有丰富的库和组件&#xff0c;使用非常灵活&#xff0c;开发人员只用很少的代码就可以创建出…

基于协同过滤的时尚穿搭推荐系统

项目&#xff1a;基于协同过滤的时尚穿搭推荐系统 摘 要 基于协同过滤的时尚穿搭推荐系统是一种能自动从网络上收集信息的工具&#xff0c;可根据用户的需求定向采集特定数据信息的工具&#xff0c;本项目通过研究服饰流行的分析和预测的分析和预测信息可视化时尚穿搭推荐系统…

电阻器的脉冲浪涌能力?

由于现有需求&#xff0c;许多现代电子电路和设备都会经历瞬态脉冲和浪涌。这反过来又导致需要“设计”瞬态浪涌保护&#xff0c;尤其是在电机控制器等电路中。当电机启动时&#xff0c;此时消耗的电流过大&#xff0c;可能导致电阻器故障。同样&#xff0c;如果电容器用于电机…

数学实验第三版(主编:李继成 赵小艳)课后练习答案(十三)(2)

实验十三&#xff1a;数据拟合与数据差值 练习二 1.在飞机的机翼加工时,由于机翼的尺寸很大,所以通常在图纸上只能标出部分关键点的尺寸某型号飞机的机翼上缘轮廓线的部分数据如下: x 0 4.74 9.05 19 38 76 95 114 133 152 171 190 y 0 5.23 8.1 11.97 16.…

单片机移植Lua(STM32H743移植Lua-5.4.6)

文章目录 目的移植演示示例链接更多说明合理设置内存大小按需加载标准库实现系统和IO接口设置引用路径 总结 目的 通常单片机都是使用C/C来开发的&#xff0c;任何修改都需要重新编译固件然后下载运行。在一些需要灵活性更强的场合中可以内嵌Lua解释器实现动态更新应用程序的功…