[TOC]

同源

如果两个页面的协议(https或http)、域名和端口都相同,则两个页面是同源

例如对于https://www.yuque.com/dashboard

URL 是否同源 原因
http://www.yuque.com/dashboard 协议不同(https和http)
https://www.yuque.com/ 域名、协议、端口相同
https://blog.yuque.com/dashboard 域名不同(www和blog不一样)
https://www.yuque.com:7001/dashboard 端口不同(默认为80和7001不一样)
https://www.yuque.com:80/dashboard 端口、协议、域名相同

同源测略

同源策略(英文全称 Same origin policy)是浏览器提供的一个安全功能MDN官方文档给定的概念:同源策略限制了从同一个源加载的文档或脚本如何与来自另一个源的资源进行交互。这是一个用于隔离潜在恶意文件的重要安全机制
通俗的理解:浏览器规定,A 网站的 JavaScript,不允许和非同源的网站 C 之间,进行资源的交互,例如:

  1. 无法读取非同源网页的Cookie、LocalStorage 和IndexedDB
  2. 无法接触非同源网页的DOM
  3. 无法向非同源地址发送Ajax请求

跨域

同源指的是两个URL协议、域名、端口一致,反之,则是跨域出现跨域的根本原因:浏览器的同源策略不允许非同源的URL之间进行资源的交互
网页:[https://www.yuque.com](https://www.yuque.com)
接口:[http://www.api.com/userlist](http://www.api.com/userlist)

注意:浏览器允许发起跨域请求,但是,跨域请求回来的数据,会被浏览器拦截,无法被页面获取到!


如何实现跨域请求

  • **JSONP**出现的早,兼容性好(兼容低版本IE)。是前端程序员为了解决跨域问题,被迫想出来的一种临时解决方案。缺点是只支持 GET 请求,不支持 POST 请求。
  • **CORS**出现的较晚,它是 W3C 标准,属于跨域 Ajax 请求的根本解决方案。支持 GETPOST 请求。缺点是不兼容某些低版本的浏览器

JSONP实现原理

  • 由于浏览器同源策略的限制,网页中无法通过Ajax请求非同源的接口数据。但是<script>标签中的src属性不受浏览器同源策略的影响,可以通过src属性,请求非同源的js脚本
  • JSONP 的实现原理,就是通过