什么是跨域?

什么是跨域(同源策略)?


1. 浏览器有一个同源策略:协议、域名、端口号都必须一致,如果任意一项不一致,就是不同源。简单理解就是你的页面url和你调用的url不是同一个地方的,浏览器觉得有安全风险,不让你使用这个接口的数据

跨域,是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript实施的安全限制。同源策略限制了一些行为,包括Cookie、LocalStorage和IndexDB无法读取,DOM和JS对象无法获取,以及Ajax请求无法发送等。

所谓的同源是指,域名、协议、端口均为相同。如果一个页面的协议、域名、端口与另一个页面的URL不同,那么这个页面与另一个页面就是跨域的。例如,http://www.nealyang.cn/index.html 调用 http://www.nealyang.cn/server.php 不是跨域,但是 http://www.nealyang.cn/index.html 调用 http://www.neal.cn/server.php 或者 http://abc.nealyang.cn/index.html 调用 http://def.neal.cn/server.php 都是跨域的,因为主域不同或者子域名不同。另外,http://www.nealyang.cn:8080/index.html 调用 http://www.nealyang.cn/server.php 或者 https://www.nealyang.cn/index.html 调用 http://www.nealyang.cn/server.php 也都是跨域的,因为端口不同或者协议不同。

跨域限制访问是为了保护用户的隐私和安全,防止恶意网站通过脚本访问其他网站的敏感信息或进行恶意操作。当然,出于便捷性考虑,很多接口是允许跨域的,但这样做也可能会带来安全问题。为了解决不同源站点之间的数据交换问题,例如通过AJAX、WebSocket或Fetch API等方式来请求同源网站的数据,或者通过设置同源策略嵌套其他网站的脚本后使用postMessage的方式获取数据,但这些方式有一定的限制和适用范围。

2.浏览器同源策略

同源策略是一种安全机制,用于限制一个网页文档或脚本如何与来自不同源的资源进行交互。同源是指两个URL的协议、主机和端口号都相同。同源策略的目的是保护用户的隐私和安全,防止恶意网站通过脚本访问其他网站的敏感信息或进行恶意操作。浏览器默认情况下允许同源之间的站点相互访问资源和操作DOM,但不同源之间若想要相互访问资源或者操作DOM,则会受到一些基础的安全策略的制约,这些策略被称为同源策略。同源策略主要限制了以下几个方面:

        DOM层面:不同源站点之间不能相互访问和操作DOM。
        数据层面:不能获取不同源站点的Cookie、LocalStorage、indexDB等数据。
        网络层面:不能通过XMLHttpRequest向不同源站点发送请求。


当然,同源策略并不是绝对隔离不同源的站点,比如link、img、script标签都没有跨域限制。如何解决不同源站点之间的数据交换问题,例如通过AJAX、WebSocket或Fetch API等方式来请求同源网站的数据,或者通过设置同源策略嵌套其他网站的脚本后使用postMessage的方式获取数据,但这些方式有一定的限制和适用范围。

为了解决同源策略带来的限制问题,引入了一些跨域解决方案,如跨域资源共享(CORS)和跨文档消息传递(PostMessage)。这些解决方案允许在特定条件下进行跨域交互,同时保持了一定的安全性。

你可能感兴趣的:(前端)