JSONP(JSON with Padding)是一种常用的跨域数据请求策略,它的基本原理是利用 <script> 标签的 src 属性没有同源策略限制的特性来达到跨域的目的。
我们来详细解析 JSONP 的工作原理:
- 构造请求:在前端,我们首先构造一个请求 URL,将需要的数据以查询参数的形式附加到 URL 上。这个 URL 通常还会包含一个特殊的查询参数,例如 callback,用来指定一个回调函数的名称。
- 创建 script 标签:然后,我们动态创建一个 <script> 标签,并将其 src 属性设置为上一步构造的 URL。这个 <script> 标签一旦被插入到 html 文档中,浏览器就会开始加载 src 指向的资源。
- 服务器响应:服务器接收到请求后,从查询参数中提取数据并进行处理。处理完毕后,服务器将处理结果包裹在一个函数调用中返回。这个函数的名称就是前端在请求中指定的回调函数的名称。
- 执行回调函数:当浏览器接收到服务器的响应后,由于响应内容是一个函数调用,所以浏览器会尝试执行这个函数。前端需要预先定义这个回调函数,以处理从服务器接收到的数据。
JSONP 的缺点是只能进行 GET 请求,不能进行 POST 或其他类型的 HTTP 请求。此外,由于是通过插入 <script> 标签的方式获取数据,如果服务器响应的数据中含有恶意脚本,那么这些脚本将会被执行,从而带来安全风险。
由于以上缺点,现在更推荐使用 CORS(跨源资源共享)来进行跨域请求,CORS 不仅支持所有类型的 HTTP 请求,而且更安全。
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。