关于浏览器跨域的一种实现--jsonp
最近一直在搞python,前端技术荒废很久了,今天跟前端联调,设计到一个前端跨域的问题;前端人员告诉我可以用jsonp的方式实现,经他这么一提醒,也是豁然开朗。
jsonp的实现方式我按照我的理解说一下:
在浏览器层面上,有一个同源策略,这个策略限制了,一个域下的网页,去get一个其他域下的数据,做到不同域之间的数据隔离。
但是html里面有写元素是可以获取其他域下的数据,比如,<img src='x x x.com/img/xxx/xxx.jpg' /> img标签就可以获取外域下的图片资源,
同理,<script> 是可以获取外域下的脚本代码的:<script src='text/javascript' src='http://xxxx.com/xxxx/action.do?callback=showdata'/>
服务器收到请求后,先封装页面想要的数据作为参数,然后使用callback传上的参数作为函数名,返回一段javascript脚本:
would_data = getData() #封装数据
callback = request.callback #获取回调函数
return 'callback("%s")' % would_data #返回一段脚本
客户端本地构造请求url:http://xxxx.com/xxxx/action.do?callback=showdata ,其中showdata在本地预先定义一个,参数为想要的数据,这样当去服务器远程获取数据后,
会自动调用本地的回调函数,会已传参的方式,获取到数据。这整个是jsonp的实现原理,其实并没有多么高深,我之前也怀疑过为什么不能去外域请求数据,但却可以获取到
像<img><srcirt><css>这用的标签去访问外域数据,早研究下,就知道有这个好东西了。 ^ ^
其实,像jquery这种框架早就支持这个东西了,type='jsonp' 就可以了,也不用带回调函数参数
关于浏览器跨域的一种实现--jsonp的更多相关文章
- [1.6W字] 浏览器跨域请求限制的详细原理分析&寻找一种最简单的方式实现XHR跨域(9种方法, 附大招可以纯前端实现跨域!)
Title/ 浏览器跨域(CrossOrigin)请求的原理, 以及解决方案详细指南 #flight.Archives011 序: 最近看到又有一波新的创作活动了, 官方给出的话题中有一个" ...
- [Java面试十]浏览器跨域问题.
此块内容参考Ajax文档部分. 主要复习内容: 1.JavaScript核心对象 2.浏览器BOM对象 3.文档对象模型DOM 4.常见事件 5.Ajax编程( ...
- ajax处理跨域有几种方式
一.什么是跨域 同源策略是由Netscape提出的著名安全策略,是浏览器最核心.基本的安全功能,它限制了一个源(origin)中加载文本或者脚本与来自其他源(origin)中资源的交互方式,所谓的同源 ...
- 设置IE浏览器跨域访问数据
在开发中,经常会遇到多站点跨域访问后台服务获取数据的情况,解决方法有两种 自己写代理服务,访问代理服务,代理服务请求服务获取数据再返回: 设置浏览器可以跨域访问数据. 本文来讲如何设置IE浏览器跨域访 ...
- 解决浏览器跨域限制方案之JSONP
一.什么是JSONP JSONP即:JSON with Padding,是一种解决因浏览器跨域限制不允许访问跨域资源的方法. JSONP是一个非官方的协议,它允许在服务器端返回javascript标签 ...
- 浏览器跨域请求之credentials
-时间起源- 前段时间,需要弄个简单的网站出来,访问远程的api服务. 我是这么做的.首先是在搭建一个nodejs服务来运行前端页面.在我请求登录的时候,能成功返回相应的成功信息.然后,当我再次请求读 ...
- 深入浅出:了解jsonp跨域的九种方式
什么是“”跨域”: 跨域访问,简单来说就是 A 网站的 javascript 代码试图访问 B 网站,包括提交内容和获取内容.由于安全原因,跨域访问是被各大浏览器所默认禁止的.当一个域与其他域建立了信 ...
- vue开发环境和生产环境里面解决跨域的几种方法
什么是跨域 跨域指浏览器不允许当前页面的所在的源去请求另一个源的数据.源指协议,端口,域名.只要这个3个中有一个不同就是跨域. 这里列举一个经典的列子: #协议跨域 http://a.baidu. ...
- php跨域的几种方式
PHP实现跨域的几种形式 1.JSONP(JSON with padding)原理 利用html里面script标签可以加载其他域下的js这一特性,使用script src的形式来获取其他域下的数据, ...
随机推荐
- LinkedIn TAG
List1 [leetcode]243. Shortest Word Distance最短单词距离 Two Pointers [leetcode]244. Shortest ...
- 4-16 css
1.背景是图片 <style> body {background-image:url('bgdesert.jpg');} </style> 2. 十六进制 - 如:" ...
- websocket初识
一.官网 官网地址:http://www.websocket.org/ 二.websocket初识demo <input id="sendTxt" type="te ...
- php socket多进程简单服务器(一)
进程,线程 IO复用,协程都是处理完成并发的方式 socket分为 三步 服务器监听,客户端请求,连接确认, 每次连接都由当前进程来处理,可以通过IO复用来解决这个问题, 这次通过进程来完成并发请 ...
- Disk
一.简介 二.其他 1)Disk I/O
- Pytorch之训练器设置
Pytorch之训练器设置 引言 深度学习训练的时候有很多技巧, 但是实际用起来效果如何, 还是得亲自尝试. 这里记录了一些个人尝试不同技巧的代码. tensorboardX 说起tensorflow ...
- iptables命令提取总结,包含扩展模块<取自朱双印博客>
以下内容只是一些命令相关的,以朱双印博客中的iptables的教程提取出来的.纯粹只是命令的总结,如果需要看理论的知识,建议去看朱老师的博客,目前还没有看到写得比这个好的了. <http://w ...
- [精华][推荐]CAS SSO单点登录服务端客户端实例
1.修改server.xml文件,如下: 注意: 这里使用的是https的认证方式,需要将这个配置放开,并做如下修改: <Connector port="8443" prot ...
- Java 中12个原子操作类
从JDK1.5 开始提供了 java.util.concurrent.atomic 包,该包提供了一种用法简单.性能高效.线程安全的更新一个变量的方法 原子更新基本类型类 AtomicBoolean: ...
- java - Integer、int 、String相互转换总结
一下子还真记不清这三种数据类型之间的转换方法,所以做个小笔记. public class Test03 { public static void main(String[] args) { //int ...