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

文章目录

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

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

什么是跨域

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

  • 同源:是指相同的协议(例如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的作用域以及跨域设置

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

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

相关文章

CISP-DSG证书含金量分析

CISP-DSG证书的含金量主要体现在以下几个方面👇 1️⃣专业知识 CISP-DSG认证要求持有者具备深入的数据an全治理知识,包括数据分类、数据隐私、合规性、风险管理等。📒这些知识对于处理和保护组织的敏感数据至关重要,因此具有高含金…

ubantu中的docker安装

1.Ubuntu Docker 安装 | 菜鸟教程 (runoob.com) 我就是看这个教程进行操作的 2.执行下面两步,就算是安装完成了 3.启动,并检查是否安装成功: 4.安装之后,怎么用,那就是自己随便探索咯,可以看博客&#xf…

【已解决】c语言编写的lib如何调用

本博文源于笔者在vs2015正在编写的lib想要调用的问题,正常的操作是将项目生成lib,但是然后又如何操作呢,本博文就是解决这样的问题 文章目录 问题再现步骤1:编写lib.h与lib.c步骤2:生成lib步骤3:添加用得到…

【昕宝爸爸小模块】HashMap用在并发场景存在的问题

HashMap用在并发场景存在的问题 一、✅典型解析1.1 ✅JDK 1.8中1.2 ✅JDK 1.7中1.3 ✅如何避免这些问题 二、 ✅HashMap并发场景详解2.1 ✅扩容过程2.2 ✅ 并发现象 三、✅拓展知识仓3.1 ✅1.7为什么要将rehash的节点作为新链表的根节点3.2 ✅1.8是如何解决这个问题的3.3 ✅除了…

c#图片作为鼠标光标

图片转换为鼠标光标代码如下: private void Form1_Load(object sender, EventArgs e) {//button1.Cursor System.Windows.Forms.Cursors.Hand;Bitmap bmp new Bitmap("780.jpg");Cursor cursor new Cursor(bmp.GetHicon());button1.Cursor cursor;} …

黑马程序员JavaWeb开发|案例:tlias智能学习辅助系统(4)员工管理|修改员工、配置文件

指路(1)(2)(3)👇 黑马程序员JavaWeb开发|案例:tlias智能学习辅助系统(1)准备工作、部门管理_tlias智能学习辅助系统的需求分析-CSDN博客https://blog.csdn.n…

可狱可囚的爬虫系列课程 11:Requests中的SSL

一、SSL 证书 SSL 证书是数字证书的一种,类似于驾驶证、护照、营业执照等的电子副本。SSL 证书也称为 SSL 服务器证书,因为它是配置在服务器上。 SSL 证书是由受信任的数字证书颁发机构 CA 在验证服务器身份后颁发的,其具有服务器身份验证和…

Bom 和 Dom 区别 ----- 真是DOM 和 虚拟Dom区别

DOM和BOM的区别 我们都指代,javascript由三个部分组成: ECMAScript:描述了JS的语法和基本对象 BOM(浏览器对象):与浏览器交互的方法和对象 DOM(文档对象模型):处理网页内容的方法和接 ps:根据宿主&#x…

桌面微信多开小工具正式发布

本博客站点已全量迁移至 DevDengChao 的博客 https://blog.dengchao.fun , 后续的新内容将优先在自建博客站进行发布, 欢迎大家访问. 社牛: 我需要同时登录多个微信, 一个微信已经满足不了我了! Android: 让我看看系统里有没有自带的多开功能, 不行的话去应用市场下一个多开软…

DLT:dlt-daemon示例解析2

DLT:dlt-daemon示例解析 回顾一下上期第一个示例打印DLT日志的流程。 这次来分析第二个示例。 目录dlt-daemon/examples/example2/下有以下文件 CMakeLists.txt dlt_id.h example2.c example2.xml 其中example2.xml编译用不到,里面描述了一些程序的…

代码随想录算法训练营第二天|977 有序数组的平方、209长度最小的子数组、59 螺旋矩阵||

977 有序数组的平方 题目链接&#xff1a;有序数组的平方 思路 暴力解法 很容易想到的就是按照题目的说明&#xff0c;先给非递减数组中的每个元素做平方&#xff0c;然后使用一个排序函数对齐进行排序即可。 class Solution { public:vector<int> sortedSquares(ve…

第3章:python的判断语句

学一门语言&#xff0c;无外乎多敲&#xff0c;多用&#xff0c;记得回顾昨天写过的代码呀 布尔类型和比较运算符 布尔类型的定义 使用比较运算符进行比较运算得到布尔类型的结果 比较运算符 """ 演示布尔类型的定义 以及比较运算符的应用 ​ """…

基于OpenMV与STM32的数据通信项目(代码开源)

前言&#xff1a;本文为手把手教学 OpenMV 与 STM32 的数据通信项目教程&#xff0c;本教程使用 STM32F103C8T6 与 OpenMV 进行操作。 OpenMV 是非常强大的计算机视觉实现工具&#xff0c;自身提供了非常多的视觉项目案例&#xff0c;编程与使用门槛极低。为了进一步增强作品的…

内存淘金术:Redis 内存满了怎么办?

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 内存淘金术&#xff1a;Redis 内存满了怎么办&#xff1f; 前言LRU&#xff08;Least Recently Used&#xff09;算法LFU&#xff08;Least Frequently Used&#xff09;算法定期淘汰策略内存淘汰事件…

字体图标 iconFont

字体图标使用场景︰主要用于显示网页中通用、常用的一些小图标 精灵图是有诸多优点的&#xff0c;但是缺点很明显。 图片文件还是比较大的。图片本身放大和缩小会失真。一旦图片制作完毕想要更换非常复杂。 此时&#xff0c;有一种技术的出现很好的解决了以上问题&#xff0c…

day-06 构造有效字符串的最少插入数

思路 动态规划&#xff1a; Word[i]单独组成abc 如果Word[i]>word[i-1] 则word[i]和word[i-1]一起构成abc 解题方法 关系式&#xff1a;dp[i]dp[i-1]2或dp[i]dp[i-1]-1 时间复杂度&#xff1a; O(n) 空间复杂度&#xff1a; O(1) Code class Solution {/*动态规划&…

Uncaught ReferenceError: videojs is not defined

项目场景&#xff1a; 项目背景&#xff1a; 开发 vue 项目时&#xff0c;调试时浏览器前端控制台 出现红色 报错信息&#xff1a; Uncaught ReferenceError: videojs is not defined 问题描述 遇到的问题&#xff1a; 开发 vue 项目时&#xff0c; 浏览器控制台出现如下所…

Python-基础语法

标识符 第一个字符必须是字母表中字母或下划线 _ 。标识符的其他的部分由字母、数字和下划线组成。标识符对大小写敏感。在 Python 3 中&#xff0c;可以用中文作为变量名&#xff0c;非 ASCII 标识符也是允许的了。 python保留字 保留字即关键字&#xff0c;我们不能把它们用…

【Docker】Docker安装入门教程及基本使用

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《Docker实战》。&#x1f3af;&#x1f3af; &…

Google上架:2024年一月政策限制之 AI 生成的内容

为确保 Google Play 用户能够获得安全、值得信赖的使用体验&#xff0c;Google会定期更新开发者计划政策。今天就来讲解一下关于一月新政策《AI 生成的内容》。 目录 公布日期&#xff1a;2023-10-25内容公告相关博客截止时间2024-1-31 公布日期&#xff1a;2023-10-25 内容公…