沉淀 | 从同源策略、跨域请求到JSONP

JavaScript有多大权限?

JavaScript只能嵌在页面中、被浏览器执行。JavaScript是依赖于页面而存在的。可以说,JavaScript是网页的一部分。
JavaScript在Web浏览器这个宿主环境中,通过浏览器提供的宿主对象和API啥的、有很多的权限:

沉淀 | 从同源策略、跨域请求到JSONP_第1张图片
  • 第一,对Html文档的操作权限
    在文档中,用

    服务端PHP代码 (services.php):

    //服务端返回JSON数据  
    $arr=array('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);  
    $result=json_encode($arr);  
    
    //动态执行回调函数  
    $callback=$_GET['callback'];  
    echo $callback."($result)";  
    

    注意到,JSONP说的是一种协议

    JSONP(JSON with Padding)是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问。

    服务端返回的是“JSNOP”的文档格式,客户端也要用特殊的方式去获取数据;协议的意思就是要两者配合完成的。

    主要提示

    JSONP 是构建 mashup 的强大技术,但不幸的是,它并不是所有跨域通信需求的万灵药。它有一些缺陷,在提交开发资源之前必须认真考虑它们。

    第一,也是最重要的一点,没有关于 JSONP 调用的错误处理。如果动态脚本插入有效,就执行调用;如果无效,就静默失败。失败是没有任何提示的。例如,不能从服务器捕捉到 404 错误,也不能取消或重新开始请求。不过,等待一段时间还没有响应的话,就不用理它了。(未来的 jQuery 版本可能有终止 JSONP 请求的特性)。

    JSONP 的另一个主要缺陷是被不信任的服务使用时会很危险。因为 JSONP 服务返回打包在函数调用中的 JSON 响应,而函数调用是由浏览器执行的,这使宿主 Web 应用程序更容易受到各类攻击。如果打算使用 JSONP 服务,了解它能造成的威胁非常重要。

你可能感兴趣的:(沉淀 | 从同源策略、跨域请求到JSONP)