一、为什么会有JSONP

解决跨域问题;因为XMLHttpRequest有同源策略,而在实际开发中又常有跨域的需求,早期开发者为解决跨域问题,设计出了JSONP这个东西

二、JSONP长什么样

类似JSON,一种JSON的变体,样式就像是包在函数的参数里
函数名({“data”:”数据”}),一般情况下这个函数都是个回调函数即
callback({“data”:”数据”})

三、JSONP的实现原理

利用 <script>标签可以跨域get引入js脚本;通过<script><img><iframe><link>标签的跨域请求不受同源策略的约束,这里不受约束指的是引入外部的script、img、iframe等“文件”,但会限制这些引入的内容对当前内容的操作

四、例子

假设在远端服务某个项目中有一个叫
test.js的js文件,这个项目的域名是https://dddd.com/路径是xxx/xx/test.js,那么就可以通过https://dddd.com/ xxx/xx/test.js访问到该文件,如下:

通过<script>引入的js脚本响应成功后会立即执行,因此要实现JSONP跨域请求还需要服务器端配合接口,动态生成一个js代码并将要返回的数据封装在返回的js脚本中如上面的test.js文件,这时请求端还应提前定义好被调用的函数(回调函数),以及在请求上加入参数,且这个参数是一个回调函数,如下:

上述就是利用<script>标签跨域get引入js脚本实现跨域请求即JSONP

五、其他

:在研究JSONP的时候,遇到了一些如下同样的疑问,以及相应的回答,遂摘录下来供大家商榷

①Ajax、XHR、同源策略的关系

优质回答:Ajax(Asynchronous JavaScript + XML)即异步JavaScript加XML技术;XHR即XMLHttpRequest对象,该对象的作用就是实现发送服务器请求和获取响应异步从服务器获取数据,该技术是推动Ajax发展的关键技术;同源策略是浏览器站在安全的角度制定的一种从服务器获取数据的限制,这个安全限制可以防止一些恶意行为,通过XHR进行Ajax通信会被同源策略限制。

②为什么<script><img><iframe><link>标签不受同源策略限制

优质回答:1.<script><img><iframe><link>跨域请求是在同源策略制定之前就已经实现的技术;2.同源策略不是统一的干净公理,它实际上是一组特定的规制和特殊情况,这些规则和特殊情况已经成为现代web的化石,您无法使用正确捕获基本的细节的简短描述来定义同源策略,因为特殊情况在实践中实际上很重要

概括下来就是:<script><img><iframe><link>跨域请求早就有了,而且同源策略也只是对常用的规则的整理设计,但是并不能因为常用的规则而去取消特殊的情况,因为在某些场景特殊情况也很重要。

③为什么制定同源策略后不取消<script><img><iframe><link>标签的跨域请求,这不是存在安全风险吗

优质回答:取消这种跨域能力会破坏很多现有的网络

④通过<script>和<img>标签实现跨域请求的区别

优质回答:<img>标签只能通过监听onload和onerror事件知道什么时候接收到了响应进而进行后续处理,但是无法获取数据;<script>是获取一个可执行的js程序,且在请求响应成功后会立刻执行,这就为有数据返回的跨域请求提供了可能。

