所谓的同源指的是三个相同,即协议相同、域名相同、端口相同。本文主要详细介绍下浏览器同源策略及规避方法。
在介绍同源策略之前,先介绍下浏览器 URL 的组成。以 http://www.example.com/dir/index.html?id=1234&name=abc#page 为例:
http::为协议部分,表示此网页使用的协议为HTTP。常见的协议有FTP、HTTP、HTTPS。协议后面的'//'为分隔符www.example.com:为域名部分。此处也可使用IP地址作为域名使用- 端口部分:跟在域名后面的是端口,域名和端口之间使用
':'作为分隔符。如果端口省略,则为默认端口 80,非必须部分 dir:为虚拟目录部分,即从域名后的第一个'/'开始到最后一个'/'为止,是虚拟目录的部分。非必须部分index.html:为文件名部分,即从域名最后一个'/'开始到'?'为止,如果没有'?',则是从域名最后一个'/'开始到#为止,如果没有'/'和'?',那么从域名最后一个'/'开始到结束都是文件名部分。此处为非必须部分,如果省略,则为默认文件名id=1234&name=abc#:为参数部分,即从'?'开始到'#'为止,又称搜索部分、查询部分。可允许有多个参数,参数之间使用'&'作为分隔符page:为锚部分,即从'#'开始到最后,都是锚的部分。非必须部分
针对域名部分,我还需要再多解释一下。在看一些文章的时候涉及到了一级域名和二级域名。这些概念含混不清。
域名 ( Domain Name ) ,简称域名、网域,是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称。*网域名称系统( DNS,Domain Name System,有时也简称为域名 ) 是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP地址数串。经常混淆的部分是一级域名又称定级域名和二级域名。
- 顶级域名:顶级域(或顶级域名;英语:Top-level Domain;英文缩写:TLD)是互联网DNS等级之中的最高级的域,它保存于DNS根域的名字空间中。顶级域名是域名的最后一个部分,即是域名最后一点之后的字母,例如在example.com这个域名中,顶级域是.com(或.COM),大小写视为相同。
- 二级域名:二级域(或二级域名;英语:Second-level domain;英文缩写:SLD)是互联网DNS等级之中,处于顶级域名之下的域。二级域名是域名的倒数第二个部分,例如在
example.com这个域名中,二级域名是example
以上,顶级域名主要有四个分类:
- 国家及地区顶级域:如
.cn代表中国,其他就不一一介绍了 - 通用顶级域:如
.com、.edu、.gov、.org、.net等 - 基础建设顶级域
- 测试顶级域
本文参考: