Skip to content

什么是跨域

同源策略

同源策略是指协议名、域名、端口号三者相同,即便两个不同的域名指向同一 IP 地址也非同源。如果缺少同源策略浏览器很容易受到 XSS、CSRF 攻击

同源策略限制的内容

  • Cookie、LocalStorage、IndexedDB 等存储性的内容
  • DOM 节点
  • Ajax 请求(发送后被浏览器拦截)

允许跨域加载资源的三个标签

<img src="xxx">
<link href="xxx">
<script src="xxx"></script>

特别说明

  • 如果是协议和端口造成的跨域问题,前端是无能为力的
  • 跨域请求并不是请求发布出去,请求能发出去,服务器也能够收到请求并正常返回结果,只是结果被浏览器拦截了

跨域解决方案

CORS

只要服务器设置了 Access-Control-Allow-Origin 就可以开启 CORS。该属性表示那些域名可以访问资源。

简单请求

同时满足以下两个条件就属于简单请求

  • 使用以下方法
    • get
    • head
    • post
  • Content-Type 的值为以下三者之一
    • text/plain
    • multipart/form-data
    • application/x-www-form-urlencoded

复杂请求

不符合以上条件的就是复杂请求。复杂请求会在正式通信之前增加一次 option 方法的预检查,通过该请求来知道是否允许跨域请求。

存在的问题

对于 CORS 请求,只能拿到 response header 中的 6 个基本字段,如果想拿到其他的字段就必须在 Access-Control-Expose-Headers 里指定需要的字段