Url的协议、子域名、主域名、端口号中任意一个不相同时,都算作不同域。不同域之间相互请求资源,就算作“跨域”。
非同源限制:
- 无法读取非同源网页的Cookie、LocalStorage和IndexedDB。
- 无法接触非同源网页的DOM。
- 无法向非同源地址发送AJAX请求。
常见跨域场景:
URL | 说明 | 是否允许通信 |
同一域名下 | 允许 | |
同一域名下不同文件夹 | 允许 | |
同一域名,不同端口 | 不允许 | |
同一域名,不同协议 | 不允许 | |
域名和域名对应IP | 不允许 | |
主域名相同,子域名不同 | 不允许 | |
同一域名,不同二级域名(同上) | 不允许 | |
不同域名 | 不允许 |
注意:跨域并不是请求发不出去,请求能发出去,服务端能收到请求并正常返回结果,只是结果被浏览器拦截了。你可能会疑问明明通过表单的方式可以发起跨域请求,为什么 Ajax 就不会?因为归根结底,跨域是为了阻止用户读取到另一个域名下的内容,Ajax 可以获取响应,浏览器认为这不安全,所以拦截了响应。但是表单并不会获取新的内容,所以可以发起跨域请求。同时也说明了跨域并不能完全阻止 CSRF,因为请求毕竟是发出去了。