前端跨域问题

117 阅读1分钟

什么是跨域

跨域是只一个域下的文档或脚本试图请求另个一个域下的资源,这里的跨域是广义的。

广义的跨域:

  • 资源跳转: A链接、重定向、表单提交
  • 资源嵌入:<link><script><img><frame>等dom标签,还有样式中的backgrond:url()、@font-face()等文件外链
  • 脚本请求:js发起的ajax请求、dom和js对象的跨域操作等

同源策略

同源策略是一种约定,由Netscape公司1995年引入浏览器,它是浏览器最核心也是最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSFR等攻击。同源是指“协议+域名+端口”三者相同,几遍两个不同的域名指向同一个ip地址也不是同源的。

同源策略限制行为:

1. Cookie、LocalStorage 和 IndexDB无法读取
2. DOM 和 JS 对象无法获得
3. AJAX 请求不能发送

常见跨域场景

  • 同一域名,不同文件或者路径 (允许)
  • 同一域名,不用端口 (不允许)
  • 同一域名,不同协议 (不允许)
  • 域名和域名对应相同IP (不允许)
  • 主域名相同,子域名不同 (不允许)
  • 不同域名 (不允许)

跨域解决方案