admin 管理员组

文章数量: 887021


2024年2月25日发(作者:sql的约束)

简述jsonp跨域原理

JSONP(JSONwithPadding)是一种可以解决跨域问题的技术,它基于共享和允许浏览器从一个页面中获取另一页面的数据。例如,假设和是两个不同的网站,那么,网站上的页面可以以JSONP的形式访问网站上的数据,因此实现了跨域请求。

一般来说,跨域请求是被浏览器禁止的。浏览器阻止跨源请求是为了防止不受信任的网站获取用户的数据或作出违法的行为。但是,JSONP正是利用浏览器的这一特性,并且可以让浏览器发起跨域的请求,从而实现跨域的目的。

首先,要使用JSONP,服务器端必须支持。因为,传统的AJAX技术,通过在client端发起XMLHttpRequest来发起http请求,而JSONP的请求是由浏览器端发起的,请求的形式是一个script标签,而script标签里面可以携带参数,例如回调函数名称,以及可选的HTTP头和URL参数。

其次,客户端需要发起一个script标签的请求,请求的URL是JSONP服务器端提供的接口,同时,客户端可以通过添加特定参数来告知服务器端要求的数据的类型和回调函数名称。服务器收到客户端的请求后,就可以根据请求参数返回JSON数据,并且将该JSON数据封装在一个函数调用中,该函数名称就是client端指定的那个回调函数名称。

最后,浏览器接收到服务器端返回的数据后,就会将其解析为一个函数调用,并且会传入相关参数,这些参数就是client端在请求 - 1 -

时所携带的JSON数据。览器接收到服务器端返回的消息之后,就会执行由客户端指定的回调函数,从而实现跨域请求。

由上述实现原理可知,JSONP其实就是将原本由XMLHttpRequest发起的跨域请求,通过动态新增< script>标签,让浏览器发起一个带参数的通常HTTP请求而实现的。虽然JSONP可以解决AJAX无法解决的跨域资源交互问题,但是它的危险性也是非常有的。首先,JSONP的请求完全是没有浏览器的同源策略的限制,任何非安全的网站都有可能通过JSONP来接收客户端的数据,甚至可以拿到客户端的cookie;其次,还可能遭受XSRF(Cross-Site Request Forgery)攻击,简单地说,就是在不知情的情况下,客户端会发出用户并不知情的请求,从而导致安全隐患。

因此,当我们在使用JSONP时,一定要特别注意网络安全,避免发生危险的情况,同时要正确使用JSONP,以免出现一些不可预知的错误。

- 2 -


本文标签: 请求 数据 浏览器