讲讲关于跨域的问题,什么是跨域?怎么办?

news2025/4/7 15:15:35

文章目录

  • 什么是跨域
    • 如果非同源,共有三种行为受到限
    • 浏览器客户端和向服务器跨域请求的判定流程
  • 跨域问题演示
  • 参考

以下内容为我结合他人知识进行的自我总结, 如有错误欢迎指出~

什么是跨域

跨域就是不同的域名下的资源访问,会被浏览器的本地安全策略阻止;
跨域是由浏览器的同源策略造成的,是浏览器施加的安全限制。是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。

  • 同源:是指相同的协议(例如http、https等)、域名(例如www.baidu.com,其中www是子域名即服务器名,baidu.com是主域名即网站名)、端口(8080),三者都相同才属于同源。
  • 同源策略:指A 网页设置的 Cookie,B 网页不能打开,除非这两个网页“同源”,才能互相传递cookies,浏览器出于互联网安全考虑,不同源的网站之间是不能互相访问的;同源政策的目的,是为了保证用户信息的安全,防止恶意的网站窃取数据。
  • 跨域:由于浏览器同源策略,凡是发送请求的url的协议、域名、端口三者之间任意一个与当前页面地址不同则视为跨域。 (简单的讲法:不同域之间相互请求资源)。

设想这样一种情况:A 网站是一家银行,用户登录以后,A 网站在用户的机器上设置了一个 Cookie,包含了一些隐私信息(比如存款总额)。用户离开 A 网站以后,又去访问 B 网站,如果没有同源限制,B 网站可以读取 A 网站的 Cookie,那么隐私信息就会泄漏。更可怕的是,Cookie 往往用来保存用户的登录状态,如果用户没有退出登录,其他网站就可以冒充用户,为所欲为。因为浏览器同时还规定,提交表单不受同源政策的限制。
在这里插入图片描述

如果非同源,共有三种行为受到限

1.无法获取非同源网页的 cookie、localstorage
比如A项目里 iframe(嵌入式框架) 了一个B项目,A跳转B项目时,浏览器本身的特点会自动检查两个域名是否同源,来判断是否能传递cookies给请求的B项目;除了不能传递cookie还是可以正常引用并跳转到B项目页面的,其实iframe的src就是浏览器顶部的url链接,拿到链接先去请求html,html编译后就是各种DOM树标签对象,也能请求接口等资源,因为在B自己的项目中,那如何避免DOM- iframe被访问呢,就用到第二点、如何避免A如果直接调B接口,就用到第三条;如果想要让AB传递cookies,则需要特别设置,比如AB两个项目都通过设置document.domain为相同的父级域名,则不会跨域了,两个项目交互时都会检查domain是否一致;前提需要AB主域名相同,否则设置了domain也没有用,不过前端可以通过postMessage,实质是HTML5的API,不同域下的页面在满足一定关系的条件下可以通过此API跨域传送数据,即传送cookies等信息;

2.DOM同源策略即,无法访问非同源网页的 DOM (iframe)
即B被嵌入到A的iframe中的时候,可以正常打开B页面渲染html,但是A无法获取B页面的DOM树以及请求的数据;如果配置了X-iframe-option=拒绝,那么页面是打不开的,可以防止点击劫持;

3.Ajax 的同源策略(即请求接口时判断是否同源,不同源则不允许请求);
无法向非同源地址发送 AJAX 请求 或 fetch 请求(可以发送,但浏览器拒绝接受响应),因为浏览器自己的机制会检测是否同源,不同源的话,会发送跨域请求给后端,后端再给予该请求返回Access-Control-Allow-Origin,根据Access-Control-Allow-Origin配置的域名,来判断是否允许进行ajax接口请求,如果没有配置跨域资源共享(CORS)机制,那么会报错如下图:
在这里插入图片描述

贴一个 cors跨域请求的处理过程:https://www.cnblogs.com/xfenfen/p/9378393.html

然后我们要明确一个问题, 请求跨域了,请求到底发出去没有?答案是肯定发出去了,但是浏览器拦截了响应

