同源与跨域(一)

参考:
浏览器的同源策略
浏览器同源政策及其规避方法
同源政策


什么是同源策略?

同源策略限制了从同一个源加载的文档或脚本如何与来自另一个源的资源进行交互。这是一个用于隔离潜在恶意文件的重要安全机制。

源的定义

如果两个页面的协议端口(如果有指定)和域名都相同,则两个页面具有相同的源。

同源检测示例:http://www.example.com/directory/page.html

http://www.example.com/directory/other.html                  // 成功
http://www.example.com/directory/inner/another.html          // 成功
https://example.com/index.html                               // 失败     不同协议(http | https)
http://example.com:90/dir/secure.html                        // 失败     不同端口(80 | 90)
http://new.example.com:90/dir/secure.html                    // 失败     不同域名(new.example | example)

同源下的脚本只能读取与所属文档同源的窗口和文档的属性。
同源政策的目的,是为了保护用户信息的安全,防止恶意的网站窃取数据。

目前,非同源将会受到限制的行为有:

  • 无法读取非同源资源下的:Cookie、LocalStorage、IndexedDB。
  • 无法操作非同源网页的DOM。
  • 无法向非同源地址发送Ajax请求(实际上,服务器会收到请求,也会返回,但最终被浏览器拦截)。

注意

  • 对于当前页面来说页面存放的 JS 文件的域不重要,重要的是加载该 JS 页面所在什么域。
  • 同源策略限制的是脚本嵌入的文本来源,而不是脚本本身。

不受同源策略限制:

  • 页面中的链接,重定向以及表单提交是不会受到同源策略限制的。
  • 跨域资源的引入是可以的。但是js不能读写加载的内容。如嵌入到页面中的