浏览器同源策略详解

一、同源定义

同源即指两个URL协议,域名和端口号都相同,这样才可以互相访问彼此的资源。如果两个URL不满足以上条件,那么就是跨域请求。

例如:a.com和b.com之间的请求就是跨域请求,但是a.com和a.com:8080之间的请求就是同源请求。

二、同源策略的作用

浏览器的同源策略是为了防止恶意的网站窃取用户的隐私信息而设计的。如果没有同源策略,那么一个网页可以通过一些恶意的脚本来获取另一个网页中用户的敏感信息,例如Cookie。

同源策略可以保护用户的隐私信息,但也会限制网站与外部资源的交互,这就需要设计跨域解决方案。

三、同源策略的限制

1、Cookie、LocalStorage和IndexedDB无法读取。同源A网页下,无法读取同源B网页的Cookie、LocalStorage和IndexedDB。

<script>
let cookie = document.cookie; // 无法获得
let localStorage = window.localStorage; // 无法获得
let indexedDB = window.indexedDB; // 无法获得
</script>

2、DOM无法获取。同源A网页无法获取同源B网页中的DOM元素。

<iframe src="http://b.com"></iframe>
<script>
let iframe = document.getElementsByTagName('iframe')[0];
let bDom = iframe.contentWindow.document.getElementsByTagName('body')[0]; // 无法获得
</script>

3、AJAX请求无法发送。同源A网页无法向同源B网页发送AJAX请求。

fetch('http://b.com', {
  method: 'get'  // 无法请求
})

四、跨域解决方案

1、JSONP

JSONP利用script标签不存在跨域限制的特性,可以通过动态创建script标签,向另一个服务器请求数据,将响应结果放到回调函数中返回到网页中。

<script>
function handleData(res) {
  console.log(res);
}
let script = document.createElement('script');
script.src = "http://b.com/api?callback=handleData"; // 动态创建script标签
document.head.appendChild(script);
</script>

2、CORS

CORS实现了前后端的协商机制,由后端设置Access-Control-Allow-Origin响应头来允许跨域请求。

具体地,当浏览器发现请求不符合同源策略时,会进行一次CORS预检请求,即向另一个服务器发起OPTIONS请求,询问是否允许跨域,如果得到响应,则可以进行跨域请求。

后端需要设置Access-Control-Allow-Origin、Access-Control-Allow-Credentials等响应头,前端需要在AJAX请求中加上withCredentials和设置xhr的请求头。

// 后端设置响应头
Access-Control-Allow-Origin: http://a.com
Access-Control-Allow-Credentials: true

// 前端AJAX请求
let xhr = new XMLHttpRequest();
xhr.withCredentials = true; // 允许跨域带Cookie
xhr.open("GET", "http://b.com/api");
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send();

3、WebSocket

WebSocket是一种可以在单个TCP连接上进行全双工通信的网络协议,在进行跨域通信时,WebSocket可以直接连接到另一个服务器并发送数据,不再需要通过CORS等方式解决跨域问题。

let socket = new WebSocket('ws://b.com');
socket.onopen = function() {
  socket.send('hello, b');
}
socket.onmessage = function(event) {
  console.log(event.data);
}

五、小结

浏览器的同源策略可以保护用户的隐私信息,但也会限制网站与外部资源的交互,需要设计跨域解决方案。常用的跨域解决方案有JSONP、CORS、WebSocket等。在使用跨域解决方案时,需要注意安全性和对浏览器的性能影响。

原创文章,作者:MYLVX,如若转载,请注明出处:https://www.506064.com/n/369240.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
MYLVXMYLVX
上一篇 2025-04-12 13:00
下一篇 2025-04-12 13:00

相关推荐

  • 如何解决web浏览器双击事件时差

    本文将从以下几个方面对web浏览器双击事件时差进行详细阐述,并提供解决方法。 一、双击事件延时设置 1、问题描述:在web浏览器中,双击事件默认会延时一定的时间才能触发该事件,这个…

    编程 2025-04-29
  • Python量化策略代码用法介绍

    Python量化策略是一种金融投资策略,在金融领域中得到越来越广泛的应用。下面将从数据准备、策略制定、回测和优化等方面介绍Python量化策略的详细实现。 一、数据准备 在量化策略…

    编程 2025-04-29
  • 使用Python模拟手机浏览器的方法

    解答如何使用Python模拟手机浏览器,并且给出示例代码。 一、安装Selenium库 使用Python模拟手机浏览器需要使用Selenium库。 首先,使用pip命令进行安装: …

    编程 2025-04-28
  • 谷歌浏览器窗口大小调整

    谷歌浏览器是当今最流行的网络浏览器之一,它的窗口大小调整是用户操作其中的一个重要部分。本文将从多个方面对谷歌浏览器窗口大小调整做详细的阐述。 一、窗口大小调整的基础操作 谷歌浏览器…

    编程 2025-04-28
  • 如何在电脑上下载安装谷歌浏览器?

    想要在电脑上使用谷歌浏览器,我们需要先进行下载和安装。下面,本文将从多个方面详细阐述如何在电脑上下载安装谷歌浏览器。 一、到谷歌浏览器官方网站下载 谷歌浏览器官方网站是我们下载谷歌…

    编程 2025-04-28
  • 如何解决Fiddler抓不到谷歌浏览器的包问题

    当使用Fiddler工具抓取网络数据包时,由于谷歌浏览器的加密机制,使得Fiddler无法直接抓取到谷歌浏览器发送的网络数据包。下面将从几个方面阐述如何解决这个问题。 一、关闭谷歌…

    编程 2025-04-27
  • 机制与策略分离

    了解机制与策略分离的解决方法与优势 一、概述 机制与策略分离是一种软件设计理念,它将复杂的系统、组件等模块化,通过分离机制与策略,把模块实现的方式与具体使用方式分开。 机制是实现某…

    编程 2025-04-27
  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • git config user.name的详解

    一、为什么要使用git config user.name? git是一个非常流行的分布式版本控制系统,很多程序员都会用到它。在使用git commit提交代码时,需要记录commi…

    编程 2025-04-25

发表回复

登录后才能评论