JSONP(JSON with Padding),是一种使用JavaScript加载并解析具有“padding”的JSON数据的方法,在跨域资源共享(CORS)方案之前就已经存在。JSONP 解决了跨域请求存在的安全性问题。换句话说,jsonp是一种利用标签跨域请求数据的技术。
JSONP主要由三部分组成:一个回调函数,一个JSON对象(也可能是字符串)以及一个标签。当请求完成后,服务器端通过标签把json对象添加到标签里,并且把回调函数的函数名放到json对象里,以传给客户端。
客户端则在执行脚本时执行这个回调函数,把服务器端传过来的json对象作为参数传入函数,最终客户端拿到json对象,从而实现跨域访问。
JSONP可以说是跨域资源共享(CORS)的早期解决方案,它是一种利用标签引入一段客户端脚本,通过这段脚本的帮助从远程服务器获取js文件的共享机制,同时在不破坏原有浏览器环境安全限制的前提下,实现跨域文件的访问。
JSONP技术的优势,首先,JSONP技术相比传统AJAX请求,有更好的兼容性,因为它是一种在跨域环境中使用标签请求数据最终形成一种解决方案,容易兼容老版本的浏览器,没有现代浏览器中CORS这样安全性要求较高的请求。其次,客户端发送请求更加简单,它只需要使用标签请求数据,而不需要使用强大复杂的XMLHttpRequest对象。再次,服务器的响应内容可以是任意的脚本,而不仅仅是JSON对象,如果需要在客户端完成复杂的数据处理,可以自定义回调函数,服务器返回的脚本格式的函数代码,客户端直接运行拿到结果,Problem solved。
但JSONP也有自身的局限性,首先JSONP类型的请求只能是GET类型的请求,而不能是POST,有些时候可能带来很大的局限;其次,如果服务端不支持jsonp,使用jsonp也无济于事;再次,因为服务器端必须把响应内容格式化成脚本函数的形式,才可以通过标签加载,因此jsonp的返回是不可控的,令客户端在分析其中内容变得困难,有时候还会暴露客户端元数据;最后,某些服务器端框架可能不支持对JSONP请求的响应,这样也会对使用JSONP技术提出较多限制。
总之,JSONP是一种利用标签跨域请求数据的技术,它具有兼容性好、操作方便、跨域访问灵活性高等优势,但也存在POST请求限制、无法接收服务器数据等劣势,不能代替XMLHttpRequest对象的应用,因此JSONP的使用场景大多都是在对安全符合要求不是太高的情况下,方便快捷地实现跨域访问,或者提供给一般的第三方系统用于调用的情况。
本文地址:IT问答频道 https://www.eeeoo.cn/itwenda/1056932.html,嗨游网一个专业手游免费下载攻略知识分享平台,本站部分内容来自网络分享,不对内容负责,如有涉及到您的权益,请联系我们删除,谢谢!