相关概念
1 | 同源策略是浏览器的一种安全策略,所谓同源是指 **域名,协议,端口完全相同** ,只有同源的地址才可以相互通过AJAX 的方式请求。 |
什么是同源?例如:http://www.example.com/detail.html 与一下地址对比
1 | http://api.example.com/detail.html 不同源 域名不同https://www.example.com/detail.html 不同源 协议不同http://www.example.com:8080/detail.html 不同源 端口不同http://api.example.com:8080/detail.html 不同源 域名、端口不同https://api.example.com/detail.html 不同源 协议、域名不同https://www.example.com:8080/detail.html 不同源 端口、协议不同http://www.example.com/other.html 同源 只是目录不同 |
解决方案
现代化的 Web 应用中肯定会有不同源的现象,所以必然要解决这个问题,从而实现跨域请求。
发送跨域请求的方式
1 | ##1. img |
JSONP
1 | JSON with Padding,是一种借助于 script 标签发送跨域请求的技巧。 |
将原本需要返回给客户端的数据传递进去。
以后绝大多数情况都是采用 JSONP 的手段完成不同源地址之间的跨域请求
1 | //客户端 |
总结一下:由于 XMLHttpRequest 无法发送不同源地址之间的跨域请求,所以我们必须要另寻他法,script 这种方案就是我们最终选择的方式,我们把这种方式称之为 JSONP。
1 | //JSONP存在的问题:1.JSONP需要服务端配合,服务端按照客户端的要求返回一段JavaScript调用客户端的函数2.只能发送GET请求注意:JSONP用的是script标签,和AJAX提供的XMLHttpRequest没有任何关系!!! |
为每次请求创建一个函数
1 | ##1.客户端 |
JSONP的封装
1 | function jsonp (url, params, callback) { |
- 本文作者: gtt
- 本文链接: https://gtt011029.github.io/posts/11449/