跨域,指的是从一个域名去请求另外一个域名的资源,即跨域名请求。
这是由浏览器的同源策略造成的,是浏览器施加的安全限制, 跨域限制访问,其实是浏览器的限制。 同源策略是浏览器最核心也最基本的安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源 ,这是一个用于隔离潜在恶意文件的重要安全机制。所以跨域问题只在浏览器中出现,如果客户端是APP的话,那跨域问题就不存在了。
非同源限制:
无法读取非同源网页的 Cookie、LocalStorage 和 IndexedDB
无法对非同源网页的 DOM 和JS对象进行操作
无法向非同源地址发送 AJAX请求 非同源限制
无法读取非同源网页的 Cookie、LocalStorage 和 IndexedDB
无法对非同源网页的 DOM 和JS对象进行操作
无法向非同源地址发送 AJAX请求
跨域的解决方案:
-
由于同源策略的限制,AJAX请求是不允许进行跨域请求的,但是在HTML中,拥有src和href属性的标签是可以跨域请求外部资源的,如link、script、img等.
根据<script>标签的特性,开发人员想到了一个解决跨域请求的方法,即JSONP,全名 JSON with padding 。
JSONP
:JSONP
方法是指,利用script
标签的src
属性不受同源策略影响的特性,拥有此特性的标签还有img
、iframe
以及link
(存在JSONP
劫持漏洞)。缺点:需要服务器端的支持,并且仅支持
get
请求。 -
CORS
:服务器端设置响应头,控制是否允许跨域。优点:服务器端控制,支持各种请求方式。
缺点:会产生额外请求(预检请求)。