ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

JSONP与JSON的区别以及jsonp是不是ajax中实现跨域访问的技术

2020-02-22 14:38:43  阅读:193  来源: 互联网

标签:www http 跨域 js ajax JSONP com


JSONP与JSON的区别:

JSONP  是一种非正式传输协议,该协议的一个要点就是允许用户传递一个callback 或者开始就定义一个回调方法,参数给服务端,然后服务端返回数据时会将这个callback 参数作为函数名来包裹住 JSON  数据,这样客户端就可以随意定制自己的函数来自动处理返回数据了。

JSONP  和 JSON  的区别: JSON  是一种传输格式,而 JSONP  呢是一种数据的获取方式。其实他们没什么相关性,有的人说带callback 的 JSON  传输就是 JSONP  ,下面我会证明这是错误的说法。 JSONP  可以跨域,记住这一点就可以了。下面开始 Demo  演示。

二、什么是跨域?
跨域的安全限制都是对浏览器端来说的,服务器端是不存在跨域安全限制的。浏览器的同源策略限制从一个源加载的文档或脚本与来自另一个源的资源进行交互。所谓同源即:协议、域名、端口号都相同,否则就是不同源的。可参考以下实例:

URL 说明 是否允许通信
http://www.a.com/a.js
http://www.a.com/b.js 同一域名下 允许
http://www.a.com/lab/a.js
http://www.a.com/script/b.js 同一域名下不同文件夹 允许
http://www.a.com:8000/a.js
http://www.a.com/b.js 同一域名,不同端口 不允许
http://www.a.com/a.js
https://www.a.com/b.js 同一域名,不同协议 不允许
http://www.a.com/a.js
http://70.32.92.74/b.js 域名和域名对应ip 不允许
http://www.a.com/a.js
http://script.a.com/b.js 主域相同,子域不同 不允许
http://www.a.com/a.js
http://a.com/b.js 同一域名,不同二级域名(同上) 不允许(cookie这种情况下也不允许访问)
http://www.cnblogs.com/a.js
http://www.a.com/b.js 不同域名 不允许
14.跨域访问

  • 什么是跨域访问

    • 跨域访问就是跨域名访问,即A网站的网页在代码上访问了B网站的页面
    • 由于同源策略(浏览器的安全机制),所以,AJAX不能实现跨域访问。
      同源策略:这是一种浏览器策略,浏览器的安全机制:浏览器只允许来自同一个来源的文件相互访问。(前段与后端)
      同源:同样的协议,同样的地址,同样的端口
      JavaScript或Cookie只能访问同域名下的内容同样的协议,同样的地址,同样的端口。
  • AJAX不支持跨域访问,为了达到跨域访问的目的,出现了很多的解决方案 :JSONP,iframe,flash,xhr2等。但是比较常用的是JSONP。

  • JSONP(JSON with Padding)可用于解决主流浏览器的跨域数据访问的问题。跟JSON没有关系。 这是一种跨域的技巧。

  • JSONP是如何实现跨域访问的?本质上是利用HTML元素的src属性都可以跨域的思路来解决的。 因为src是可以跨域的。
    如:img,script,iframe等标记的src属性的值都可以赋成其它域名的合法地址。

由于按照jsonp的这种方式跨域访问时,好像可以利用javascript和服务器端交互,能达到AJAX中XMLHttpRequest对象同样的效果。所以,人们总是把
jsonp和AJAX联系在一起。

雄伟0518 发布了2 篇原创文章 · 获赞 0 · 访问量 28 私信 关注

标签:www,http,跨域,js,ajax,JSONP,com
来源: https://blog.csdn.net/lxw0518/article/details/104443307

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有