美文网首页
跨域问题分析

跨域问题分析

作者: coderfl | 来源:发表于2020-04-14 09:40 被阅读0次
  • 因为浏览器的同源策略,前端开发会遇到各种跨域问题。本篇文章总结了遇到跨域问题的不同的场景以及对应的解决方案。
  • 协议、域名、端口都相同才叫同源。

同源政策的目的,是为了保证用户信息的安全,防止恶意的网站窃取数据。
设想这样一种情况:A网站是一家银行,用户登录以后,又去浏览其他网站。如果其他网站可以读取A网站的 Cookie,会发生什么?
很显然,如果 Cookie 包含隐私(比如存款总额),这些信息就会泄漏。更可怕的是,Cookie 往往用来保存用户的登录状态,如果用户没有退出登录,其他网站就可以冒充用户,为所欲为。因为浏览器同时还规定,提交表单不受同源政策的限制。
由此可见,"同源政策"是必需的,否则 Cookie 可以共享,互联网就毫无安全可言了。

  • 受到同源限制:
    1. 无法读取不同源的 Cookie、LocalStorage 和 IndexDB 。
    2. 无法获得不同源的DOM 。
    3. 不能向不同源的服务器发送ajax请求。
  • 不受同源限制:
    1. 在浏览器中,<script>、<img>、<iframe>、<link>等标签都可以跨域加载资源,而不受同源策略的限制。
  • 浏览器对跨域访问的判定:
    • CORS机制把跨域请求分为两类:简单请求和非简单请求。

1)请求方法是以下三种方法之一:HEAD、GET、POST
2)HTTP的头信息不超出以下几种字段:
Accept
Accept-Language
Content-Language
Last-Event-ID
Content-Type:只限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain
凡是不同时满足上面两个条件,就属于非简单请求。浏览器对这两种请求的处理,是不一样的。

  • 简单请求:浏览器会带上Origin的请求头发送到服务器,服务器根据Origin判断是否许可。如果许可就会带上CORS相关响应头,如果不在许可范围内就不会带上CORS相关的响应头。浏览器再根据响应头中是否有相关的CORS响应头,来判断拦截响应body和抛出错误。

  • 非简单请求:非简单请求会在发真正的请求之前发送一个OPTIONS的带着Origin、Access-Control-Request-Method、Access-Control-Request-Headers等CORS相关的请求头的预检请求到服务器,服务器确认可以这样请求,就会返回带着Access-Control-Allow-Origin、Access-Control-Allow-Methods、Access-Control-Allow-Headers等CORS相关的响应头的响应,浏览器检查到相关的CORS响应头,说明通过预检可以继续发送真正的请求;服务器确认不可以,则不会返回这些相关响应头,浏览器没检查到CORS的响应头就会抛出错误。

相关文章

网友评论

      本文标题:跨域问题分析

      本文链接:https://www.haomeiwen.com/subject/dwoamhtx.html