*****同源策略*****
如果两个页面的协议,端口(如果有指定)和主机都相同,则两个页面具有相同的源。
我们也可以把它称为“协议/主机/端口 tuple”,或简单地叫做“tuple". ("tuple" ,“元”,是指一些事物组合在一起形成一个整体,)
简单来说:所谓的同源策略就是要 “源”相同 ,只有当源文件的父目录是目标文件的祖先目录时,文件才能读取另一个文件。
基本所有浏览器都要遵循协议 主机和端口相同//IEl浏览器可以不用端口相同
源政策会影响到所有对同源政策的检查的行为,包括 xmlhttprequest , XSLT,与XBL。
至于跨window的DOM存取,基本上每一个档案都被视为不同源
在页面中用 about:blank
或 javascript:
URL 执行的脚本会继承打开该 URL 的文档的源,因为这些类型的 URLs 没有明确包含有关原始服务器的信息。
页面可能会因某些限制而改变他的源。脚本可以将 document.domain
的值设置为其当前域或其当前域的父域。如果将其设置为其当前域的父域,则这个较短的父域将用于后续源检查。假设 http://store.company.com/dir/other.html 文档中的一个脚本执行以下语句:
document.domain = "company.com";
这条语句执行之后,页面将会成功地通过对 http://company.com/dir/page.html
的同源检测(假设http://company.com/dir/page.html
将其 document.domain
设置为“company.com
”,以表明它希望允许这样做
)
端口号是由浏览器另行检查的。任何对document.domain的赋值操作,包括 document.domain = document.domain
都会导致端口号被重写为 null
。因此 company.com:8080
不能仅通过设置 document.domain = "company.com"
来与company.com
通信。必须在他们双方中都进行赋值,以确保端口号都为 null
。