什么是JSONP及其实现原理相关推荐

  1. jsonp 跨域原理详解

    转载至:http://zha-zi.iteye.com/blog/1975116 JavaScript是一种在Web开发中经常使用的前端动态脚本技术.在JavaScript中,有一个很重要的安全性限制 ...

  2. jsonp跨域原理_【网站技术解读①】Javascript实现跨域请求

    推荐一个读者做的不错的编程学习网站: 网站:潜安 域名:http://www.qianani.com 另外将会不定期推送近期网站用到的一些技术,讲一些核心原理,今天为第一篇 问题由来: 最近一直在优化 ...

  3. 9.jsonp的实现原理

    1. 由于浏览器的安全性限制,不允许AJAX访问 协议不同.域名不同.端口号不同的数据接口,浏览器认为这种访问不安全: 2. 以通过动态创建script标签的形式,把script标签的src属性,指向 ...

  4. jQuery 调用jsonp实现与原理

    为什么80%的码农都做不了架构师?>>>    通过jQuery实现JSONP 一般的ajax是不能跨域请求的,因此需要使用一种特别的方式来实现跨域,其中的原理是利用 <scr ...

  5. jsonp跨域原理_Rust 搭建可跨域访问服务器JsonP(一)

    最近有一个项目极有可能需要一个可跨域的服务器做一个中转,思来想去决定用Rust来实现这个服务器,因为有如下优点. 1.编译体积小 2.跨平台 3.安全性较高 JsonP(JSON with Paddi ...

  6. 白话之jsonp跨域原理分析

    一.针对跨域请求,我们首先要知道什么是同源策略. 同源策略即是指:域名,协议,端口相同,三者中有一者不一致,为了安全考虑我们所在的服务器是无法获得想要访问资源所在服务器的资源的. 如图: 比如我们在l ...

  7. jsonp跨域原理及使用

    在js中,我们直接用XMLHttpRequest请求不同域上的数据时,是不可以的.但是,在页面上引入不同域上的js脚本文件却是可以的,jsonp正是利用这个特性来实现的. jsonp通过script标 ...

  8. ajax的jsonp原理,jsonp 跨域原理和用法(上篇)

    出于对网站安全性的要求,两个不同域名的网站之间是不能通过前端技术互相发送请求的.但有时我们又需要使用这样的机制.比如:网站需要制作一个天气预报插件,或者需要开发两个网站,一个供外部用户使用,一个供内部 ...

  9. JSONP的实现原理

    <script> window.callback = function (data) {// 这是我们跨域得到信息console.log(data) } </script> & ...

  10. Ajax跨域:Jsonp原理解析

    推荐先看下这篇文章:JS跨域(ajax跨域.iframe跨域)解决方法及原理详解(jsonp) JavaScript是一种在Web开发中经常使用的前端动态脚本技术.在JavaScript中,有一个很重 ...

最新文章

  1. 小米五android o卡吗,【图片】小米5优化教程,吃鸡卡的进来!!!_小米5吧_百度贴吧...
  2. 2020年大厂职级薪资一览表
  3. android是java_为什么大家都用JAVA写android程序
  4. node.js模块引擎
  5. 爬虫、网页测试 及 java servlet 测试框架等介绍
  6. RTT线程管理篇——RTT时间片
  7. Macbook同时访问内外网
  8. jQuery.siblings() 函数详解
  9. zblog访问记录v2.5.0
  10. 读取excel数据 画k线 成交量图
  11. idea打开项目,项目(project)栏不显示项目项目名和项目结构
  12. 单链表创建学生成绩表 输出学生姓名成绩及班级平均分
  13. java毕业设计服装库存管理系统mybatis+源码+调试部署+系统+数据库+lw
  14. 11、有线接入网技术
  15. ERROR 1819 (HY000) Your password does not satisfy the current policy requirements
  16. HTML+css 会旋转的可乐瓶子
  17. 【PaddleSpeech-学习笔记】第七章:声音合成
  18. dell服务器卡在启动界面_dell服务器系统开机提示错误解决方法
  19. 【附源码】计算机毕业设计java医院药品进销存系统设计与实现
  20. 【Linux】fork()

热门文章

  1. Fedora 14 x64 试用手记
  2. c++超详细基础教程(快速入门)
  3. google人体浏览器+android,google人体浏览器
  4. ghost版32位win10系统,win10系统下载地址
  5. 布线问题—分支限界—java实现
  6. 渗透测试实战分享—从app到网站沦陷
  7. echarts地图放大拖拽
  8. badboy linux 版本,jmeter/Badboy安装教程
  9. 计算二阶矩阵特征值的技巧
  10. Mac录屏无声音?5分钟解决|mac录屏收音APP-Loopback for Mac使用方法