浏览器客户端和向服务器跨域请求的判定流程

  1. 浏览器先根据同源策略对前端页面和后台交互地址做匹配,若同源,则直接发送数据请求;若不同源,则发送跨域请求。

  2. 服务器解析程序收到浏览器跨域请求后,根据自身配置返回对应文件头即addHeader(‘Access-Control-Allow-Origin:*’);//允许所有来源访问 。若未配置过任何允许跨域,则文件头里不包含Access-Control-Allow-origin字段,若配置过域名,则在response header中返回Access-Control-Allow-origin+ 对应配置规则里的域名的方式。Access-Control-Allow-Origin指定支持访问的域名,不指定的网站不能访问;

  3. 浏览器根据接受到的http文件头里response header的Access-Control-Allow-origin字段做匹配,若无该字段,说明不允许跨域;若有该字段,则对字段内容和当前想要请求后端服务的来源域名Origin:https://cloud.mengxiang.com做比对,如果同源,则说明可以跨域,浏览器发送该请求;若不同源,则说明该域名不可跨域,不发送请求

(但是不能仅仅根据服务器返回的文件头里是否包含Access-Control-Allow-origin来判断其是否允许跨域,因为服务器端配置多域名跨域的时候,也会出现不能跨域的域名返回包里没有Access-Control-Allow-origin字段的情况。下文配置说明里会讲。)

注:header中Access-Control-Allow- credentials该项标志着请求当中是否包含cookies信息

跨域问题演示

下面链接的博客中演示了如何跨域 和 如何解决跨域问题
面试突击81:什么是跨域问题?如何解决?

参考

关于cookies网站跨域单点登录的原理
cookie的作用域以及跨域设置

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

清晰讲解Cookie、Session、Token、JWT之间的区别

文章目录 什么是认证(Authentication)什么是授权(Authorization)什么是凭证(Credentials)什么是Cookie什么是SessionSession的痛点 Cookie 和 Session 的区别什么是Token(令牌)Acesss TokenRefresh Token Token 和 Session 的区别Token 与 Cookie什么是 JWT生成JWTJWT 的原理JW…

rime中州韵小狼毫 词组注释 滤镜

在rime中州韵小狼毫 联想词组 滤镜一文中,我们通过Filter滤镜功能配置了联想词组的功能,这使得我们在输入一些关键词汇时,可以联想补充一些附加的词组,例如我输入“手机”,就可以联想补充对应的手机号,如下…

C语言通过ODBC函数操作Access数据库(mdb和accdb格式)(char字符数组)

编译环境:Windows XP Visual Studio 2010 数据库:Access 2010,accdb格式 本例程只使用char[]字符数组,不使用wchar_t[]字符数组,更适合C语言初学者。 如果读取字符串时,提供的字符数组空间小了&#xff0c…

Airtest-Selenium实操小课:爬取新榜数据

1. 前言 最近看到群里很多小伙伴都在用Airtest-Selenium做一些web自动化的尝试,正好趁此机会,我们也出几个关于web自动化的实操小课,仅供大家参考~ 今天跟大家分享的是一个非常简单的爬取网页信息的小练习,在百度找到新榜网页&am…

【C初阶——指针4】鹏哥C语言系列文章,基本语法知识全面讲解——指针(4)

本文由睡觉待开机原创,转载请注明出处。 本内容在csdn网站首发 欢迎各位点赞—评论—收藏 如果存在不足之处请评论留言,共同进步! 这里写目录标题 前言1.回调函数2.qsort函数的使用3.qsort函数的模拟实现 思路大纲: 前言 本节博…

嵌入式培训机构四个月实训课程笔记(完整版)-Linux系统编程第十天-Linux下mplayer音乐播放器练习题(物联技术666)

更多配套资料CSDN地址:点赞+关注,功德无量。更多配套资料,欢迎私信。 物联技术666_嵌入式C语言开发,嵌入式硬件,嵌入式培训笔记-CSDN博客物联技术666擅长嵌入式C语言开发,嵌入式硬件,嵌入式培训笔记,等方面的知识,物联技术666关注机器学习,arm开发,物联网,嵌入式硬件,单片机…

【每日一题】2696. 删除子串后的字符串最小长度-2024.1.10

题目: 2696. 删除子串后的字符串最小长度 给你一个仅由 大写 英文字符组成的字符串 s 。 你可以对此字符串执行一些操作,在每一步操作中,你可以从 s 中删除 任一个 "AB" 或 "CD" 子字符串。 通过执行操作&#xff0c…

Element|Upload结合Progress实现上传展示进度条

背景 : 项目里的 附件上传 题型组件,用户在上传过程中,如果文件较大,上传过程较慢,而又没有一个类似 Loading... 的加载过程的话,会显得干愣愣的,用户体验较差,所以需要添加一个进度…

