域名1 | 域名2 | 说明 | 是否允许通信 |
---|---|---|---|
http://www.a.com/a.js | http://www.a.com/b.js | 同一域名下 | 允许 |
http://www.a.com/lab/a.js | http://www.a.com/script/b.js | 同一域名下不同文件夹 | 允许 |
http://www.a.com:8000/a.js | http://www.a.com/b.js | 同一域名,不同端口 | 不允许 |
http://www.a.com/a.js | http://70.32.92.74/b.js | 域名和域名对应ip | 不允许 |
http://www.a.com/a.js | http://script.a.com/b.js | 主域相同,子域不同 | 不允许 |
http://www.a.com/a.js | http://a.com/b.js | 同一域名,不同二级域名(同上) | 不允许(cookie这种情况下也不允许访问) |
http://www.cnblogs.com/a.js | http://www.a.com/b.js | 不同域名 | 不允许 |
特别注意两点:
- 如果是协议和端口造成的跨域问题“前台”是无能为力的,
- 在跨域问题上,域仅仅是通过“URL的首部”来识别而不会去尝试判断相同的ip地址对应着两个域或两个域是否在同一个ip上。
“URL的首部” 指window.location.protocol +window.location.host,也可以理解为“Domains, protocols and ports must match”。
要说道同源策略,我们首先看一下 Document这个对象, 它表示的是浏览器中加载的网页, 我们可以在js代码中操作这个对象
1 | <script type="application/javascript"> |
这个document.domain 就是源, 一般是由协议+域名+端口组成的.
在每个网页中都会有一个document对象, 同理,每个网页中也都会一个domain属性.
在根域范围内,允许你把domain属性的值设置为它的上一级域。例如,在 developer.mozilla.org 域内,可以把domain设置为 “mozilla.org” 但不能设置为 “mozilla.com” 或者”org”。
当在当前页面(js也是加载到当前页面进行调用执行的, 这个最后有给)
上面了同源策略的原理, 我们看一下在实际开发过程中,都有哪些行为受到同源策略影响
XMLHttpRequest 请求
标签
当使用XMLHttpRequest 请求时, 发现如果请求的域名和当前域不是同一个,则会阻止请求前端解决跨域问题的8种方案(最新最全)
浏览器是如何执行javascript的?
浏览器同源政策及其规避方法
由同源策略到前端跨域
详解XMLHttpRequest的跨域资源共享