阐述Javascript的同源策略?
同源策略(Same-origin policy)是一种重要的安全策略,它被用于限制从同一源加载的文档或脚本如何与来自其他源的资源进行交互。这是一种防止恶意行为的重要安全机制。
在JavaScript中,如果两个网页的协议,端口(如果有的话)和主机都相同,那么这两个网页属于同源。这意味着http://www.example.com/dir/page1.html 和 http://www.example.com/dir/page2.html 是同源的。
但是,以下例子则不属于同源:
- http://www.example.com 和 https://www.example.com (协议不同)
- http://www.example.com:80 和 http://www.example.com:81 (端口不同)
- http://www.example.com 和 http://en.example.com (主机不同)
同源策略的主要影响包括:
- Cookie、LocalStorage 和 IndexDB 无法读写。
- DOM 无法获得和操作。
- AJAX 请求不能发送。
当然,也有一些方法可以在不同源的情况下进行数据通信,比如 JSONP、CORS(跨源资源共享)等。
比如,CORS是一种W3C标准,它允许服务器使用特定的HTTP头来告诉浏览器,它允许来自其他源的请求。这样,即使是不同源,我们也可以在满足CORS策略的条件下,进行数据通信。