跨域请求解决方法 —— jsonp

Javascript出于安全方面的考虑,不允许跨域调用其他页面的对象,但这样却给平时的开发带来了不少麻烦,这里把涉及到跨域的问题进行了简单地整理

一. 同源策略

1. 什么是域(origin)?

域是由三部分组成:URI Schema(协议类型)、host name(域名)、port number(端口号)
举个例子:

  • http://www.a.com这个页面,URI Schema是http,host name是www.a.com,port number是默认的80;
  • https://www.b.com:8080/test/这个页面,URI Schema是https,host name是www.b.com,port number是8080。

上面两个页面的三个部分全部不相同,所以它们就是不同的域。下面表格可以更好地看出什么是同域:

URL 说明 是否允许通信
http://www.a.com/a.js
http://www.a.com/b.js
同一域名下 允许
http://www.a.com/lab/a.js
http://www.a.com/script/b.js
同一域名下不同文件夹 允许
http://www.a.com:8000/a.js
http://www.a.com/b.js
同一域名,不同端口 不允许
http://www.a.com/a.js
https://www.a.com/b.js
同一域名,不同协议 不允许
http://www.a.com/a.js
http://70.32.92.74/b.js
域名和域名对应ip 不允许
http://www.a.com/a.js
http://script.a.com/b.js
主域相同,子域不同 不允许
http://www.a.com/a.js
http://a.com/b.js
同一域名,不同二级域名(同上) 不允许
http://www.b.com/a.js
http://www.a.com/b.js
不同域名 不允许

2. 同源策略

它限制了某个域下的文档或者js与另一个域中的资源交互的方式,它提供了一种安全机制,这种安全机制可以避免来自恶意网站的攻击。同源策略要求浏览器允许来自某个网页上的js请求来自另一个网页的数据,当且仅当两个页面来自相同的域。
通过同源策略可以阻止来自恶意网站的脚本通过其他网站的DOM获取其他网站的信息。可以避免CSRF和XSS攻击。

  • 同源策略限制的是浏览器或者其他提供类似浏览器服务的软件,这只是一个规范,所以浏览器是否遵守这个规范也不一定,所以IE浏览器判断同源的时候就不必考虑端口号;
  • 同源策略限制的js,而图片、css这些事不存在同源策略限制的

二. jsonp方式的原理

  • 浏览器的同源策略把跨域请求都禁止了
  • HTML的

    增加该标签之后,浏览器就会立即去请求这个url,由于

你可能感兴趣的:(跨域请求解决方法 —— jsonp)