Springboot+vue的毕业论文管理系统(有报告)。Javaee项目,springboot vue前后端分离项目

演示视频: Springbootvue的毕业论文管理系统(有报告)。Javaee项目,springboot vue前后端分离项目 项目介绍: 本文设计了一个基于Springbootvue的前后端分离的毕业论文管理系统,采用M(model&…

JWT---JSON Web Token

JSON Web Token是什么 JSON Web Token (JWT)是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为JSON对象在各方之间安全地传输信息。该信息可以被验证和信任,因为它是数字签名的。 JSON Web Token的结构是什么样的 JSON…

Handsfree_ros_imu:ROS机器人IMU模块ARHS姿态传感器(A9)Liunx系统Ubuntu20.04学习启动和运行教程

这个是篇学习 Handsfree_ros_imu 传感器的博客记录 官方教程链接见: https://docs.taobotics.com/docs/hfi-imu/ 产品功能 IMU 内有 加速度计,陀螺仪,磁力计这些传感器,通过固定 imu 到物体上后,可以获取物体在运动…

登录模块的实现

一.前期的准备工作 1.页面的布局 (1)表单的校验: 利用element-ui提供的文档绑定rules规则后实现校验 (2)跨域的配置 : 利用proxy代理来解决跨域的问题 (3)axios拦截器的配置 两个点:1. 在请求拦截的成功回调中,如果token,因为调用其它的接口需要token才能调取。 在请…

锤科HandShaker修改版,支持安卓14、澎湃OS

如今几乎各家手机厂商都在布局生态,但PC端往往是最容易被忽略的一环,哪怕是很强的华为鸿蒙、小米澎湃,想要做到手机和电脑互联,也限制了笔记本机型 虽然我一直致力于解锁非小米电脑安装小米电脑管家,比如前几天刚刚更…

在WindowsServer2012中部署war项目

目录 前言 一.jdk安装 二.Tomact安装 三.MySQL安装 ​编辑​编辑​编辑​编辑​编辑​编辑​编辑 四.开放端口号 MySQL开放端口号 Tomact开放端口号 ​编辑 五.项目部署 1.将war放置在tomact中 2.配置项目sql脚本 3.最终效果 前言 安装Java开发工具包&#xff08…

【设计模式-02】Strategy策略模式及应用场景

一、参考资料 Java 官方文档 Overview (Java SE 18 & JDK 18)module indexhttps://docs.oracle.com/en/java/javase/18/docs/api/index.html Java中使用到的策略模式 Comparator、comparable Comparator (Java SE 18 & JDK 18)declaration: module: java.base, pa…

构建免费的Dokan和WooCommerce构建线上课程市场在线销售数字课程

我们知道创建良好的学习说明和材料很困难。但当涉及到销售时,就变得更加困难。如果您无法出售您的课程,那么没有什么比这更令人沮丧的了。 幸运的是,如果您使用的是 WordPress 网站,那么您可以非常轻松且免费地完成此操作。借助L…

java SSM物业管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM物业管理系统是一套完善的web设计系统(系统采用SSM框架进行设计开发,springspringMVCmybatis),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和 数据库,系统主要采用B/…

2024.1.11 Kafka 消息队列,shell命令,核心原理

目录 一 . 消息队列 二. Kafka 三 . 启动命令 四 . Kafka的Shell 命令 五 . Kafka的核心原理 1. Topic的分区和副本机制 2 . 消息存储机制 和 查询机制 3. Kafka中生产者数据分发策略 六 . Kafka 之所以具有高速的读写性能,主要有以下几个原因 七. 笔记…

指导AI进行推理:提示工程如何弥补RAG系统中的差距

每日推荐一篇专注于解决实际问题的外文,精准翻译并深入解读其要点,助力读者培养实际问题解决和代码动手的能力。 欢迎关注公众号(NLP Research) 原文标题:Instructing AI to Reason: How Prompt Engineering Bridges the Gap in RAG Systems 原文地址:https://medium.c…

vscode配置Todo Tree插件

一、在VSCode中安装插件Todo Tree ​​​​ 二、按下快捷键ctrlshiftP,输入setting.jspn 选择相应的配置范围,我们选择的是用户配置 Open User Settings(JSON),将以下代码插入其中。 //todo-tree 标签配置从这里开始 标签兼容大小写字母(很…