跨域简析

164 阅读3分钟

1. 同源策略

同源:

URL由协议、域名、端口和路径组成,如果两个URL的协议、域名和端口相同,则表示他们同源。

同源策略:

同源策略是浏览器的一种安全机制。总体来说,它就是限制了跨域资源访问。但是对不同的资源会有些许不同。

  • DOM访问的同源策略:禁止非同源脚本语言访问DOM元素。
  • XMLHttpRequest的同源策略:禁止ajax请求非同源资源。
  • Cookie的同源策略:浏览器只会将cookie带网同源服务器。
  • <script><img><link><iframe>标签的同源策略:可以跨源加载资源。

2.跨域

由于浏览器同源策略的影响,跨域访问资源受到了限制。由下图说明哪些环节会受到影响。

跨域示例

  1. 浏览器正常请求一个9000的html页面
  2. html页面中的<script>标签跨域请求js和css资源。(可以跨域加载资源)
  3. js用XMLHttpRequest(ajax)请求8080的接口系统。(跨域请求资源失败)
  4. <iframe>标签跨域加载8888的页面。(可以跨域加载资源)
  5. <iframe>加载的js资源访问了父页面的DOM。(跨域访问失败

3.常见解决方案

1)Ajax跨域

2)Cookie跨域

  • 跨域资源共享CORS

    一般,9000上的js的ajax访问8080的接口系统时,默认并不带上8080下发的cookie。需要如下配置:
    XMLHttpRequest设置属性withCredentials = true。服务端配合在响应头中设置相应的属性Access-Control-Allow-Credentials。

  • 设置Document.domain

    两个网页一级域名相同,只是二级域名不同,浏览器允许通过设置document.domain共享 Cookie。

  • 反向代理

    同上。

3)Iframe跨域

  • 不常见(不做阐述)