• 关于

    http请求的基本介绍

    的搜索结果

回答

Postman背景介绍 用户在开发或者调试网络程序或者是网页B/S模式的程序的时候是需要一些方法来跟踪网页请求的,用户可以使用一些网络的监视工具比如著名的Firebug等网页调试工具。今天给大家介绍的这款网页调试工具不仅可以调试简单的css、html、脚本等简单的网页基本信息,它还可以发送几乎所有类型的HTTP请求!Postman在发送网络HTTP请求方面可以说是Chrome插件类产品中的代表产品之一。 Postman的操作环境 postman适用于不同的操作系统,Postman Mac、Windows X32、Windows X64、Linux系统,还支持postman 浏览器扩展程序、postman chrome应用程序等。 Postman使用参考文档: 1.官方英文文档 2.chrome插件整理的 postman中文使用教程 Postman下载安装 1> 、postman下载地址: 1.Postman for MAC 2.Postman for windows X64 3.Postman for windows X86 4.Postman for linux X64 5.Postman for Linux X86 2>. Postman官网下载地址: https://www.getpostman.com/apps 3.Postman安装 postman的安装方法分好几种,按照我们上文介绍的那样,我们分为三种安装模式介绍: 不能访问google 应用上商店的朋友 可以 参考这里, 或者下载客户端版本 1).macOS安装 一旦你下载的应用程序,你可以拖动文件到“应用程序”文件夹。 双击Postman打开应用程序。 2).Windows安装 下载安装文件 运行安装程序 3). Linux安装 我没有试过,但是找了一些参考资料( 有兴趣的朋友可以自行实验) ubuntu安装postman: https://blog.csdn.net/qianmosolo/article/details/79353632 Ubuntu16.04上安装Postman应用程序: https://blog.bluematador.com/posts/postman-how-to-install-on-ubuntu-1604/?utm_source=hootsuite&utm_medium=twitter&utm_campaign= Postman的基础功能 **接口请求流程 ** **GET 请求** GET请求:点击Params,输入参数及value,可输入多个,即时显示在URL链接上,所以,GET请求的请求头与请求参数如在接口文档中无特别声明时,可以不填。 **POST请求** POST请求一:表单提交 管理用例—Collections Collections集合:也就是将多个接口请求可以放在一起,并管理起来。什么样的接口请求可以放在同一个collection里? 在这里告诉大家可以这样:一个工程一个Collection,这样方便查找及统一处理数据。 身份验证Authentication 1、Basic Auth 是基础的验证,所以会比较简单 会直接把用户名、密码的信息放在请求的 Header 中 2、Digest Auth 要比Basic Auth复杂的多。使用当前填写的值生成authorization header。所以在生成header之前要确保设置的正确性。如果当前的header已经存在,postman会移除之前的header。 3、OAuth 1.0 postman的OAuth helper让你签署支持OAuth 1.0基于身份验证的请求。OAuth不用获取access token,你需要去API提供者获取的。OAuth 1.0可以在header或者查询参数中设置value。 4、OAuth 2.0 postman支持获得OAuth 2.0 token并添加到requests中。

问问小秘 2020-05-03 16:00:20 0 浏览量 回答数 0

问题

世界杯结束了!放“大招”:扒一扒ECS虚机的并发性能

云小兵 2019-12-01 22:05:39 12546 浏览量 回答数 10

问题

使用JMeter进行性能测试? 报错

优选2 2020-06-04 18:05:04 3 浏览量 回答数 1

阿里云试用中心,为您提供0门槛上云实践机会!

0元试用32+款产品,最高免费12个月!拨打95187-1,咨询专业上云建议!

问题

使用JMeter进行性能测试? 400 报错

爱吃鱼的程序员 2020-06-02 13:12:16 0 浏览量 回答数 1

问题

使用JMeter进行性能测试? 400 报错

爱吃鱼的程序员 2020-05-29 17:58:44 0 浏览量 回答数 1

回答

注意:CDN作为帮助用户加速获取资源文件的产品,其防御功能的能力是不能够和云盾的专业防护的产品所比的,如果您需要抗DDoS和抗CC攻击的CDN加速功能,请使用我们的SCDN(安全加速)产品。下面介绍CDN的一些基本防护的配置:1、防盗链功能:该功能是根据http请求的referer字段来对请求来源的域名进行筛选和链接。CDN支持三种防盗链设置:白名单、黑名单以及是否允许空refer。该方法主要通过URL过滤的方法对来源host的地址进行过滤,用户可指定请求来源的域名。其中黑白名单同时只能有一种名单生效,通过该功能可以对请求来源最限制。 具体设置方法见: 设置防盗链2、IP黑白名单:可以设置相应的IP黑名单来针对来源IP进行限制。具体设置方法见: 设置IP黑白名单3、URL鉴权:该功能是CDN为保护用户安全系数较高的URL的安全功能,它是需要用户按照指定的签名方式对于特定的URL增加鉴权认证。该功能适合于安全密级较高的文件,并不建议一般的文件进行使用,因为每次的签名都需要通过客户端临时生成。相比于正常的访问会增加其访问时间。具体设置方法见:URL鉴权

元芳啊 2019-12-02 00:42:04 0 浏览量 回答数 0

问题

Nginx防御DDOS攻击的配置方法

dd防护专家 2019-12-01 21:40:16 3673 浏览量 回答数 2

问题

IIS7.5安装配置UrlScan3.1应用防火墙

虎笑 2019-12-01 21:00:19 11275 浏览量 回答数 2

问题

API 如何创建?

轩墨 2019-12-01 21:06:37 1397 浏览量 回答数 0

回答

1、postman背景介绍 postman是接口测试的神器之一,可以发送几乎所有类型的HTTP请求,前身是google-chrome的一个插件,2018年初google停止了对chrome应用程序的支持,postman插件就无法使用了,不过我们可以到postman的官网下载对应的程序。 2、postman优点 支持各种类型的请求:GET、POST、PUT、PATCH、DELETE等(其中最常用的是GET和POST) 支持请求头(Headers)的各种自定义,如:[{"key":"Content-Type","value":"application/x-www-form-urlencoded","description":"POST请求默认方式","enabled":true}] 支持请求自定义参数的设置 支持10种不同的授权认证机制,如:Inherit auth from parent、Bearer Token、Basic Auth、Digest Auth、OAuth 1.0,OAuth 2.0等 支持collection、folder数据在线存储:可根据账号来实现数据的迁移 3、postman下载 官网下载:https://www.getpostman.com/apps 具体的安装下载过程跟一般app下载差不多非常easy,基本不需要配置什么,一路next,在这里就不一一赘述了,另外也可以网上自行搜索第三方的网站下载postman。 4、postman界面熟悉 postman的界面非常的友好,没有过多的累赘功能,呈现出来的都比较好理解 4.1左上角菜单功能 File主要用来操作文件,如新建、导入、设置、关闭窗口、退出等 Edit用来编辑操作,如撤销、重做、剪切、复制、粘贴等 View用来设置postman软件的浏览方式,如全屏、放大、缩小、切换tab请求框等 Collection集合相当于其他软件的一个项目,可以新建集合、导入、集合运行配置 History不言而喻就是运行历史了 Help帮助接口,如升级、文档、支持、GitHub、Twitter等 4.2左侧界面 上面三个都是比较熟悉的功能在菜单界面已经介绍过了,这里就简单的带过 New:新建request请求、collection集合、environment、documentation、mocker server、monitor Import:postman支持json和csv格式的导入 Runner:运行配置,如配置延迟时间、迭代次数等 添加的collection及fodler会显示在左侧白框框中,层级依次是collection-folder-request 4.3右上部分 此部分主要是request请求区,可以设置请求相关的参数,如授权机制、请求头、数据体、请求setup、用例等 4.4右下部分 此部分主要包含response响应数据区,可以通过此区域接受服务器的响应数据并查看。

景凌凯 2020-04-30 18:05:12 0 浏览量 回答数 0

问题

jeesz分布式架构-RestFul服务 :报错

kun坤 2020-06-14 12:19:54 0 浏览量 回答数 1

问题

jeesz分布式架构-RestFul服务 - jeesz报错

montos 2020-06-03 15:44:17 4 浏览量 回答数 1

问题

HTTP六种请求方法详解

cool321 2019-12-01 20:17:20 7019 浏览量 回答数 1

回答

一、 Afinal官方介绍:Afinal是一个Android的ioc,orm框架,内置了四大模块功能:FinalAcitivity,FinalBitmap,FinalDb,FinalHttp。通过finalActivity,我们可以通过注解的方式进行绑定ui和事件。通过finalBitmap,我们可以方便的加载bitmap图片,而无需考虑oom等问题。通过finalDB模块,我们一行代码就可以对android的sqlite数据库进行增删改查。通过FinalHttp模块,我们可以以ajax形式请求http数据。详情请通过以下网址查看。Afinal 是一个android的sqlite orm 和 ioc 框架。同时封装了android中的http框架,使其更加简单易用;使用finalBitmap,无需考虑bitmap在android中加载的时候oom的问题和快速滑动的时候图片加载位置错位等问题。Afinal的宗旨是简洁,快速。约定大于配置的方式。尽量一行代码完成所有事情。项目地址:https://github.com/yangfuhai/afinal功能:一个android的ioc,orm框架,内置了四大模块功能:FinalAcitivity,FinalBitmap,FinalDb,FinalHttp。通过finalActivity,我们可以通过注解的方式进行绑定ui和事件。通过finalBitmap,我们可以方便的加载bitmap图片,而无需考虑oom等问题。通过finalDB模块,我们一行代码就可以对android的sqlite数据库进行增删改查。通过FinalHttp模块,我们可以以ajax形式请求http数据。优点:功能比较全面,文档完善,代码效率比较高。缺点:没有项目demo,框架的时间比较久,代码冗余比较多(这也是无可避免的),文档比较老跟不上代码更新进度。(这个评价是其他高人评的,他自己也有写了框架。我个人觉得以前Afinal算是经典了 用的人多)。二、 xUtilsGit地址:https://github.com/wyouflf/xUtilsxUtils:可以说是Afinal的升级版。xUtils 包含了很多实用的android工具。xUtils 支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响...xUitls 最低兼容android 2.2 (api level 8)三、 ThinkAndroid项目地址:https://github.com/white-cat/ThinkAndroid官方介绍:ThinkAndroid是一个免费的开源的、简易的、遵循Apache2开源协议发布的Android开发框架,其开发宗旨是简单、快速的进行Android应用程序的开发,包含Android mvc、简易sqlite orm、ioc模块、封装Android httpclitent的http模块,具有快速构建文件缓存功能,无需考虑缓存文件的格式,都可以非常轻松的实现缓存,它还基于文件缓存模块实现了图片缓存功能,在android中加载的图片的时候,对oom的问题,和对加载图片错位的问题都轻易解决。他还包括了一个手机开发中经常应用的实用工具类,如日志管理,配置文件管理,android下载器模块,网络切换检测等等工具优点:功能看起来比较完善。个人觉得名字起的好。缺点:从2013年就停止维护了,没有项目文档。四、 LoonAndroid官方介绍:如果你想看ui方面的东西,这里没有,想要看牛逼的效果这里也没有。这只是纯实现功能的框架,它的目标是节省代码量,降低耦合,让代码层次看起来更清晰。整个框架一部分是网上的,一部分是我改的,为了适应我的编码习惯,还有一部分像orm完全是网上的组件。在此感谢那些朋友们。 整个框架式的初衷是为了偷懒,之前都是一个功能一个jar,做项目的时候拉进去,这样对于我来说依然还是比较麻烦。最后就导致我把所有的jar做成了一个工具集合包。 有很多框架都含有这个工具集合里的功能,这些不一定都好用,因为这是根据我个人使用喜欢来实现的,如果你们有自己的想法,可以自己把架包解压了以后,源码拉出来改动下。 目前很多框架都用到了注解,除了androidannotations没有入侵我们应用的代码以外,其他的基本上都有,要么是必须继承框架里面的activity,要么是必须在activity的oncreat里面调用某个方法。 整个框架式不同于androidannotations,Roboguice等ioc框架,这是一个类似spring的实现方式。在整应用的生命周期中找到切入点,然后对activity的生命周期进行拦截,然后插入自己的功能。开源地址:https://github.com/gdpancheng/LoonAndroid功能:1自动注入框架(只需要继承框架内的application既可)2图片加载框架(多重缓存,自动回收,最大限度保证内存的安全性)3网络请求模块(继承了基本上现在所有的http请求)4 eventbus(集成一个开源的框架)5验证框架(集成开源框架)6 json解析(支持解析成集合或者对象)7 数据库(不知道是哪位写的 忘记了)8 多线程断点下载(自动判断是否支持多线程,判断是否是重定向)9 自动更新模块10 一系列工具类有点:功能多缺点:文档方面五、 KJFrameForAndroid项目地址:https://github.com/kymjs/KJFrameForAndroid官方介绍:KJFrameForAndroid 又叫KJLibrary,是一个android的orm 和 ioc 框架。同时封装了android中的Bitmap与Http操作的框架,使其更加简单易用;KJFrameForAndroid的设计思想是通过封装Android原生SDK中复杂的复杂操作而达到简化Android应用级开发,最终实现快速而又安全的开发APP。我们提倡用最少的代码,完成最多的操作,用最高的效率,完成最复杂的功能。功能:一个android的orm 和 ioc 框架。同时封装了android中的Bitmap与Http操作的框架,使其更加简单易用; KJFrameForAndroid开发框架的设计思想是通过封装Android原生SDK中复杂的复杂操作而达到简化Android应用级开发,最终实现快速而又安全的开发APP。总共分为五大模块:UILibrary,UtilsLibrary,HttpLibrary,BitmapLibrary,DBLibrary。优点:功能比较全面,代码效率很高,文档完善,有项目demo,出来的比较晚借鉴了很多大型框架经验。缺点:项目文档是html页面,查看起来很不方便,项目交流平台没多少人说话(难道大神都是不说话的?)(这两个评价是KJFrameForAndroid的作者对自己的评价,个人觉得作者是个天才。他的评价可能刚写完网上发布后写的。我在给他更新评价。因为现在已经过去了几个月一直在时不时更新。功能很全,项目文档也很全面,而且代码里注释最多 这方面这个很难得。交流平台人很多挺热闹,作者希望更热闹这样框架越来越完善。对于初学者希望看到Demo更完善)六、 dhroid官方介绍:dhroid 是基于android 平台, 极速开发框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展.使你更快,更好的开发商业级别应用开源地址: http://git.oschina.net/tengzhinei/dhroid功能:1.Ioc容器: (用过spring的都知道)视图注入,对象注入,接口注入,解决类依赖关系2.Eventbus: android平台事件总线框架,独创延时事件,事件管理轻松3.Dhnet: 网络http请求的解决方案,使用简单,减少代码,自带多种网络访问缓存策略4.adapter模块: 数据绑定轻松,不用写多余的adapter,天生网络支持(一行代码搞定加载,刷新问题)5.DhDb: android中sqlite的最轻量orm框架(增删改查轻松搞定)6.Perference: android自带Perference 升级版,让你的Perference更强大,更方便工具集合 JSONUtil(安全处理json),ViewUtil(数据绑定更快) ThreadWorker(异步任务工具)...优点:功能全面,有demo,作者也是为公司开发的框架。缺点:文档方面现在不是很好,就eoe上的那些。七、 SmartAndroid项目地址:http://www.aplesson.com/smartAndroid/demos官方介绍:SmartAndroid是一套给 Android开发者使用的应用程序开发框架和工具包。它提供一套丰富的标准库以及简单的接口和逻辑结构,其目的是使开发人员更快速地进行项目开发。使用 SmartAndroid可以减少代码的编写量,并将你的精力投入到项目的创造性开发上。功能:SmartAndroid 拥有全范围的类库,可以完成大多数通常需要的APP开发任务,包括: 异步网络操作相关所有功能、强大的图片处理操作、轻量级ORM数据库Sqlite库、zip操作 、动画特效、Html等解析采集、事件总线EventBus/Otto、Gson(Json)、AQuery、主流所有UI控件(例如:ActionbarSherlock,SlidingMenu,BottomView,Actionbar,DragListView等10多种UI库)等。优点:功能非常全,超出你索要、文档完善(作者很全面,官方网站是web响应式网站,框架里功能有UI各种特效应该最全了,一直更新中)缺点:jar包大点?(功能多不可避免,不是问题),在线文档(随响应式的手机访问也方便,但是网速慢就不好了,页面打开不是很流畅)八、 andBase官方介绍:andbase是为Android开发者量身打造的一款开源类库产品开源地址:https://code.jd.com/zhaoqp2010_m/andbase功能:1.andbase中包含了大量的开发常用手段。如网络下载,多线程与线程池的管理,数据库ORM,图片缓存管理,图片文件下载上传,Http请求工具,常用工具类(字符串,日期,文件处理,图片处理工具类等),能够使您的应用在团队开发中减少冗余代码,很大的提高了代码的维护性与开发高效性,能很好的规避由于开发疏忽而导致常犯的错误。2.andbase封装了大量的常用控件。如list分页,下拉刷新,图片轮播,表格,多线程下载器,侧边栏,图片上传,轮子选择,图表,Tab滑动,日历选择器等。3.强大的AbActivity,您没有理由不继承它。继承它你能够获得一个简单强大可设置的操作栏,以及一系列的简单调用,如弹出框,提示框,进度框,副操作栏等。4.提供效率较高图片缓存管理策略,使内存大幅度节省,利用率提高,效率提高。程序中要管理大量的图片资源,andbase提供简单的方法,几步完成下载与显示,并支持缩放,裁剪,缓存功能。5.封装了大量常见工具类。包括日期,字符,文件,图片等各种处理函数,多而全。6.用andbase大量减少handler的使用,而采用回调函数,代码更整洁。handler会产生大量代码,并且不好维护,andbase对handler进行了封装。7.简单轻量支持注解自动建表的ORM框架(支持一/多对多的关联操作)。写sql,建表,工作量大,andbase提供更傻瓜异步增删改查工具类。8.异步请求http框架,网络请求标准化,支持文件上传下载,get,post,进度显示。包含了异步与http请求的工具类,实用。9.热情的支持群体。优点:功能很全,demo做的好 、API文档完善、接近完美缺点:希望文档更详细些。九、 AndroidAnnotations项目地址:https://github.com/excilys/androidannotations功能:完全注解框架,一切皆为注解:声明控件,绑定控件,设置监听,setcontentview,长按事件,异步线程,全部通过注解实现。优点:完全的注解,使开发起来更加便利,程序员写的代码也更少。缺点:文档是全英文的加上功能比较少没有具体研究,由于一切都是注解,感觉效率不高,不过根据官方介绍说并不是使用的反射加载,所以效率比一般注解高很多。十、 volley项目地址: https://github.com/smanikandan14/Volley-demo功能:Volley是Android平台上的网络通信库,能使网络通信更快,更简单,更健壮异步加载网络图片、网络数据优点:Google官方推荐,请看去年的开发者大会介绍。缺点:功能比较少,只有网络数据加载和网络图片加载十一、 android-async-http项目地址:https://github.com/loopj/android-async-http文档介绍:http://loopj.com/android-async-http/ (1) 在匿名回调中处理请求结果 (2) 在UI线程外进行http请求 (3) 文件断点上传 (4) 智能重试 (5) 默认gzip压缩 (6) 支持解析成Json格式 (7) 可将Cookies持久化到SharedPreferences 有点:很简单很实用缺点:功能比较少, (只是针对的功能不是什么缺点)最后来个总结吧: 以上的开发框架网上都可以下载源码,也有demo实例的。当然我没分析和对比框架的效率性能,但是都非常实用,其作者大部分是个人,都是些牛人或天才。你可以直接使用,也可以把有用跳出来用,至少有很多使用工具。如果有发现Bug,作者希望把bug交给他。 Afinal 和 xUtils简单实用但是demo和更新的问题。 KJFrameForAndroid 算是新出的,功能也多,效率也应该好,代码也注释多 用起来也很方便。Dhroid 作者自己公司的框架,也可以直接请教。SmartAndroid 强劲的框架功能俱全。andBase 出来早各个方面算是完整的吧。转自:http://blog.csdn.net/buddyuu/article/details/40503471

元芳啊 2019-12-02 00:55:54 0 浏览量 回答数 0

回答

一、前言 缓存可以说是性能优化中简单高效的一种优化方式了。一个优秀的缓存策略可以缩短网页请求资源的距离,减少延迟,并且由于缓存文件可以重复利用,还可以减少带宽,降低网络负荷。 对于一个数据请求来说,可以分为发起网络请求、后端处理、浏览器响应三个步骤。浏览器缓存可以帮助我们在第一和第三步骤中优化性能。比如说直接使用缓存而不发起请求,或者发起了请求但后端存储的数据和前端一致,那么就没有必要再将数据回传回来,这样就减少了响应数据。 接下来的内容中我们将通过缓存位置、缓存策略以及实际场景应用缓存策略来探讨浏览器缓存机制。 二、缓存位置 从缓存位置上来说分为四种,并且各自有优先级,当依次查找缓存且都没有命中的时候,才会去请求网络。 Service WorkerMemory CacheDisk Cache Push Cache Service Worker Service Worker 是运行在浏览器背后的独立线程,一般可以用来实现缓存功能。使用 Service Worker的话,传输协议必须为 HTTPS。因为 Service Worker 中涉及到请求拦截,所以必须使用 HTTPS 协议来保障安全。Service Worker 的缓存与浏览器其他内建的缓存机制不同,它可以让我们自由控制缓存哪些文件、如何匹配缓存、如何读取缓存,并且缓存是持续性的。 Service Worker 实现缓存功能一般分为三个步骤:首先需要先注册 Service Worker,然后监听到 install 事件以后就可以缓存需要的文件,那么在下次用户访问的时候就可以通过拦截请求的方式查询是否存在缓存,存在缓存的话就可以直接读取缓存文件,否则就去请求数据。. 当 Service Worker 没有命中缓存的时候,我们需要去调用 fetch 函数获取数据。也就是说,如果我们没有在 Service Worker 命中缓存的话,会根据缓存查找优先级去查找数据。但是不管我们是从 Memory Cache 中还是从网络请求中获取的数据,浏览器都会显示我们是从 Service Worker 中获取的内容。 Memory Cache Memory Cache 也就是内存中的缓存,主要包含的是当前中页面中已经抓取到的资源,例如页面上已经下载的样式、脚本、图片等。读取内存中的数据肯定比磁盘快,内存缓存虽然读取高效,可是缓存持续性很短,会随着进程的释放而释放。 一旦我们关闭 Tab 页面,内存中的缓存也就被释放了。 那么既然内存缓存这么高效,我们是不是能让数据都存放在内存中呢? 这是不可能的。计算机中的内存一定比硬盘容量小得多,操作系统需要精打细算内存的使用,所以能让我们使用的内存必然不多。 当我们访问过页面以后,再次刷新页面,可以发现很多数据都来自于内存缓存 内存缓存中有一块重要的缓存资源是preloader相关指令(例如 )下载的资源。总所周知preloader的相关指令已经是页面优化的常见手段之一,它可以一边解析js/css文件,一边网络请求下一个资源。 需要注意的事情是,内存缓存在缓存资源时并不关心返回资源的HTTP缓存头Cache-Control是什么值,同时资源的匹配也并非仅仅是对URL做匹配,还可能会对Content-Type,CORS等其他特征做校验。 Disk Cache Disk Cache 也就是存储在硬盘中的缓存,读取速度慢点,但是什么都能存储到磁盘中,比之 Memory Cache 胜在容量和存储时效性上。 在所有浏览器缓存中,Disk Cache 覆盖面基本是最大的。它会根据 HTTP Herder 中的字段判断哪些资源需要缓存,哪些资源可以不请求直接使用,哪些资源已经过期需要重新请求。并且即使在跨站点的情况下,相同地址的资源一旦被硬盘缓存下来,就不会再次去请求数据。绝大部分的缓存都来自 Disk Cache,关于 HTTP 的协议头中的缓存字段,我们会在下文进行详细介绍。 浏览器会把哪些文件丢进内存中?哪些丢进硬盘中? 关于这点,网上说法不一,不过以下观点比较靠得住: 对于大文件来说,大概率是不存储在内存中的,反之优先 当前系统内存使用率高的话,文件优先存储进硬盘 Push Cache Push Cache(推送缓存)是 HTTP/2 中的内容,当以上三种缓存都没有命中时,它才会被使用。它只在会话(Session)中存在,一旦会话结束就被释放,并且缓存时间也很短暂,在Chrome浏览器中只有5分钟左右,同时它也并非严格执行HTTP头中的缓存指令。 Push Cache 在国内能够查到的资料很少,也是因为 HTTP/2 在国内不够普及。这里推荐阅读Jake Archibald的 HTTP/2 push is tougher than I thought 这篇文章,文章中的几个结论: - 所有的资源都能被推送,并且能够被缓存,但是 Edge 和 Safari 浏览器支持相对比较差 - 可以推送 no-cache 和 no-store 的资源 - 一旦连接被关闭,Push Cache 就被释放 - 多个页面可以使用同一个HTTP/2的连接,也就可以使用同一个Push Cache。这主要还是依赖浏览器的实现而定,出于对性能的考虑,有的浏览器会对相同域名但不同的tab标签使用同一个HTTP连接。 - Push Cache 中的缓存只能被使用一次 - 浏览器可以拒绝接受已经存在的资源推送 - 你可以给其他域名推送资源 如果以上四种缓存都没有命中的话,那么只能发起请求来获取资源了。 那么为了性能上的考虑,大部分的接口都应该选择好缓存策略,通常浏览器缓存策略分为两种:强缓存和协商缓存,并且缓存策略都是通过设置 HTTP Header 来实现的。 作者:浪里行舟 链接:https://www.jianshu.com/p/54cc04190252 来源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

九旬 2020-05-24 11:47:06 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 本文讲解如何搭建一个基于OSS的移动应用数据直传服务并设置上传回调。 背景 快速搭建移动应用直传服务介绍了如何快速搭建一个基于OSS的移动应用数据直传服务。但这一方案有个问题:对于Android/iOS移动应用来说,只需要申请一次STS凭证,就能多次使用该STS凭证上传数据到OSS。这就导致应用服务器无法得知用户上传了哪些数据 ,作为该app的开发者,就没法对应用上传数据进行管理。为此OSS提供了上传回调方案。 原理介绍 上传回调的原理如下图所示: OSS在收到Android/iOS移动应用的数据(上图中步骤5)和在返回用户上传结果(上图中步骤6)之间,触发一个上传回调任务,即第上图中步骤5.5,先回调用户服务器,得到应用服务器返回的内容,然后将此内容返回给Android/iOS移动应用。详情请参见Callback API文档。 上传回调的作用 通过上传回调让用户应用服务器知道当前上传文件的基本信息。 返回的基本信息可以包含下表中一个或多个变量,返回内容的格式在Android/iOS上传时指定。 系统变量 含义 bucket 移动应用上传文件到OSS的哪个存储空间 object 移动应用上传文件到OSS后保存的文件名 etag 该上传的文件的ETag,即返回给用户的etag字段 size 上传文件的大小 mimeType 资源类型 imageInfo.height 图片高度 imageInfo.width 图片宽度 imageInfo.format 图片格式,如jpg、png等 通过上传回调设定自定义参数,达到信息传递的目的。 假如您是一个开发者,您想知道当前用户所使用的app版本、当前用户所在的操作系统版本、用户的GPS信息、用户的手机型号。您可以在Android/iOS端上传文件时,指定自定义参数,如下所示: x:version:指定APP版本 x:system:指定操作系统版本 x:gps:指定GPS信息 x:phone:指定手机型号 Android/iOS移动应用上传文件到OSS时附带上述参数,然后OSS把这些参数放到CallbackBody里发给应用服务器。这样应用服务器就能收到这些信息,达到信息传递的目的。 上传回调对应用服务器的要求 您必须部署一个可以接收POST请求的服务,这个服务必须有公网地址,如www.abc.com/callback.php,或者外网IP地址。 您必须给OSS正确的返回,返回格式必须是JSON格式,内容自定义。OSS会把应用服务器返回的内容,原封不动地返回给Android/iOS移动应用。详情请参见Callback API文档。注意 在移动应用端设置上传回调 要让OSS在接收上传请求时触发上传回调,移动应用在构造上传请求时必须把如下内容指定到上传请求里面: 要回调到哪个服务器(callbackUrl),如 http://abc.com/callback.php,这个地址必须是公网能够访问的。 上传回调给应用服务器的内容(callbackBody),可以是上述OSS返回应用服务器系统变量的一个或者多个。 假如您的用户服务器上传回调地址是http://abc.com/callback.php。您想获取手机上传的文件名称、文件的大小,并且定义了x:phone变量是指手机型号,x:system变量是指操作系统版本。 上传回调示例分以下两种: iOS指定上传回调示例:OSSPutObjectRequest * request = [OSSPutObjectRequest new]; request.bucketName = @"<bucketName>"; request.objectKey = @"<objectKey>"; request.uploadingFileURL = [NSURL fileURLWithPath:@<filepath>"]; // 设置回调参数 request.callbackParam = @{ @"callbackUrl": @"http://abc.com/callback.php", @"callbackBody": @"filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}" }; // 设置自定义变量 request.callbackVar = @{ @"x:phone": @"iphone6s", @"x:system": @"ios9.1" }; Android指定上传回调示例:PutObjectRequest put = new PutObjectRequest(testBucket, testObject, uploadFilePath); ObjectMetadata metadata = new ObjectMetadata(); metadata.setContentType("application/octet-stream"); put.setMetadata(metadata); put.setCallbackParam(new HashMap<String, String>() { { put("callbackUrl", "http://abc.com/callback.php"); put("callbackBody", "filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}"); } }); put.setCallbackVars(new HashMap<String, String>() { { put("x:phone", "IPOHE6S"); put("x:system", "YunOS5.0"); } }); 应用服务器收到的回调请求 根据设定的不同URL和回调内容,应用服务器收到的回调请求会所不同,示例如下: POST /index.html HTTP/1.0 Host: 121.43.113.8 Connection: close Content-Length: 81 Content-Type: application/x-www-form-urlencoded User-Agent: ehttp-client/0.0.1 authorization: kKQeGTRccDKyHB3H9vF+xYMSrmhMZjzzl2/kdD1ktNVgbWEfYTQG0G2SU/RaHBovRCE8OkQDjC3uG33esH2txA== x-oss-pub-key-url: aHR0cDovL2dvc3NwdWJsaWMuYWxpY2RuLmNvbS9jYWxsYmFja19wdWJfa2V5X3YxLnBlbQ== filename=test.txt&size=5&photo=iphone6s&system=ios9.1 更多内容请参见Callback API文档。 应用服务器判断回调请求是否来自OSS 如果您的回调服务器被人恶意攻击了,例如恶意回调您的应用服务器,导致应用服务器收到一些非法的请求,影响正常逻辑,此时您就需要判断回调请求是否来自OSS。 判断的方法主要是根据OSS给应用服务器返回的头部内容中 x-oss-pub-key-url和authorization这两个参数进行RSA校验。只有通过RSA校验才能说明这个请求是来自OSS。本文提供的示例程序有实现的示例供您参考。 应用服务器收到回调请求后的处理 应用服务器在校验这个请求是来自OSS后,指定回调给应用服务器的内容格式,如 filename=test.txt&size=5&photo=iphone6s&system=ios9.1 应用服务器就可以根据OSS的返回内容,解析得到自己想要的数据。得到这个数据后,应用服务器可以把数据存放起来,方便后续管理。 OSS如何处理应用服务器的返回内容 有两种情况: OSS将回调请求发送给应用服务器,但是应用服务器接收失败或者访问不通,OSS会返回给Android/iOS移动应用203的状态码,但是数据已经存放到OSS上了。 应用服务器接收到OSS的回调请求,并且正确返回了,OSS会返回给Android/iOS移动应用状态码200, 并把应用服务器返回给OSS的内容原封不动地返回给Android/iOS移动应用。 示例程序下载 示例程序只是完成了如何检查应用服务器收到的签名, 您需要自行增加对应用服务器收到回调内容的格式解析 。 Java: 下载地址:单击这里。 运行方法:解压后运行java -jar oss-callback-server-demo.jar 9000。9000是运行的端口,可以自己指定。 说明 这个jar例子在java 1.7运行通过,如果有问题可以自己依据提供的代码进行修改。这是一个maven项目。 PHP: 下载地址:单击这里 运行方法:将解压包部署到Apache环境下,因为PHP本身语言的特点,某些数据头部的获取会依赖于环境。请参考例子根据实际环境进行修改。 Python: 下载地址:单击这里。 运行方法:解压后直接运行python callback_app_server.py即可,程序自实现了一个简单的http server,运行该程序可能需要安装rsa的依赖。 Ruby版本: 下载地址:单击这里。 运行方法: ruby aliyun_oss_callback_server.rb。

2019-12-01 23:13:23 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 本文讲解如何搭建一个基于OSS的移动应用数据直传服务并设置上传回调。 背景 快速搭建移动应用直传服务介绍了如何快速搭建一个基于OSS的移动应用数据直传服务。但这一方案有个问题:对于Android/iOS移动应用来说,只需要申请一次STS凭证,就能多次使用该STS凭证上传数据到OSS。这就导致应用服务器无法得知用户上传了哪些数据 ,作为该app的开发者,就没法对应用上传数据进行管理。为此OSS提供了上传回调方案。 原理介绍 上传回调的原理如下图所示: OSS在收到Android/iOS移动应用的数据(上图中步骤5)和在返回用户上传结果(上图中步骤6)之间,触发一个上传回调任务,即第上图中步骤5.5,先回调用户服务器,得到应用服务器返回的内容,然后将此内容返回给Android/iOS移动应用。详情请参见Callback API文档。 上传回调的作用 通过上传回调让用户应用服务器知道当前上传文件的基本信息。 返回的基本信息可以包含下表中一个或多个变量,返回内容的格式在Android/iOS上传时指定。 系统变量 含义 bucket 移动应用上传文件到OSS的哪个存储空间 object 移动应用上传文件到OSS后保存的文件名 etag 该上传的文件的ETag,即返回给用户的etag字段 size 上传文件的大小 mimeType 资源类型 imageInfo.height 图片高度 imageInfo.width 图片宽度 imageInfo.format 图片格式,如jpg、png等 通过上传回调设定自定义参数,达到信息传递的目的。 假如您是一个开发者,您想知道当前用户所使用的app版本、当前用户所在的操作系统版本、用户的GPS信息、用户的手机型号。您可以在Android/iOS端上传文件时,指定自定义参数,如下所示: x:version:指定APP版本 x:system:指定操作系统版本 x:gps:指定GPS信息 x:phone:指定手机型号 Android/iOS移动应用上传文件到OSS时附带上述参数,然后OSS把这些参数放到CallbackBody里发给应用服务器。这样应用服务器就能收到这些信息,达到信息传递的目的。 上传回调对应用服务器的要求 您必须部署一个可以接收POST请求的服务,这个服务必须有公网地址,如www.abc.com/callback.php,或者外网IP地址。 您必须给OSS正确的返回,返回格式必须是JSON格式,内容自定义。OSS会把应用服务器返回的内容,原封不动地返回给Android/iOS移动应用。详情请参见Callback API文档。注意 在移动应用端设置上传回调 要让OSS在接收上传请求时触发上传回调,移动应用在构造上传请求时必须把如下内容指定到上传请求里面: 要回调到哪个服务器(callbackUrl),如 http://abc.com/callback.php,这个地址必须是公网能够访问的。 上传回调给应用服务器的内容(callbackBody),可以是上述OSS返回应用服务器系统变量的一个或者多个。 假如您的用户服务器上传回调地址是http://abc.com/callback.php。您想获取手机上传的文件名称、文件的大小,并且定义了x:phone变量是指手机型号,x:system变量是指操作系统版本。 上传回调示例分以下两种: iOS指定上传回调示例:OSSPutObjectRequest * request = [OSSPutObjectRequest new]; request.bucketName = @"<bucketName>"; request.objectKey = @"<objectKey>"; request.uploadingFileURL = [NSURL fileURLWithPath:@<filepath>"]; // 设置回调参数 request.callbackParam = @{ @"callbackUrl": @"http://abc.com/callback.php", @"callbackBody": @"filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}" }; // 设置自定义变量 request.callbackVar = @{ @"x:phone": @"iphone6s", @"x:system": @"ios9.1" }; Android指定上传回调示例:PutObjectRequest put = new PutObjectRequest(testBucket, testObject, uploadFilePath); ObjectMetadata metadata = new ObjectMetadata(); metadata.setContentType("application/octet-stream"); put.setMetadata(metadata); put.setCallbackParam(new HashMap<String, String>() { { put("callbackUrl", "http://abc.com/callback.php"); put("callbackBody", "filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}"); } }); put.setCallbackVars(new HashMap<String, String>() { { put("x:phone", "IPOHE6S"); put("x:system", "YunOS5.0"); } }); 应用服务器收到的回调请求 根据设定的不同URL和回调内容,应用服务器收到的回调请求会所不同,示例如下: POST /index.html HTTP/1.0 Host: 121.43.113.8 Connection: close Content-Length: 81 Content-Type: application/x-www-form-urlencoded User-Agent: ehttp-client/0.0.1 authorization: kKQeGTRccDKyHB3H9vF+xYMSrmhMZjzzl2/kdD1ktNVgbWEfYTQG0G2SU/RaHBovRCE8OkQDjC3uG33esH2txA== x-oss-pub-key-url: aHR0cDovL2dvc3NwdWJsaWMuYWxpY2RuLmNvbS9jYWxsYmFja19wdWJfa2V5X3YxLnBlbQ== filename=test.txt&size=5&photo=iphone6s&system=ios9.1 更多内容请参见Callback API文档。 应用服务器判断回调请求是否来自OSS 如果您的回调服务器被人恶意攻击了,例如恶意回调您的应用服务器,导致应用服务器收到一些非法的请求,影响正常逻辑,此时您就需要判断回调请求是否来自OSS。 判断的方法主要是根据OSS给应用服务器返回的头部内容中 x-oss-pub-key-url和authorization这两个参数进行RSA校验。只有通过RSA校验才能说明这个请求是来自OSS。本文提供的示例程序有实现的示例供您参考。 应用服务器收到回调请求后的处理 应用服务器在校验这个请求是来自OSS后,指定回调给应用服务器的内容格式,如 filename=test.txt&size=5&photo=iphone6s&system=ios9.1 应用服务器就可以根据OSS的返回内容,解析得到自己想要的数据。得到这个数据后,应用服务器可以把数据存放起来,方便后续管理。 OSS如何处理应用服务器的返回内容 有两种情况: OSS将回调请求发送给应用服务器,但是应用服务器接收失败或者访问不通,OSS会返回给Android/iOS移动应用203的状态码,但是数据已经存放到OSS上了。 应用服务器接收到OSS的回调请求,并且正确返回了,OSS会返回给Android/iOS移动应用状态码200, 并把应用服务器返回给OSS的内容原封不动地返回给Android/iOS移动应用。 示例程序下载 示例程序只是完成了如何检查应用服务器收到的签名, 您需要自行增加对应用服务器收到回调内容的格式解析 。 Java: 下载地址:单击这里。 运行方法:解压后运行java -jar oss-callback-server-demo.jar 9000。9000是运行的端口,可以自己指定。 说明 这个jar例子在java 1.7运行通过,如果有问题可以自己依据提供的代码进行修改。这是一个maven项目。 PHP: 下载地址:单击这里 运行方法:将解压包部署到Apache环境下,因为PHP本身语言的特点,某些数据头部的获取会依赖于环境。请参考例子根据实际环境进行修改。 Python: 下载地址:单击这里。 运行方法:解压后直接运行python callback_app_server.py即可,程序自实现了一个简单的http server,运行该程序可能需要安装rsa的依赖。 Ruby版本: 下载地址:单击这里。 运行方法: ruby aliyun_oss_callback_server.rb。

2019-12-01 23:13:22 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 本文讲解如何搭建一个基于OSS的移动应用数据直传服务并设置上传回调。 背景 快速搭建移动应用直传服务介绍了如何快速搭建一个基于OSS的移动应用数据直传服务。但这一方案有个问题:对于Android/iOS移动应用来说,只需要申请一次STS凭证,就能多次使用该STS凭证上传数据到OSS。这就导致应用服务器无法得知用户上传了哪些数据 ,作为该app的开发者,就没法对应用上传数据进行管理。为此OSS提供了上传回调方案。 原理介绍 上传回调的原理如下图所示: OSS在收到Android/iOS移动应用的数据(上图中步骤5)和在返回用户上传结果(上图中步骤6)之间,触发一个上传回调任务,即第上图中步骤5.5,先回调用户服务器,得到应用服务器返回的内容,然后将此内容返回给Android/iOS移动应用。详情请参见Callback API文档。 上传回调的作用 通过上传回调让用户应用服务器知道当前上传文件的基本信息。 返回的基本信息可以包含下表中一个或多个变量,返回内容的格式在Android/iOS上传时指定。 系统变量 含义 bucket 移动应用上传文件到OSS的哪个存储空间 object 移动应用上传文件到OSS后保存的文件名 etag 该上传的文件的ETag,即返回给用户的etag字段 size 上传文件的大小 mimeType 资源类型 imageInfo.height 图片高度 imageInfo.width 图片宽度 imageInfo.format 图片格式,如jpg、png等 通过上传回调设定自定义参数,达到信息传递的目的。 假如您是一个开发者,您想知道当前用户所使用的app版本、当前用户所在的操作系统版本、用户的GPS信息、用户的手机型号。您可以在Android/iOS端上传文件时,指定自定义参数,如下所示: x:version:指定APP版本 x:system:指定操作系统版本 x:gps:指定GPS信息 x:phone:指定手机型号 Android/iOS移动应用上传文件到OSS时附带上述参数,然后OSS把这些参数放到CallbackBody里发给应用服务器。这样应用服务器就能收到这些信息,达到信息传递的目的。 上传回调对应用服务器的要求 您必须部署一个可以接收POST请求的服务,这个服务必须有公网地址,如www.abc.com/callback.php,或者外网IP地址。 您必须给OSS正确的返回,返回格式必须是JSON格式,内容自定义。OSS会把应用服务器返回的内容,原封不动地返回给Android/iOS移动应用。详情请参见Callback API文档。注意 在移动应用端设置上传回调 要让OSS在接收上传请求时触发上传回调,移动应用在构造上传请求时必须把如下内容指定到上传请求里面: 要回调到哪个服务器(callbackUrl),如 http://abc.com/callback.php,这个地址必须是公网能够访问的。 上传回调给应用服务器的内容(callbackBody),可以是上述OSS返回应用服务器系统变量的一个或者多个。 假如您的用户服务器上传回调地址是http://abc.com/callback.php。您想获取手机上传的文件名称、文件的大小,并且定义了x:phone变量是指手机型号,x:system变量是指操作系统版本。 上传回调示例分以下两种: iOS指定上传回调示例:OSSPutObjectRequest * request = [OSSPutObjectRequest new]; request.bucketName = @"<bucketName>"; request.objectKey = @"<objectKey>"; request.uploadingFileURL = [NSURL fileURLWithPath:@<filepath>"]; // 设置回调参数 request.callbackParam = @{ @"callbackUrl": @"http://abc.com/callback.php", @"callbackBody": @"filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}" }; // 设置自定义变量 request.callbackVar = @{ @"x:phone": @"iphone6s", @"x:system": @"ios9.1" }; Android指定上传回调示例:PutObjectRequest put = new PutObjectRequest(testBucket, testObject, uploadFilePath); ObjectMetadata metadata = new ObjectMetadata(); metadata.setContentType("application/octet-stream"); put.setMetadata(metadata); put.setCallbackParam(new HashMap<String, String>() { { put("callbackUrl", "http://abc.com/callback.php"); put("callbackBody", "filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}"); } }); put.setCallbackVars(new HashMap<String, String>() { { put("x:phone", "IPOHE6S"); put("x:system", "YunOS5.0"); } }); 应用服务器收到的回调请求 根据设定的不同URL和回调内容,应用服务器收到的回调请求会所不同,示例如下: POST /index.html HTTP/1.0 Host: 121.43.113.8 Connection: close Content-Length: 81 Content-Type: application/x-www-form-urlencoded User-Agent: ehttp-client/0.0.1 authorization: kKQeGTRccDKyHB3H9vF+xYMSrmhMZjzzl2/kdD1ktNVgbWEfYTQG0G2SU/RaHBovRCE8OkQDjC3uG33esH2txA== x-oss-pub-key-url: aHR0cDovL2dvc3NwdWJsaWMuYWxpY2RuLmNvbS9jYWxsYmFja19wdWJfa2V5X3YxLnBlbQ== filename=test.txt&size=5&photo=iphone6s&system=ios9.1 更多内容请参见Callback API文档。 应用服务器判断回调请求是否来自OSS 如果您的回调服务器被人恶意攻击了,例如恶意回调您的应用服务器,导致应用服务器收到一些非法的请求,影响正常逻辑,此时您就需要判断回调请求是否来自OSS。 判断的方法主要是根据OSS给应用服务器返回的头部内容中 x-oss-pub-key-url和authorization这两个参数进行RSA校验。只有通过RSA校验才能说明这个请求是来自OSS。本文提供的示例程序有实现的示例供您参考。 应用服务器收到回调请求后的处理 应用服务器在校验这个请求是来自OSS后,指定回调给应用服务器的内容格式,如 filename=test.txt&size=5&photo=iphone6s&system=ios9.1 应用服务器就可以根据OSS的返回内容,解析得到自己想要的数据。得到这个数据后,应用服务器可以把数据存放起来,方便后续管理。 OSS如何处理应用服务器的返回内容 有两种情况: OSS将回调请求发送给应用服务器,但是应用服务器接收失败或者访问不通,OSS会返回给Android/iOS移动应用203的状态码,但是数据已经存放到OSS上了。 应用服务器接收到OSS的回调请求,并且正确返回了,OSS会返回给Android/iOS移动应用状态码200, 并把应用服务器返回给OSS的内容原封不动地返回给Android/iOS移动应用。 示例程序下载 示例程序只是完成了如何检查应用服务器收到的签名, 您需要自行增加对应用服务器收到回调内容的格式解析 。 Java: 下载地址:单击这里。 运行方法:解压后运行java -jar oss-callback-server-demo.jar 9000。9000是运行的端口,可以自己指定。 说明 这个jar例子在java 1.7运行通过,如果有问题可以自己依据提供的代码进行修改。这是一个maven项目。 PHP: 下载地址:单击这里 运行方法:将解压包部署到Apache环境下,因为PHP本身语言的特点,某些数据头部的获取会依赖于环境。请参考例子根据实际环境进行修改。 Python: 下载地址:单击这里。 运行方法:解压后直接运行python callback_app_server.py即可,程序自实现了一个简单的http server,运行该程序可能需要安装rsa的依赖。 Ruby版本: 下载地址:单击这里。 运行方法: ruby aliyun_oss_callback_server.rb。

2019-12-01 23:13:23 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 本文讲解如何搭建一个基于OSS的移动应用数据直传服务并设置上传回调。 背景 快速搭建移动应用直传服务介绍了如何快速搭建一个基于OSS的移动应用数据直传服务。但这一方案有个问题:对于Android/iOS移动应用来说,只需要申请一次STS凭证,就能多次使用该STS凭证上传数据到OSS。这就导致应用服务器无法得知用户上传了哪些数据 ,作为该app的开发者,就没法对应用上传数据进行管理。为此OSS提供了上传回调方案。 原理介绍 上传回调的原理如下图所示: OSS在收到Android/iOS移动应用的数据(上图中步骤5)和在返回用户上传结果(上图中步骤6)之间,触发一个上传回调任务,即第上图中步骤5.5,先回调用户服务器,得到应用服务器返回的内容,然后将此内容返回给Android/iOS移动应用。详情请参见Callback API文档。 上传回调的作用 通过上传回调让用户应用服务器知道当前上传文件的基本信息。 返回的基本信息可以包含下表中一个或多个变量,返回内容的格式在Android/iOS上传时指定。 系统变量 含义 bucket 移动应用上传文件到OSS的哪个存储空间 object 移动应用上传文件到OSS后保存的文件名 etag 该上传的文件的ETag,即返回给用户的etag字段 size 上传文件的大小 mimeType 资源类型 imageInfo.height 图片高度 imageInfo.width 图片宽度 imageInfo.format 图片格式,如jpg、png等 通过上传回调设定自定义参数,达到信息传递的目的。 假如您是一个开发者,您想知道当前用户所使用的app版本、当前用户所在的操作系统版本、用户的GPS信息、用户的手机型号。您可以在Android/iOS端上传文件时,指定自定义参数,如下所示: x:version:指定APP版本 x:system:指定操作系统版本 x:gps:指定GPS信息 x:phone:指定手机型号 Android/iOS移动应用上传文件到OSS时附带上述参数,然后OSS把这些参数放到CallbackBody里发给应用服务器。这样应用服务器就能收到这些信息,达到信息传递的目的。 上传回调对应用服务器的要求 您必须部署一个可以接收POST请求的服务,这个服务必须有公网地址,如www.abc.com/callback.php,或者外网IP地址。 您必须给OSS正确的返回,返回格式必须是JSON格式,内容自定义。OSS会把应用服务器返回的内容,原封不动地返回给Android/iOS移动应用。详情请参见Callback API文档。注意 在移动应用端设置上传回调 要让OSS在接收上传请求时触发上传回调,移动应用在构造上传请求时必须把如下内容指定到上传请求里面: 要回调到哪个服务器(callbackUrl),如 http://abc.com/callback.php,这个地址必须是公网能够访问的。 上传回调给应用服务器的内容(callbackBody),可以是上述OSS返回应用服务器系统变量的一个或者多个。 假如您的用户服务器上传回调地址是http://abc.com/callback.php。您想获取手机上传的文件名称、文件的大小,并且定义了x:phone变量是指手机型号,x:system变量是指操作系统版本。 上传回调示例分以下两种: iOS指定上传回调示例:OSSPutObjectRequest * request = [OSSPutObjectRequest new]; request.bucketName = @"<bucketName>"; request.objectKey = @"<objectKey>"; request.uploadingFileURL = [NSURL fileURLWithPath:@<filepath>"]; // 设置回调参数 request.callbackParam = @{ @"callbackUrl": @"http://abc.com/callback.php", @"callbackBody": @"filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}" }; // 设置自定义变量 request.callbackVar = @{ @"x:phone": @"iphone6s", @"x:system": @"ios9.1" }; Android指定上传回调示例:PutObjectRequest put = new PutObjectRequest(testBucket, testObject, uploadFilePath); ObjectMetadata metadata = new ObjectMetadata(); metadata.setContentType("application/octet-stream"); put.setMetadata(metadata); put.setCallbackParam(new HashMap<String, String>() { { put("callbackUrl", "http://abc.com/callback.php"); put("callbackBody", "filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}"); } }); put.setCallbackVars(new HashMap<String, String>() { { put("x:phone", "IPOHE6S"); put("x:system", "YunOS5.0"); } }); 应用服务器收到的回调请求 根据设定的不同URL和回调内容,应用服务器收到的回调请求会所不同,示例如下: POST /index.html HTTP/1.0 Host: 121.43.113.8 Connection: close Content-Length: 81 Content-Type: application/x-www-form-urlencoded User-Agent: ehttp-client/0.0.1 authorization: kKQeGTRccDKyHB3H9vF+xYMSrmhMZjzzl2/kdD1ktNVgbWEfYTQG0G2SU/RaHBovRCE8OkQDjC3uG33esH2txA== x-oss-pub-key-url: aHR0cDovL2dvc3NwdWJsaWMuYWxpY2RuLmNvbS9jYWxsYmFja19wdWJfa2V5X3YxLnBlbQ== filename=test.txt&size=5&photo=iphone6s&system=ios9.1 更多内容请参见Callback API文档。 应用服务器判断回调请求是否来自OSS 如果您的回调服务器被人恶意攻击了,例如恶意回调您的应用服务器,导致应用服务器收到一些非法的请求,影响正常逻辑,此时您就需要判断回调请求是否来自OSS。 判断的方法主要是根据OSS给应用服务器返回的头部内容中 x-oss-pub-key-url和authorization这两个参数进行RSA校验。只有通过RSA校验才能说明这个请求是来自OSS。本文提供的示例程序有实现的示例供您参考。 应用服务器收到回调请求后的处理 应用服务器在校验这个请求是来自OSS后,指定回调给应用服务器的内容格式,如 filename=test.txt&size=5&photo=iphone6s&system=ios9.1 应用服务器就可以根据OSS的返回内容,解析得到自己想要的数据。得到这个数据后,应用服务器可以把数据存放起来,方便后续管理。 OSS如何处理应用服务器的返回内容 有两种情况: OSS将回调请求发送给应用服务器,但是应用服务器接收失败或者访问不通,OSS会返回给Android/iOS移动应用203的状态码,但是数据已经存放到OSS上了。 应用服务器接收到OSS的回调请求,并且正确返回了,OSS会返回给Android/iOS移动应用状态码200, 并把应用服务器返回给OSS的内容原封不动地返回给Android/iOS移动应用。 示例程序下载 示例程序只是完成了如何检查应用服务器收到的签名, 您需要自行增加对应用服务器收到回调内容的格式解析 。 Java: 下载地址:单击这里。 运行方法:解压后运行java -jar oss-callback-server-demo.jar 9000。9000是运行的端口,可以自己指定。 说明 这个jar例子在java 1.7运行通过,如果有问题可以自己依据提供的代码进行修改。这是一个maven项目。 PHP: 下载地址:单击这里 运行方法:将解压包部署到Apache环境下,因为PHP本身语言的特点,某些数据头部的获取会依赖于环境。请参考例子根据实际环境进行修改。 Python: 下载地址:单击这里。 运行方法:解压后直接运行python callback_app_server.py即可,程序自实现了一个简单的http server,运行该程序可能需要安装rsa的依赖。 Ruby版本: 下载地址:单击这里。 运行方法: ruby aliyun_oss_callback_server.rb。

2019-12-01 23:13:24 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 本文讲解如何搭建一个基于OSS的移动应用数据直传服务并设置上传回调。 背景 快速搭建移动应用直传服务介绍了如何快速搭建一个基于OSS的移动应用数据直传服务。但这一方案有个问题:对于Android/iOS移动应用来说,只需要申请一次STS凭证,就能多次使用该STS凭证上传数据到OSS。这就导致应用服务器无法得知用户上传了哪些数据 ,作为该app的开发者,就没法对应用上传数据进行管理。为此OSS提供了上传回调方案。 原理介绍 上传回调的原理如下图所示: OSS在收到Android/iOS移动应用的数据(上图中步骤5)和在返回用户上传结果(上图中步骤6)之间,触发一个上传回调任务,即第上图中步骤5.5,先回调用户服务器,得到应用服务器返回的内容,然后将此内容返回给Android/iOS移动应用。详情请参见Callback API文档。 上传回调的作用 通过上传回调让用户应用服务器知道当前上传文件的基本信息。 返回的基本信息可以包含下表中一个或多个变量,返回内容的格式在Android/iOS上传时指定。 系统变量 含义 bucket 移动应用上传文件到OSS的哪个存储空间 object 移动应用上传文件到OSS后保存的文件名 etag 该上传的文件的ETag,即返回给用户的etag字段 size 上传文件的大小 mimeType 资源类型 imageInfo.height 图片高度 imageInfo.width 图片宽度 imageInfo.format 图片格式,如jpg、png等 通过上传回调设定自定义参数,达到信息传递的目的。 假如您是一个开发者,您想知道当前用户所使用的app版本、当前用户所在的操作系统版本、用户的GPS信息、用户的手机型号。您可以在Android/iOS端上传文件时,指定自定义参数,如下所示: x:version:指定APP版本 x:system:指定操作系统版本 x:gps:指定GPS信息 x:phone:指定手机型号 Android/iOS移动应用上传文件到OSS时附带上述参数,然后OSS把这些参数放到CallbackBody里发给应用服务器。这样应用服务器就能收到这些信息,达到信息传递的目的。 上传回调对应用服务器的要求 您必须部署一个可以接收POST请求的服务,这个服务必须有公网地址,如www.abc.com/callback.php,或者外网IP地址。 您必须给OSS正确的返回,返回格式必须是JSON格式,内容自定义。OSS会把应用服务器返回的内容,原封不动地返回给Android/iOS移动应用。详情请参见Callback API文档。注意 在移动应用端设置上传回调 要让OSS在接收上传请求时触发上传回调,移动应用在构造上传请求时必须把如下内容指定到上传请求里面: 要回调到哪个服务器(callbackUrl),如 http://abc.com/callback.php,这个地址必须是公网能够访问的。 上传回调给应用服务器的内容(callbackBody),可以是上述OSS返回应用服务器系统变量的一个或者多个。 假如您的用户服务器上传回调地址是http://abc.com/callback.php。您想获取手机上传的文件名称、文件的大小,并且定义了x:phone变量是指手机型号,x:system变量是指操作系统版本。 上传回调示例分以下两种: iOS指定上传回调示例:OSSPutObjectRequest * request = [OSSPutObjectRequest new]; request.bucketName = @"<bucketName>"; request.objectKey = @"<objectKey>"; request.uploadingFileURL = [NSURL fileURLWithPath:@<filepath>"]; // 设置回调参数 request.callbackParam = @{ @"callbackUrl": @"http://abc.com/callback.php", @"callbackBody": @"filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}" }; // 设置自定义变量 request.callbackVar = @{ @"x:phone": @"iphone6s", @"x:system": @"ios9.1" }; Android指定上传回调示例:PutObjectRequest put = new PutObjectRequest(testBucket, testObject, uploadFilePath); ObjectMetadata metadata = new ObjectMetadata(); metadata.setContentType("application/octet-stream"); put.setMetadata(metadata); put.setCallbackParam(new HashMap<String, String>() { { put("callbackUrl", "http://abc.com/callback.php"); put("callbackBody", "filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}"); } }); put.setCallbackVars(new HashMap<String, String>() { { put("x:phone", "IPOHE6S"); put("x:system", "YunOS5.0"); } }); 应用服务器收到的回调请求 根据设定的不同URL和回调内容,应用服务器收到的回调请求会所不同,示例如下: POST /index.html HTTP/1.0 Host: 121.43.113.8 Connection: close Content-Length: 81 Content-Type: application/x-www-form-urlencoded User-Agent: ehttp-client/0.0.1 authorization: kKQeGTRccDKyHB3H9vF+xYMSrmhMZjzzl2/kdD1ktNVgbWEfYTQG0G2SU/RaHBovRCE8OkQDjC3uG33esH2txA== x-oss-pub-key-url: aHR0cDovL2dvc3NwdWJsaWMuYWxpY2RuLmNvbS9jYWxsYmFja19wdWJfa2V5X3YxLnBlbQ== filename=test.txt&size=5&photo=iphone6s&system=ios9.1 更多内容请参见Callback API文档。 应用服务器判断回调请求是否来自OSS 如果您的回调服务器被人恶意攻击了,例如恶意回调您的应用服务器,导致应用服务器收到一些非法的请求,影响正常逻辑,此时您就需要判断回调请求是否来自OSS。 判断的方法主要是根据OSS给应用服务器返回的头部内容中 x-oss-pub-key-url和authorization这两个参数进行RSA校验。只有通过RSA校验才能说明这个请求是来自OSS。本文提供的示例程序有实现的示例供您参考。 应用服务器收到回调请求后的处理 应用服务器在校验这个请求是来自OSS后,指定回调给应用服务器的内容格式,如 filename=test.txt&size=5&photo=iphone6s&system=ios9.1 应用服务器就可以根据OSS的返回内容,解析得到自己想要的数据。得到这个数据后,应用服务器可以把数据存放起来,方便后续管理。 OSS如何处理应用服务器的返回内容 有两种情况: OSS将回调请求发送给应用服务器,但是应用服务器接收失败或者访问不通,OSS会返回给Android/iOS移动应用203的状态码,但是数据已经存放到OSS上了。 应用服务器接收到OSS的回调请求,并且正确返回了,OSS会返回给Android/iOS移动应用状态码200, 并把应用服务器返回给OSS的内容原封不动地返回给Android/iOS移动应用。 示例程序下载 示例程序只是完成了如何检查应用服务器收到的签名, 您需要自行增加对应用服务器收到回调内容的格式解析 。 Java: 下载地址:单击这里。 运行方法:解压后运行java -jar oss-callback-server-demo.jar 9000。9000是运行的端口,可以自己指定。 说明 这个jar例子在java 1.7运行通过,如果有问题可以自己依据提供的代码进行修改。这是一个maven项目。 PHP: 下载地址:单击这里 运行方法:将解压包部署到Apache环境下,因为PHP本身语言的特点,某些数据头部的获取会依赖于环境。请参考例子根据实际环境进行修改。 Python: 下载地址:单击这里。 运行方法:解压后直接运行python callback_app_server.py即可,程序自实现了一个简单的http server,运行该程序可能需要安装rsa的依赖。 Ruby版本: 下载地址:单击这里。 运行方法: ruby aliyun_oss_callback_server.rb。

2019-12-01 23:13:23 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 本文讲解如何搭建一个基于OSS的移动应用数据直传服务并设置上传回调。 背景 快速搭建移动应用直传服务介绍了如何快速搭建一个基于OSS的移动应用数据直传服务。但这一方案有个问题:对于Android/iOS移动应用来说,只需要申请一次STS凭证,就能多次使用该STS凭证上传数据到OSS。这就导致应用服务器无法得知用户上传了哪些数据 ,作为该app的开发者,就没法对应用上传数据进行管理。为此OSS提供了上传回调方案。 原理介绍 上传回调的原理如下图所示: OSS在收到Android/iOS移动应用的数据(上图中步骤5)和在返回用户上传结果(上图中步骤6)之间,触发一个上传回调任务,即第上图中步骤5.5,先回调用户服务器,得到应用服务器返回的内容,然后将此内容返回给Android/iOS移动应用。详情请参见Callback API文档。 上传回调的作用 通过上传回调让用户应用服务器知道当前上传文件的基本信息。 返回的基本信息可以包含下表中一个或多个变量,返回内容的格式在Android/iOS上传时指定。 系统变量 含义 bucket 移动应用上传文件到OSS的哪个存储空间 object 移动应用上传文件到OSS后保存的文件名 etag 该上传的文件的ETag,即返回给用户的etag字段 size 上传文件的大小 mimeType 资源类型 imageInfo.height 图片高度 imageInfo.width 图片宽度 imageInfo.format 图片格式,如jpg、png等 通过上传回调设定自定义参数,达到信息传递的目的。 假如您是一个开发者,您想知道当前用户所使用的app版本、当前用户所在的操作系统版本、用户的GPS信息、用户的手机型号。您可以在Android/iOS端上传文件时,指定自定义参数,如下所示: x:version:指定APP版本 x:system:指定操作系统版本 x:gps:指定GPS信息 x:phone:指定手机型号 Android/iOS移动应用上传文件到OSS时附带上述参数,然后OSS把这些参数放到CallbackBody里发给应用服务器。这样应用服务器就能收到这些信息,达到信息传递的目的。 上传回调对应用服务器的要求 您必须部署一个可以接收POST请求的服务,这个服务必须有公网地址,如www.abc.com/callback.php,或者外网IP地址。 您必须给OSS正确的返回,返回格式必须是JSON格式,内容自定义。OSS会把应用服务器返回的内容,原封不动地返回给Android/iOS移动应用。详情请参见Callback API文档。注意 在移动应用端设置上传回调 要让OSS在接收上传请求时触发上传回调,移动应用在构造上传请求时必须把如下内容指定到上传请求里面: 要回调到哪个服务器(callbackUrl),如 http://abc.com/callback.php,这个地址必须是公网能够访问的。 上传回调给应用服务器的内容(callbackBody),可以是上述OSS返回应用服务器系统变量的一个或者多个。 假如您的用户服务器上传回调地址是http://abc.com/callback.php。您想获取手机上传的文件名称、文件的大小,并且定义了x:phone变量是指手机型号,x:system变量是指操作系统版本。 上传回调示例分以下两种: iOS指定上传回调示例:OSSPutObjectRequest * request = [OSSPutObjectRequest new]; request.bucketName = @"<bucketName>"; request.objectKey = @"<objectKey>"; request.uploadingFileURL = [NSURL fileURLWithPath:@<filepath>"]; // 设置回调参数 request.callbackParam = @{ @"callbackUrl": @"http://abc.com/callback.php", @"callbackBody": @"filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}" }; // 设置自定义变量 request.callbackVar = @{ @"x:phone": @"iphone6s", @"x:system": @"ios9.1" }; Android指定上传回调示例:PutObjectRequest put = new PutObjectRequest(testBucket, testObject, uploadFilePath); ObjectMetadata metadata = new ObjectMetadata(); metadata.setContentType("application/octet-stream"); put.setMetadata(metadata); put.setCallbackParam(new HashMap<String, String>() { { put("callbackUrl", "http://abc.com/callback.php"); put("callbackBody", "filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}"); } }); put.setCallbackVars(new HashMap<String, String>() { { put("x:phone", "IPOHE6S"); put("x:system", "YunOS5.0"); } }); 应用服务器收到的回调请求 根据设定的不同URL和回调内容,应用服务器收到的回调请求会所不同,示例如下: POST /index.html HTTP/1.0 Host: 121.43.113.8 Connection: close Content-Length: 81 Content-Type: application/x-www-form-urlencoded User-Agent: ehttp-client/0.0.1 authorization: kKQeGTRccDKyHB3H9vF+xYMSrmhMZjzzl2/kdD1ktNVgbWEfYTQG0G2SU/RaHBovRCE8OkQDjC3uG33esH2txA== x-oss-pub-key-url: aHR0cDovL2dvc3NwdWJsaWMuYWxpY2RuLmNvbS9jYWxsYmFja19wdWJfa2V5X3YxLnBlbQ== filename=test.txt&size=5&photo=iphone6s&system=ios9.1 更多内容请参见Callback API文档。 应用服务器判断回调请求是否来自OSS 如果您的回调服务器被人恶意攻击了,例如恶意回调您的应用服务器,导致应用服务器收到一些非法的请求,影响正常逻辑,此时您就需要判断回调请求是否来自OSS。 判断的方法主要是根据OSS给应用服务器返回的头部内容中 x-oss-pub-key-url和authorization这两个参数进行RSA校验。只有通过RSA校验才能说明这个请求是来自OSS。本文提供的示例程序有实现的示例供您参考。 应用服务器收到回调请求后的处理 应用服务器在校验这个请求是来自OSS后,指定回调给应用服务器的内容格式,如 filename=test.txt&size=5&photo=iphone6s&system=ios9.1 应用服务器就可以根据OSS的返回内容,解析得到自己想要的数据。得到这个数据后,应用服务器可以把数据存放起来,方便后续管理。 OSS如何处理应用服务器的返回内容 有两种情况: OSS将回调请求发送给应用服务器,但是应用服务器接收失败或者访问不通,OSS会返回给Android/iOS移动应用203的状态码,但是数据已经存放到OSS上了。 应用服务器接收到OSS的回调请求,并且正确返回了,OSS会返回给Android/iOS移动应用状态码200, 并把应用服务器返回给OSS的内容原封不动地返回给Android/iOS移动应用。 示例程序下载 示例程序只是完成了如何检查应用服务器收到的签名, 您需要自行增加对应用服务器收到回调内容的格式解析 。 Java: 下载地址:单击这里。 运行方法:解压后运行java -jar oss-callback-server-demo.jar 9000。9000是运行的端口,可以自己指定。 说明 这个jar例子在java 1.7运行通过,如果有问题可以自己依据提供的代码进行修改。这是一个maven项目。 PHP: 下载地址:单击这里 运行方法:将解压包部署到Apache环境下,因为PHP本身语言的特点,某些数据头部的获取会依赖于环境。请参考例子根据实际环境进行修改。 Python: 下载地址:单击这里。 运行方法:解压后直接运行python callback_app_server.py即可,程序自实现了一个简单的http server,运行该程序可能需要安装rsa的依赖。 Ruby版本: 下载地址:单击这里。 运行方法: ruby aliyun_oss_callback_server.rb。

2019-12-01 23:13:23 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 本文讲解如何搭建一个基于OSS的移动应用数据直传服务并设置上传回调。 背景 快速搭建移动应用直传服务介绍了如何快速搭建一个基于OSS的移动应用数据直传服务。但这一方案有个问题:对于Android/iOS移动应用来说,只需要申请一次STS凭证,就能多次使用该STS凭证上传数据到OSS。这就导致应用服务器无法得知用户上传了哪些数据 ,作为该app的开发者,就没法对应用上传数据进行管理。为此OSS提供了上传回调方案。 原理介绍 上传回调的原理如下图所示: OSS在收到Android/iOS移动应用的数据(上图中步骤5)和在返回用户上传结果(上图中步骤6)之间,触发一个上传回调任务,即第上图中步骤5.5,先回调用户服务器,得到应用服务器返回的内容,然后将此内容返回给Android/iOS移动应用。详情请参见Callback API文档。 上传回调的作用 通过上传回调让用户应用服务器知道当前上传文件的基本信息。 返回的基本信息可以包含下表中一个或多个变量,返回内容的格式在Android/iOS上传时指定。 系统变量 含义 bucket 移动应用上传文件到OSS的哪个存储空间 object 移动应用上传文件到OSS后保存的文件名 etag 该上传的文件的ETag,即返回给用户的etag字段 size 上传文件的大小 mimeType 资源类型 imageInfo.height 图片高度 imageInfo.width 图片宽度 imageInfo.format 图片格式,如jpg、png等 通过上传回调设定自定义参数,达到信息传递的目的。 假如您是一个开发者,您想知道当前用户所使用的app版本、当前用户所在的操作系统版本、用户的GPS信息、用户的手机型号。您可以在Android/iOS端上传文件时,指定自定义参数,如下所示: x:version:指定APP版本 x:system:指定操作系统版本 x:gps:指定GPS信息 x:phone:指定手机型号 Android/iOS移动应用上传文件到OSS时附带上述参数,然后OSS把这些参数放到CallbackBody里发给应用服务器。这样应用服务器就能收到这些信息,达到信息传递的目的。 上传回调对应用服务器的要求 您必须部署一个可以接收POST请求的服务,这个服务必须有公网地址,如www.abc.com/callback.php,或者外网IP地址。 您必须给OSS正确的返回,返回格式必须是JSON格式,内容自定义。OSS会把应用服务器返回的内容,原封不动地返回给Android/iOS移动应用。详情请参见Callback API文档。注意 在移动应用端设置上传回调 要让OSS在接收上传请求时触发上传回调,移动应用在构造上传请求时必须把如下内容指定到上传请求里面: 要回调到哪个服务器(callbackUrl),如 http://abc.com/callback.php,这个地址必须是公网能够访问的。 上传回调给应用服务器的内容(callbackBody),可以是上述OSS返回应用服务器系统变量的一个或者多个。 假如您的用户服务器上传回调地址是http://abc.com/callback.php。您想获取手机上传的文件名称、文件的大小,并且定义了x:phone变量是指手机型号,x:system变量是指操作系统版本。 上传回调示例分以下两种: iOS指定上传回调示例:OSSPutObjectRequest * request = [OSSPutObjectRequest new]; request.bucketName = @"<bucketName>"; request.objectKey = @"<objectKey>"; request.uploadingFileURL = [NSURL fileURLWithPath:@<filepath>"]; // 设置回调参数 request.callbackParam = @{ @"callbackUrl": @"http://abc.com/callback.php", @"callbackBody": @"filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}" }; // 设置自定义变量 request.callbackVar = @{ @"x:phone": @"iphone6s", @"x:system": @"ios9.1" }; Android指定上传回调示例:PutObjectRequest put = new PutObjectRequest(testBucket, testObject, uploadFilePath); ObjectMetadata metadata = new ObjectMetadata(); metadata.setContentType("application/octet-stream"); put.setMetadata(metadata); put.setCallbackParam(new HashMap<String, String>() { { put("callbackUrl", "http://abc.com/callback.php"); put("callbackBody", "filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}"); } }); put.setCallbackVars(new HashMap<String, String>() { { put("x:phone", "IPOHE6S"); put("x:system", "YunOS5.0"); } }); 应用服务器收到的回调请求 根据设定的不同URL和回调内容,应用服务器收到的回调请求会所不同,示例如下: POST /index.html HTTP/1.0 Host: 121.43.113.8 Connection: close Content-Length: 81 Content-Type: application/x-www-form-urlencoded User-Agent: ehttp-client/0.0.1 authorization: kKQeGTRccDKyHB3H9vF+xYMSrmhMZjzzl2/kdD1ktNVgbWEfYTQG0G2SU/RaHBovRCE8OkQDjC3uG33esH2txA== x-oss-pub-key-url: aHR0cDovL2dvc3NwdWJsaWMuYWxpY2RuLmNvbS9jYWxsYmFja19wdWJfa2V5X3YxLnBlbQ== filename=test.txt&size=5&photo=iphone6s&system=ios9.1 更多内容请参见Callback API文档。 应用服务器判断回调请求是否来自OSS 如果您的回调服务器被人恶意攻击了,例如恶意回调您的应用服务器,导致应用服务器收到一些非法的请求,影响正常逻辑,此时您就需要判断回调请求是否来自OSS。 判断的方法主要是根据OSS给应用服务器返回的头部内容中 x-oss-pub-key-url和authorization这两个参数进行RSA校验。只有通过RSA校验才能说明这个请求是来自OSS。本文提供的示例程序有实现的示例供您参考。 应用服务器收到回调请求后的处理 应用服务器在校验这个请求是来自OSS后,指定回调给应用服务器的内容格式,如 filename=test.txt&size=5&photo=iphone6s&system=ios9.1 应用服务器就可以根据OSS的返回内容,解析得到自己想要的数据。得到这个数据后,应用服务器可以把数据存放起来,方便后续管理。 OSS如何处理应用服务器的返回内容 有两种情况: OSS将回调请求发送给应用服务器,但是应用服务器接收失败或者访问不通,OSS会返回给Android/iOS移动应用203的状态码,但是数据已经存放到OSS上了。 应用服务器接收到OSS的回调请求,并且正确返回了,OSS会返回给Android/iOS移动应用状态码200, 并把应用服务器返回给OSS的内容原封不动地返回给Android/iOS移动应用。 示例程序下载 示例程序只是完成了如何检查应用服务器收到的签名, 您需要自行增加对应用服务器收到回调内容的格式解析 。 Java: 下载地址:单击这里。 运行方法:解压后运行java -jar oss-callback-server-demo.jar 9000。9000是运行的端口,可以自己指定。 说明 这个jar例子在java 1.7运行通过,如果有问题可以自己依据提供的代码进行修改。这是一个maven项目。 PHP: 下载地址:单击这里 运行方法:将解压包部署到Apache环境下,因为PHP本身语言的特点,某些数据头部的获取会依赖于环境。请参考例子根据实际环境进行修改。 Python: 下载地址:单击这里。 运行方法:解压后直接运行python callback_app_server.py即可,程序自实现了一个简单的http server,运行该程序可能需要安装rsa的依赖。 Ruby版本: 下载地址:单击这里。 运行方法: ruby aliyun_oss_callback_server.rb。

2019-12-01 23:13:23 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 本文讲解如何搭建一个基于OSS的移动应用数据直传服务并设置上传回调。 背景 快速搭建移动应用直传服务介绍了如何快速搭建一个基于OSS的移动应用数据直传服务。但这一方案有个问题:对于Android/iOS移动应用来说,只需要申请一次STS凭证,就能多次使用该STS凭证上传数据到OSS。这就导致应用服务器无法得知用户上传了哪些数据 ,作为该app的开发者,就没法对应用上传数据进行管理。为此OSS提供了上传回调方案。 原理介绍 上传回调的原理如下图所示: OSS在收到Android/iOS移动应用的数据(上图中步骤5)和在返回用户上传结果(上图中步骤6)之间,触发一个上传回调任务,即第上图中步骤5.5,先回调用户服务器,得到应用服务器返回的内容,然后将此内容返回给Android/iOS移动应用。详情请参见Callback API文档。 上传回调的作用 通过上传回调让用户应用服务器知道当前上传文件的基本信息。 返回的基本信息可以包含下表中一个或多个变量,返回内容的格式在Android/iOS上传时指定。 系统变量 含义 bucket 移动应用上传文件到OSS的哪个存储空间 object 移动应用上传文件到OSS后保存的文件名 etag 该上传的文件的ETag,即返回给用户的etag字段 size 上传文件的大小 mimeType 资源类型 imageInfo.height 图片高度 imageInfo.width 图片宽度 imageInfo.format 图片格式,如jpg、png等 通过上传回调设定自定义参数,达到信息传递的目的。 假如您是一个开发者,您想知道当前用户所使用的app版本、当前用户所在的操作系统版本、用户的GPS信息、用户的手机型号。您可以在Android/iOS端上传文件时,指定自定义参数,如下所示: x:version:指定APP版本 x:system:指定操作系统版本 x:gps:指定GPS信息 x:phone:指定手机型号 Android/iOS移动应用上传文件到OSS时附带上述参数,然后OSS把这些参数放到CallbackBody里发给应用服务器。这样应用服务器就能收到这些信息,达到信息传递的目的。 上传回调对应用服务器的要求 您必须部署一个可以接收POST请求的服务,这个服务必须有公网地址,如www.abc.com/callback.php,或者外网IP地址。 您必须给OSS正确的返回,返回格式必须是JSON格式,内容自定义。OSS会把应用服务器返回的内容,原封不动地返回给Android/iOS移动应用。详情请参见Callback API文档。注意 在移动应用端设置上传回调 要让OSS在接收上传请求时触发上传回调,移动应用在构造上传请求时必须把如下内容指定到上传请求里面: 要回调到哪个服务器(callbackUrl),如 http://abc.com/callback.php,这个地址必须是公网能够访问的。 上传回调给应用服务器的内容(callbackBody),可以是上述OSS返回应用服务器系统变量的一个或者多个。 假如您的用户服务器上传回调地址是http://abc.com/callback.php。您想获取手机上传的文件名称、文件的大小,并且定义了x:phone变量是指手机型号,x:system变量是指操作系统版本。 上传回调示例分以下两种: iOS指定上传回调示例:OSSPutObjectRequest * request = [OSSPutObjectRequest new]; request.bucketName = @"<bucketName>"; request.objectKey = @"<objectKey>"; request.uploadingFileURL = [NSURL fileURLWithPath:@<filepath>"]; // 设置回调参数 request.callbackParam = @{ @"callbackUrl": @"http://abc.com/callback.php", @"callbackBody": @"filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}" }; // 设置自定义变量 request.callbackVar = @{ @"x:phone": @"iphone6s", @"x:system": @"ios9.1" }; Android指定上传回调示例:PutObjectRequest put = new PutObjectRequest(testBucket, testObject, uploadFilePath); ObjectMetadata metadata = new ObjectMetadata(); metadata.setContentType("application/octet-stream"); put.setMetadata(metadata); put.setCallbackParam(new HashMap<String, String>() { { put("callbackUrl", "http://abc.com/callback.php"); put("callbackBody", "filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}"); } }); put.setCallbackVars(new HashMap<String, String>() { { put("x:phone", "IPOHE6S"); put("x:system", "YunOS5.0"); } }); 应用服务器收到的回调请求 根据设定的不同URL和回调内容,应用服务器收到的回调请求会所不同,示例如下: POST /index.html HTTP/1.0 Host: 121.43.113.8 Connection: close Content-Length: 81 Content-Type: application/x-www-form-urlencoded User-Agent: ehttp-client/0.0.1 authorization: kKQeGTRccDKyHB3H9vF+xYMSrmhMZjzzl2/kdD1ktNVgbWEfYTQG0G2SU/RaHBovRCE8OkQDjC3uG33esH2txA== x-oss-pub-key-url: aHR0cDovL2dvc3NwdWJsaWMuYWxpY2RuLmNvbS9jYWxsYmFja19wdWJfa2V5X3YxLnBlbQ== filename=test.txt&size=5&photo=iphone6s&system=ios9.1 更多内容请参见Callback API文档。 应用服务器判断回调请求是否来自OSS 如果您的回调服务器被人恶意攻击了,例如恶意回调您的应用服务器,导致应用服务器收到一些非法的请求,影响正常逻辑,此时您就需要判断回调请求是否来自OSS。 判断的方法主要是根据OSS给应用服务器返回的头部内容中 x-oss-pub-key-url和authorization这两个参数进行RSA校验。只有通过RSA校验才能说明这个请求是来自OSS。本文提供的示例程序有实现的示例供您参考。 应用服务器收到回调请求后的处理 应用服务器在校验这个请求是来自OSS后,指定回调给应用服务器的内容格式,如 filename=test.txt&size=5&photo=iphone6s&system=ios9.1 应用服务器就可以根据OSS的返回内容,解析得到自己想要的数据。得到这个数据后,应用服务器可以把数据存放起来,方便后续管理。 OSS如何处理应用服务器的返回内容 有两种情况: OSS将回调请求发送给应用服务器,但是应用服务器接收失败或者访问不通,OSS会返回给Android/iOS移动应用203的状态码,但是数据已经存放到OSS上了。 应用服务器接收到OSS的回调请求,并且正确返回了,OSS会返回给Android/iOS移动应用状态码200, 并把应用服务器返回给OSS的内容原封不动地返回给Android/iOS移动应用。 示例程序下载 示例程序只是完成了如何检查应用服务器收到的签名, 您需要自行增加对应用服务器收到回调内容的格式解析 。 Java: 下载地址:单击这里。 运行方法:解压后运行java -jar oss-callback-server-demo.jar 9000。9000是运行的端口,可以自己指定。 说明 这个jar例子在java 1.7运行通过,如果有问题可以自己依据提供的代码进行修改。这是一个maven项目。 PHP: 下载地址:单击这里 运行方法:将解压包部署到Apache环境下,因为PHP本身语言的特点,某些数据头部的获取会依赖于环境。请参考例子根据实际环境进行修改。 Python: 下载地址:单击这里。 运行方法:解压后直接运行python callback_app_server.py即可,程序自实现了一个简单的http server,运行该程序可能需要安装rsa的依赖。 Ruby版本: 下载地址:单击这里。 运行方法: ruby aliyun_oss_callback_server.rb。

2019-12-01 23:13:24 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 本文讲解如何搭建一个基于OSS的移动应用数据直传服务并设置上传回调。 背景 快速搭建移动应用直传服务介绍了如何快速搭建一个基于OSS的移动应用数据直传服务。但这一方案有个问题:对于Android/iOS移动应用来说,只需要申请一次STS凭证,就能多次使用该STS凭证上传数据到OSS。这就导致应用服务器无法得知用户上传了哪些数据 ,作为该app的开发者,就没法对应用上传数据进行管理。为此OSS提供了上传回调方案。 原理介绍 上传回调的原理如下图所示: OSS在收到Android/iOS移动应用的数据(上图中步骤5)和在返回用户上传结果(上图中步骤6)之间,触发一个上传回调任务,即第上图中步骤5.5,先回调用户服务器,得到应用服务器返回的内容,然后将此内容返回给Android/iOS移动应用。详情请参见Callback API文档。 上传回调的作用 通过上传回调让用户应用服务器知道当前上传文件的基本信息。 返回的基本信息可以包含下表中一个或多个变量,返回内容的格式在Android/iOS上传时指定。 系统变量 含义 bucket 移动应用上传文件到OSS的哪个存储空间 object 移动应用上传文件到OSS后保存的文件名 etag 该上传的文件的ETag,即返回给用户的etag字段 size 上传文件的大小 mimeType 资源类型 imageInfo.height 图片高度 imageInfo.width 图片宽度 imageInfo.format 图片格式,如jpg、png等 通过上传回调设定自定义参数,达到信息传递的目的。 假如您是一个开发者,您想知道当前用户所使用的app版本、当前用户所在的操作系统版本、用户的GPS信息、用户的手机型号。您可以在Android/iOS端上传文件时,指定自定义参数,如下所示: x:version:指定APP版本 x:system:指定操作系统版本 x:gps:指定GPS信息 x:phone:指定手机型号 Android/iOS移动应用上传文件到OSS时附带上述参数,然后OSS把这些参数放到CallbackBody里发给应用服务器。这样应用服务器就能收到这些信息,达到信息传递的目的。 上传回调对应用服务器的要求 您必须部署一个可以接收POST请求的服务,这个服务必须有公网地址,如www.abc.com/callback.php,或者外网IP地址。 您必须给OSS正确的返回,返回格式必须是JSON格式,内容自定义。OSS会把应用服务器返回的内容,原封不动地返回给Android/iOS移动应用。详情请参见Callback API文档。注意 在移动应用端设置上传回调 要让OSS在接收上传请求时触发上传回调,移动应用在构造上传请求时必须把如下内容指定到上传请求里面: 要回调到哪个服务器(callbackUrl),如 http://abc.com/callback.php,这个地址必须是公网能够访问的。 上传回调给应用服务器的内容(callbackBody),可以是上述OSS返回应用服务器系统变量的一个或者多个。 假如您的用户服务器上传回调地址是http://abc.com/callback.php。您想获取手机上传的文件名称、文件的大小,并且定义了x:phone变量是指手机型号,x:system变量是指操作系统版本。 上传回调示例分以下两种: iOS指定上传回调示例:OSSPutObjectRequest * request = [OSSPutObjectRequest new]; request.bucketName = @"<bucketName>"; request.objectKey = @"<objectKey>"; request.uploadingFileURL = [NSURL fileURLWithPath:@<filepath>"]; // 设置回调参数 request.callbackParam = @{ @"callbackUrl": @"http://abc.com/callback.php", @"callbackBody": @"filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}" }; // 设置自定义变量 request.callbackVar = @{ @"x:phone": @"iphone6s", @"x:system": @"ios9.1" }; Android指定上传回调示例:PutObjectRequest put = new PutObjectRequest(testBucket, testObject, uploadFilePath); ObjectMetadata metadata = new ObjectMetadata(); metadata.setContentType("application/octet-stream"); put.setMetadata(metadata); put.setCallbackParam(new HashMap<String, String>() { { put("callbackUrl", "http://abc.com/callback.php"); put("callbackBody", "filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}"); } }); put.setCallbackVars(new HashMap<String, String>() { { put("x:phone", "IPOHE6S"); put("x:system", "YunOS5.0"); } }); 应用服务器收到的回调请求 根据设定的不同URL和回调内容,应用服务器收到的回调请求会所不同,示例如下: POST /index.html HTTP/1.0 Host: 121.43.113.8 Connection: close Content-Length: 81 Content-Type: application/x-www-form-urlencoded User-Agent: ehttp-client/0.0.1 authorization: kKQeGTRccDKyHB3H9vF+xYMSrmhMZjzzl2/kdD1ktNVgbWEfYTQG0G2SU/RaHBovRCE8OkQDjC3uG33esH2txA== x-oss-pub-key-url: aHR0cDovL2dvc3NwdWJsaWMuYWxpY2RuLmNvbS9jYWxsYmFja19wdWJfa2V5X3YxLnBlbQ== filename=test.txt&size=5&photo=iphone6s&system=ios9.1 更多内容请参见Callback API文档。 应用服务器判断回调请求是否来自OSS 如果您的回调服务器被人恶意攻击了,例如恶意回调您的应用服务器,导致应用服务器收到一些非法的请求,影响正常逻辑,此时您就需要判断回调请求是否来自OSS。 判断的方法主要是根据OSS给应用服务器返回的头部内容中 x-oss-pub-key-url和authorization这两个参数进行RSA校验。只有通过RSA校验才能说明这个请求是来自OSS。本文提供的示例程序有实现的示例供您参考。 应用服务器收到回调请求后的处理 应用服务器在校验这个请求是来自OSS后,指定回调给应用服务器的内容格式,如 filename=test.txt&size=5&photo=iphone6s&system=ios9.1 应用服务器就可以根据OSS的返回内容,解析得到自己想要的数据。得到这个数据后,应用服务器可以把数据存放起来,方便后续管理。 OSS如何处理应用服务器的返回内容 有两种情况: OSS将回调请求发送给应用服务器,但是应用服务器接收失败或者访问不通,OSS会返回给Android/iOS移动应用203的状态码,但是数据已经存放到OSS上了。 应用服务器接收到OSS的回调请求,并且正确返回了,OSS会返回给Android/iOS移动应用状态码200, 并把应用服务器返回给OSS的内容原封不动地返回给Android/iOS移动应用。 示例程序下载 示例程序只是完成了如何检查应用服务器收到的签名, 您需要自行增加对应用服务器收到回调内容的格式解析 。 Java: 下载地址:单击这里。 运行方法:解压后运行java -jar oss-callback-server-demo.jar 9000。9000是运行的端口,可以自己指定。 说明 这个jar例子在java 1.7运行通过,如果有问题可以自己依据提供的代码进行修改。这是一个maven项目。 PHP: 下载地址:单击这里 运行方法:将解压包部署到Apache环境下,因为PHP本身语言的特点,某些数据头部的获取会依赖于环境。请参考例子根据实际环境进行修改。 Python: 下载地址:单击这里。 运行方法:解压后直接运行python callback_app_server.py即可,程序自实现了一个简单的http server,运行该程序可能需要安装rsa的依赖。 Ruby版本: 下载地址:单击这里。 运行方法: ruby aliyun_oss_callback_server.rb。

2019-12-01 23:13:24 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 本文讲解如何搭建一个基于OSS的移动应用数据直传服务并设置上传回调。 背景 快速搭建移动应用直传服务介绍了如何快速搭建一个基于OSS的移动应用数据直传服务。但这一方案有个问题:对于Android/iOS移动应用来说,只需要申请一次STS凭证,就能多次使用该STS凭证上传数据到OSS。这就导致应用服务器无法得知用户上传了哪些数据 ,作为该app的开发者,就没法对应用上传数据进行管理。为此OSS提供了上传回调方案。 原理介绍 上传回调的原理如下图所示: OSS在收到Android/iOS移动应用的数据(上图中步骤5)和在返回用户上传结果(上图中步骤6)之间,触发一个上传回调任务,即第上图中步骤5.5,先回调用户服务器,得到应用服务器返回的内容,然后将此内容返回给Android/iOS移动应用。详情请参见Callback API文档。 上传回调的作用 通过上传回调让用户应用服务器知道当前上传文件的基本信息。 返回的基本信息可以包含下表中一个或多个变量,返回内容的格式在Android/iOS上传时指定。 系统变量 含义 bucket 移动应用上传文件到OSS的哪个存储空间 object 移动应用上传文件到OSS后保存的文件名 etag 该上传的文件的ETag,即返回给用户的etag字段 size 上传文件的大小 mimeType 资源类型 imageInfo.height 图片高度 imageInfo.width 图片宽度 imageInfo.format 图片格式,如jpg、png等 通过上传回调设定自定义参数,达到信息传递的目的。 假如您是一个开发者,您想知道当前用户所使用的app版本、当前用户所在的操作系统版本、用户的GPS信息、用户的手机型号。您可以在Android/iOS端上传文件时,指定自定义参数,如下所示: x:version:指定APP版本 x:system:指定操作系统版本 x:gps:指定GPS信息 x:phone:指定手机型号 Android/iOS移动应用上传文件到OSS时附带上述参数,然后OSS把这些参数放到CallbackBody里发给应用服务器。这样应用服务器就能收到这些信息,达到信息传递的目的。 上传回调对应用服务器的要求 您必须部署一个可以接收POST请求的服务,这个服务必须有公网地址,如www.abc.com/callback.php,或者外网IP地址。 您必须给OSS正确的返回,返回格式必须是JSON格式,内容自定义。OSS会把应用服务器返回的内容,原封不动地返回给Android/iOS移动应用。详情请参见Callback API文档。注意 在移动应用端设置上传回调 要让OSS在接收上传请求时触发上传回调,移动应用在构造上传请求时必须把如下内容指定到上传请求里面: 要回调到哪个服务器(callbackUrl),如 http://abc.com/callback.php,这个地址必须是公网能够访问的。 上传回调给应用服务器的内容(callbackBody),可以是上述OSS返回应用服务器系统变量的一个或者多个。 假如您的用户服务器上传回调地址是http://abc.com/callback.php。您想获取手机上传的文件名称、文件的大小,并且定义了x:phone变量是指手机型号,x:system变量是指操作系统版本。 上传回调示例分以下两种: iOS指定上传回调示例:OSSPutObjectRequest * request = [OSSPutObjectRequest new]; request.bucketName = @"<bucketName>"; request.objectKey = @"<objectKey>"; request.uploadingFileURL = [NSURL fileURLWithPath:@<filepath>"]; // 设置回调参数 request.callbackParam = @{ @"callbackUrl": @"http://abc.com/callback.php", @"callbackBody": @"filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}" }; // 设置自定义变量 request.callbackVar = @{ @"x:phone": @"iphone6s", @"x:system": @"ios9.1" }; Android指定上传回调示例:PutObjectRequest put = new PutObjectRequest(testBucket, testObject, uploadFilePath); ObjectMetadata metadata = new ObjectMetadata(); metadata.setContentType("application/octet-stream"); put.setMetadata(metadata); put.setCallbackParam(new HashMap<String, String>() { { put("callbackUrl", "http://abc.com/callback.php"); put("callbackBody", "filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}"); } }); put.setCallbackVars(new HashMap<String, String>() { { put("x:phone", "IPOHE6S"); put("x:system", "YunOS5.0"); } }); 应用服务器收到的回调请求 根据设定的不同URL和回调内容,应用服务器收到的回调请求会所不同,示例如下: POST /index.html HTTP/1.0 Host: 121.43.113.8 Connection: close Content-Length: 81 Content-Type: application/x-www-form-urlencoded User-Agent: ehttp-client/0.0.1 authorization: kKQeGTRccDKyHB3H9vF+xYMSrmhMZjzzl2/kdD1ktNVgbWEfYTQG0G2SU/RaHBovRCE8OkQDjC3uG33esH2txA== x-oss-pub-key-url: aHR0cDovL2dvc3NwdWJsaWMuYWxpY2RuLmNvbS9jYWxsYmFja19wdWJfa2V5X3YxLnBlbQ== filename=test.txt&size=5&photo=iphone6s&system=ios9.1 更多内容请参见Callback API文档。 应用服务器判断回调请求是否来自OSS 如果您的回调服务器被人恶意攻击了,例如恶意回调您的应用服务器,导致应用服务器收到一些非法的请求,影响正常逻辑,此时您就需要判断回调请求是否来自OSS。 判断的方法主要是根据OSS给应用服务器返回的头部内容中 x-oss-pub-key-url和authorization这两个参数进行RSA校验。只有通过RSA校验才能说明这个请求是来自OSS。本文提供的示例程序有实现的示例供您参考。 应用服务器收到回调请求后的处理 应用服务器在校验这个请求是来自OSS后,指定回调给应用服务器的内容格式,如 filename=test.txt&size=5&photo=iphone6s&system=ios9.1 应用服务器就可以根据OSS的返回内容,解析得到自己想要的数据。得到这个数据后,应用服务器可以把数据存放起来,方便后续管理。 OSS如何处理应用服务器的返回内容 有两种情况: OSS将回调请求发送给应用服务器,但是应用服务器接收失败或者访问不通,OSS会返回给Android/iOS移动应用203的状态码,但是数据已经存放到OSS上了。 应用服务器接收到OSS的回调请求,并且正确返回了,OSS会返回给Android/iOS移动应用状态码200, 并把应用服务器返回给OSS的内容原封不动地返回给Android/iOS移动应用。 示例程序下载 示例程序只是完成了如何检查应用服务器收到的签名, 您需要自行增加对应用服务器收到回调内容的格式解析 。 Java: 下载地址:单击这里。 运行方法:解压后运行java -jar oss-callback-server-demo.jar 9000。9000是运行的端口,可以自己指定。 说明 这个jar例子在java 1.7运行通过,如果有问题可以自己依据提供的代码进行修改。这是一个maven项目。 PHP: 下载地址:单击这里 运行方法:将解压包部署到Apache环境下,因为PHP本身语言的特点,某些数据头部的获取会依赖于环境。请参考例子根据实际环境进行修改。 Python: 下载地址:单击这里。 运行方法:解压后直接运行python callback_app_server.py即可,程序自实现了一个简单的http server,运行该程序可能需要安装rsa的依赖。 Ruby版本: 下载地址:单击这里。 运行方法: ruby aliyun_oss_callback_server.rb。

2019-12-01 23:13:24 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 本文讲解如何搭建一个基于OSS的移动应用数据直传服务并设置上传回调。 背景 快速搭建移动应用直传服务介绍了如何快速搭建一个基于OSS的移动应用数据直传服务。但这一方案有个问题:对于Android/iOS移动应用来说,只需要申请一次STS凭证,就能多次使用该STS凭证上传数据到OSS。这就导致应用服务器无法得知用户上传了哪些数据 ,作为该app的开发者,就没法对应用上传数据进行管理。为此OSS提供了上传回调方案。 原理介绍 上传回调的原理如下图所示: OSS在收到Android/iOS移动应用的数据(上图中步骤5)和在返回用户上传结果(上图中步骤6)之间,触发一个上传回调任务,即第上图中步骤5.5,先回调用户服务器,得到应用服务器返回的内容,然后将此内容返回给Android/iOS移动应用。详情请参见Callback API文档。 上传回调的作用 通过上传回调让用户应用服务器知道当前上传文件的基本信息。 返回的基本信息可以包含下表中一个或多个变量,返回内容的格式在Android/iOS上传时指定。 系统变量 含义 bucket 移动应用上传文件到OSS的哪个存储空间 object 移动应用上传文件到OSS后保存的文件名 etag 该上传的文件的ETag,即返回给用户的etag字段 size 上传文件的大小 mimeType 资源类型 imageInfo.height 图片高度 imageInfo.width 图片宽度 imageInfo.format 图片格式,如jpg、png等 通过上传回调设定自定义参数,达到信息传递的目的。 假如您是一个开发者,您想知道当前用户所使用的app版本、当前用户所在的操作系统版本、用户的GPS信息、用户的手机型号。您可以在Android/iOS端上传文件时,指定自定义参数,如下所示: x:version:指定APP版本 x:system:指定操作系统版本 x:gps:指定GPS信息 x:phone:指定手机型号 Android/iOS移动应用上传文件到OSS时附带上述参数,然后OSS把这些参数放到CallbackBody里发给应用服务器。这样应用服务器就能收到这些信息,达到信息传递的目的。 上传回调对应用服务器的要求 您必须部署一个可以接收POST请求的服务,这个服务必须有公网地址,如www.abc.com/callback.php,或者外网IP地址。 您必须给OSS正确的返回,返回格式必须是JSON格式,内容自定义。OSS会把应用服务器返回的内容,原封不动地返回给Android/iOS移动应用。详情请参见Callback API文档。注意 在移动应用端设置上传回调 要让OSS在接收上传请求时触发上传回调,移动应用在构造上传请求时必须把如下内容指定到上传请求里面: 要回调到哪个服务器(callbackUrl),如 http://abc.com/callback.php,这个地址必须是公网能够访问的。 上传回调给应用服务器的内容(callbackBody),可以是上述OSS返回应用服务器系统变量的一个或者多个。 假如您的用户服务器上传回调地址是http://abc.com/callback.php。您想获取手机上传的文件名称、文件的大小,并且定义了x:phone变量是指手机型号,x:system变量是指操作系统版本。 上传回调示例分以下两种: iOS指定上传回调示例:OSSPutObjectRequest * request = [OSSPutObjectRequest new]; request.bucketName = @"<bucketName>"; request.objectKey = @"<objectKey>"; request.uploadingFileURL = [NSURL fileURLWithPath:@<filepath>"]; // 设置回调参数 request.callbackParam = @{ @"callbackUrl": @"http://abc.com/callback.php", @"callbackBody": @"filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}" }; // 设置自定义变量 request.callbackVar = @{ @"x:phone": @"iphone6s", @"x:system": @"ios9.1" }; Android指定上传回调示例:PutObjectRequest put = new PutObjectRequest(testBucket, testObject, uploadFilePath); ObjectMetadata metadata = new ObjectMetadata(); metadata.setContentType("application/octet-stream"); put.setMetadata(metadata); put.setCallbackParam(new HashMap<String, String>() { { put("callbackUrl", "http://abc.com/callback.php"); put("callbackBody", "filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}"); } }); put.setCallbackVars(new HashMap<String, String>() { { put("x:phone", "IPOHE6S"); put("x:system", "YunOS5.0"); } }); 应用服务器收到的回调请求 根据设定的不同URL和回调内容,应用服务器收到的回调请求会所不同,示例如下: POST /index.html HTTP/1.0 Host: 121.43.113.8 Connection: close Content-Length: 81 Content-Type: application/x-www-form-urlencoded User-Agent: ehttp-client/0.0.1 authorization: kKQeGTRccDKyHB3H9vF+xYMSrmhMZjzzl2/kdD1ktNVgbWEfYTQG0G2SU/RaHBovRCE8OkQDjC3uG33esH2txA== x-oss-pub-key-url: aHR0cDovL2dvc3NwdWJsaWMuYWxpY2RuLmNvbS9jYWxsYmFja19wdWJfa2V5X3YxLnBlbQ== filename=test.txt&size=5&photo=iphone6s&system=ios9.1 更多内容请参见Callback API文档。 应用服务器判断回调请求是否来自OSS 如果您的回调服务器被人恶意攻击了,例如恶意回调您的应用服务器,导致应用服务器收到一些非法的请求,影响正常逻辑,此时您就需要判断回调请求是否来自OSS。 判断的方法主要是根据OSS给应用服务器返回的头部内容中 x-oss-pub-key-url和authorization这两个参数进行RSA校验。只有通过RSA校验才能说明这个请求是来自OSS。本文提供的示例程序有实现的示例供您参考。 应用服务器收到回调请求后的处理 应用服务器在校验这个请求是来自OSS后,指定回调给应用服务器的内容格式,如 filename=test.txt&size=5&photo=iphone6s&system=ios9.1 应用服务器就可以根据OSS的返回内容,解析得到自己想要的数据。得到这个数据后,应用服务器可以把数据存放起来,方便后续管理。 OSS如何处理应用服务器的返回内容 有两种情况: OSS将回调请求发送给应用服务器,但是应用服务器接收失败或者访问不通,OSS会返回给Android/iOS移动应用203的状态码,但是数据已经存放到OSS上了。 应用服务器接收到OSS的回调请求,并且正确返回了,OSS会返回给Android/iOS移动应用状态码200, 并把应用服务器返回给OSS的内容原封不动地返回给Android/iOS移动应用。 示例程序下载 示例程序只是完成了如何检查应用服务器收到的签名, 您需要自行增加对应用服务器收到回调内容的格式解析 。 Java: 下载地址:单击这里。 运行方法:解压后运行java -jar oss-callback-server-demo.jar 9000。9000是运行的端口,可以自己指定。 说明 这个jar例子在java 1.7运行通过,如果有问题可以自己依据提供的代码进行修改。这是一个maven项目。 PHP: 下载地址:单击这里 运行方法:将解压包部署到Apache环境下,因为PHP本身语言的特点,某些数据头部的获取会依赖于环境。请参考例子根据实际环境进行修改。 Python: 下载地址:单击这里。 运行方法:解压后直接运行python callback_app_server.py即可,程序自实现了一个简单的http server,运行该程序可能需要安装rsa的依赖。 Ruby版本: 下载地址:单击这里。 运行方法: ruby aliyun_oss_callback_server.rb。

2019-12-01 23:13:23 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 本文讲解如何搭建一个基于OSS的移动应用数据直传服务并设置上传回调。 背景 快速搭建移动应用直传服务介绍了如何快速搭建一个基于OSS的移动应用数据直传服务。但这一方案有个问题:对于Android/iOS移动应用来说,只需要申请一次STS凭证,就能多次使用该STS凭证上传数据到OSS。这就导致应用服务器无法得知用户上传了哪些数据 ,作为该app的开发者,就没法对应用上传数据进行管理。为此OSS提供了上传回调方案。 原理介绍 上传回调的原理如下图所示: OSS在收到Android/iOS移动应用的数据(上图中步骤5)和在返回用户上传结果(上图中步骤6)之间,触发一个上传回调任务,即第上图中步骤5.5,先回调用户服务器,得到应用服务器返回的内容,然后将此内容返回给Android/iOS移动应用。详情请参见Callback API文档。 上传回调的作用 通过上传回调让用户应用服务器知道当前上传文件的基本信息。 返回的基本信息可以包含下表中一个或多个变量,返回内容的格式在Android/iOS上传时指定。 系统变量 含义 bucket 移动应用上传文件到OSS的哪个存储空间 object 移动应用上传文件到OSS后保存的文件名 etag 该上传的文件的ETag,即返回给用户的etag字段 size 上传文件的大小 mimeType 资源类型 imageInfo.height 图片高度 imageInfo.width 图片宽度 imageInfo.format 图片格式,如jpg、png等 通过上传回调设定自定义参数,达到信息传递的目的。 假如您是一个开发者,您想知道当前用户所使用的app版本、当前用户所在的操作系统版本、用户的GPS信息、用户的手机型号。您可以在Android/iOS端上传文件时,指定自定义参数,如下所示: x:version:指定APP版本 x:system:指定操作系统版本 x:gps:指定GPS信息 x:phone:指定手机型号 Android/iOS移动应用上传文件到OSS时附带上述参数,然后OSS把这些参数放到CallbackBody里发给应用服务器。这样应用服务器就能收到这些信息,达到信息传递的目的。 上传回调对应用服务器的要求 您必须部署一个可以接收POST请求的服务,这个服务必须有公网地址,如www.abc.com/callback.php,或者外网IP地址。 您必须给OSS正确的返回,返回格式必须是JSON格式,内容自定义。OSS会把应用服务器返回的内容,原封不动地返回给Android/iOS移动应用。详情请参见Callback API文档。注意 在移动应用端设置上传回调 要让OSS在接收上传请求时触发上传回调,移动应用在构造上传请求时必须把如下内容指定到上传请求里面: 要回调到哪个服务器(callbackUrl),如 http://abc.com/callback.php,这个地址必须是公网能够访问的。 上传回调给应用服务器的内容(callbackBody),可以是上述OSS返回应用服务器系统变量的一个或者多个。 假如您的用户服务器上传回调地址是http://abc.com/callback.php。您想获取手机上传的文件名称、文件的大小,并且定义了x:phone变量是指手机型号,x:system变量是指操作系统版本。 上传回调示例分以下两种: iOS指定上传回调示例:OSSPutObjectRequest * request = [OSSPutObjectRequest new]; request.bucketName = @"<bucketName>"; request.objectKey = @"<objectKey>"; request.uploadingFileURL = [NSURL fileURLWithPath:@<filepath>"]; // 设置回调参数 request.callbackParam = @{ @"callbackUrl": @"http://abc.com/callback.php", @"callbackBody": @"filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}" }; // 设置自定义变量 request.callbackVar = @{ @"x:phone": @"iphone6s", @"x:system": @"ios9.1" }; Android指定上传回调示例:PutObjectRequest put = new PutObjectRequest(testBucket, testObject, uploadFilePath); ObjectMetadata metadata = new ObjectMetadata(); metadata.setContentType("application/octet-stream"); put.setMetadata(metadata); put.setCallbackParam(new HashMap<String, String>() { { put("callbackUrl", "http://abc.com/callback.php"); put("callbackBody", "filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}"); } }); put.setCallbackVars(new HashMap<String, String>() { { put("x:phone", "IPOHE6S"); put("x:system", "YunOS5.0"); } }); 应用服务器收到的回调请求 根据设定的不同URL和回调内容,应用服务器收到的回调请求会所不同,示例如下: POST /index.html HTTP/1.0 Host: 121.43.113.8 Connection: close Content-Length: 81 Content-Type: application/x-www-form-urlencoded User-Agent: ehttp-client/0.0.1 authorization: kKQeGTRccDKyHB3H9vF+xYMSrmhMZjzzl2/kdD1ktNVgbWEfYTQG0G2SU/RaHBovRCE8OkQDjC3uG33esH2txA== x-oss-pub-key-url: aHR0cDovL2dvc3NwdWJsaWMuYWxpY2RuLmNvbS9jYWxsYmFja19wdWJfa2V5X3YxLnBlbQ== filename=test.txt&size=5&photo=iphone6s&system=ios9.1 更多内容请参见Callback API文档。 应用服务器判断回调请求是否来自OSS 如果您的回调服务器被人恶意攻击了,例如恶意回调您的应用服务器,导致应用服务器收到一些非法的请求,影响正常逻辑,此时您就需要判断回调请求是否来自OSS。 判断的方法主要是根据OSS给应用服务器返回的头部内容中 x-oss-pub-key-url和authorization这两个参数进行RSA校验。只有通过RSA校验才能说明这个请求是来自OSS。本文提供的示例程序有实现的示例供您参考。 应用服务器收到回调请求后的处理 应用服务器在校验这个请求是来自OSS后,指定回调给应用服务器的内容格式,如 filename=test.txt&size=5&photo=iphone6s&system=ios9.1 应用服务器就可以根据OSS的返回内容,解析得到自己想要的数据。得到这个数据后,应用服务器可以把数据存放起来,方便后续管理。 OSS如何处理应用服务器的返回内容 有两种情况: OSS将回调请求发送给应用服务器,但是应用服务器接收失败或者访问不通,OSS会返回给Android/iOS移动应用203的状态码,但是数据已经存放到OSS上了。 应用服务器接收到OSS的回调请求,并且正确返回了,OSS会返回给Android/iOS移动应用状态码200, 并把应用服务器返回给OSS的内容原封不动地返回给Android/iOS移动应用。 示例程序下载 示例程序只是完成了如何检查应用服务器收到的签名, 您需要自行增加对应用服务器收到回调内容的格式解析 。 Java: 下载地址:单击这里。 运行方法:解压后运行java -jar oss-callback-server-demo.jar 9000。9000是运行的端口,可以自己指定。 说明 这个jar例子在java 1.7运行通过,如果有问题可以自己依据提供的代码进行修改。这是一个maven项目。 PHP: 下载地址:单击这里 运行方法:将解压包部署到Apache环境下,因为PHP本身语言的特点,某些数据头部的获取会依赖于环境。请参考例子根据实际环境进行修改。 Python: 下载地址:单击这里。 运行方法:解压后直接运行python callback_app_server.py即可,程序自实现了一个简单的http server,运行该程序可能需要安装rsa的依赖。 Ruby版本: 下载地址:单击这里。 运行方法: ruby aliyun_oss_callback_server.rb。

2019-12-01 23:13:23 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 本文讲解如何搭建一个基于OSS的移动应用数据直传服务并设置上传回调。 背景 快速搭建移动应用直传服务介绍了如何快速搭建一个基于OSS的移动应用数据直传服务。但这一方案有个问题:对于Android/iOS移动应用来说,只需要申请一次STS凭证,就能多次使用该STS凭证上传数据到OSS。这就导致应用服务器无法得知用户上传了哪些数据 ,作为该app的开发者,就没法对应用上传数据进行管理。为此OSS提供了上传回调方案。 原理介绍 上传回调的原理如下图所示: OSS在收到Android/iOS移动应用的数据(上图中步骤5)和在返回用户上传结果(上图中步骤6)之间,触发一个上传回调任务,即第上图中步骤5.5,先回调用户服务器,得到应用服务器返回的内容,然后将此内容返回给Android/iOS移动应用。详情请参见Callback API文档。 上传回调的作用 通过上传回调让用户应用服务器知道当前上传文件的基本信息。 返回的基本信息可以包含下表中一个或多个变量,返回内容的格式在Android/iOS上传时指定。 系统变量 含义 bucket 移动应用上传文件到OSS的哪个存储空间 object 移动应用上传文件到OSS后保存的文件名 etag 该上传的文件的ETag,即返回给用户的etag字段 size 上传文件的大小 mimeType 资源类型 imageInfo.height 图片高度 imageInfo.width 图片宽度 imageInfo.format 图片格式,如jpg、png等 通过上传回调设定自定义参数,达到信息传递的目的。 假如您是一个开发者,您想知道当前用户所使用的app版本、当前用户所在的操作系统版本、用户的GPS信息、用户的手机型号。您可以在Android/iOS端上传文件时,指定自定义参数,如下所示: x:version:指定APP版本 x:system:指定操作系统版本 x:gps:指定GPS信息 x:phone:指定手机型号 Android/iOS移动应用上传文件到OSS时附带上述参数,然后OSS把这些参数放到CallbackBody里发给应用服务器。这样应用服务器就能收到这些信息,达到信息传递的目的。 上传回调对应用服务器的要求 您必须部署一个可以接收POST请求的服务,这个服务必须有公网地址,如www.abc.com/callback.php,或者外网IP地址。 您必须给OSS正确的返回,返回格式必须是JSON格式,内容自定义。OSS会把应用服务器返回的内容,原封不动地返回给Android/iOS移动应用。详情请参见Callback API文档。注意 在移动应用端设置上传回调 要让OSS在接收上传请求时触发上传回调,移动应用在构造上传请求时必须把如下内容指定到上传请求里面: 要回调到哪个服务器(callbackUrl),如 http://abc.com/callback.php,这个地址必须是公网能够访问的。 上传回调给应用服务器的内容(callbackBody),可以是上述OSS返回应用服务器系统变量的一个或者多个。 假如您的用户服务器上传回调地址是http://abc.com/callback.php。您想获取手机上传的文件名称、文件的大小,并且定义了x:phone变量是指手机型号,x:system变量是指操作系统版本。 上传回调示例分以下两种: iOS指定上传回调示例:OSSPutObjectRequest * request = [OSSPutObjectRequest new]; request.bucketName = @"<bucketName>"; request.objectKey = @"<objectKey>"; request.uploadingFileURL = [NSURL fileURLWithPath:@<filepath>"]; // 设置回调参数 request.callbackParam = @{ @"callbackUrl": @"http://abc.com/callback.php", @"callbackBody": @"filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}" }; // 设置自定义变量 request.callbackVar = @{ @"x:phone": @"iphone6s", @"x:system": @"ios9.1" }; Android指定上传回调示例:PutObjectRequest put = new PutObjectRequest(testBucket, testObject, uploadFilePath); ObjectMetadata metadata = new ObjectMetadata(); metadata.setContentType("application/octet-stream"); put.setMetadata(metadata); put.setCallbackParam(new HashMap<String, String>() { { put("callbackUrl", "http://abc.com/callback.php"); put("callbackBody", "filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}"); } }); put.setCallbackVars(new HashMap<String, String>() { { put("x:phone", "IPOHE6S"); put("x:system", "YunOS5.0"); } }); 应用服务器收到的回调请求 根据设定的不同URL和回调内容,应用服务器收到的回调请求会所不同,示例如下: POST /index.html HTTP/1.0 Host: 121.43.113.8 Connection: close Content-Length: 81 Content-Type: application/x-www-form-urlencoded User-Agent: ehttp-client/0.0.1 authorization: kKQeGTRccDKyHB3H9vF+xYMSrmhMZjzzl2/kdD1ktNVgbWEfYTQG0G2SU/RaHBovRCE8OkQDjC3uG33esH2txA== x-oss-pub-key-url: aHR0cDovL2dvc3NwdWJsaWMuYWxpY2RuLmNvbS9jYWxsYmFja19wdWJfa2V5X3YxLnBlbQ== filename=test.txt&size=5&photo=iphone6s&system=ios9.1 更多内容请参见Callback API文档。 应用服务器判断回调请求是否来自OSS 如果您的回调服务器被人恶意攻击了,例如恶意回调您的应用服务器,导致应用服务器收到一些非法的请求,影响正常逻辑,此时您就需要判断回调请求是否来自OSS。 判断的方法主要是根据OSS给应用服务器返回的头部内容中 x-oss-pub-key-url和authorization这两个参数进行RSA校验。只有通过RSA校验才能说明这个请求是来自OSS。本文提供的示例程序有实现的示例供您参考。 应用服务器收到回调请求后的处理 应用服务器在校验这个请求是来自OSS后,指定回调给应用服务器的内容格式,如 filename=test.txt&size=5&photo=iphone6s&system=ios9.1 应用服务器就可以根据OSS的返回内容,解析得到自己想要的数据。得到这个数据后,应用服务器可以把数据存放起来,方便后续管理。 OSS如何处理应用服务器的返回内容 有两种情况: OSS将回调请求发送给应用服务器,但是应用服务器接收失败或者访问不通,OSS会返回给Android/iOS移动应用203的状态码,但是数据已经存放到OSS上了。 应用服务器接收到OSS的回调请求,并且正确返回了,OSS会返回给Android/iOS移动应用状态码200, 并把应用服务器返回给OSS的内容原封不动地返回给Android/iOS移动应用。 示例程序下载 示例程序只是完成了如何检查应用服务器收到的签名, 您需要自行增加对应用服务器收到回调内容的格式解析 。 Java: 下载地址:单击这里。 运行方法:解压后运行java -jar oss-callback-server-demo.jar 9000。9000是运行的端口,可以自己指定。 说明 这个jar例子在java 1.7运行通过,如果有问题可以自己依据提供的代码进行修改。这是一个maven项目。 PHP: 下载地址:单击这里 运行方法:将解压包部署到Apache环境下,因为PHP本身语言的特点,某些数据头部的获取会依赖于环境。请参考例子根据实际环境进行修改。 Python: 下载地址:单击这里。 运行方法:解压后直接运行python callback_app_server.py即可,程序自实现了一个简单的http server,运行该程序可能需要安装rsa的依赖。 Ruby版本: 下载地址:单击这里。 运行方法: ruby aliyun_oss_callback_server.rb。

2019-12-01 23:13:24 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 本文讲解如何搭建一个基于OSS的移动应用数据直传服务并设置上传回调。 背景 快速搭建移动应用直传服务介绍了如何快速搭建一个基于OSS的移动应用数据直传服务。但这一方案有个问题:对于Android/iOS移动应用来说,只需要申请一次STS凭证,就能多次使用该STS凭证上传数据到OSS。这就导致应用服务器无法得知用户上传了哪些数据 ,作为该app的开发者,就没法对应用上传数据进行管理。为此OSS提供了上传回调方案。 原理介绍 上传回调的原理如下图所示: OSS在收到Android/iOS移动应用的数据(上图中步骤5)和在返回用户上传结果(上图中步骤6)之间,触发一个上传回调任务,即第上图中步骤5.5,先回调用户服务器,得到应用服务器返回的内容,然后将此内容返回给Android/iOS移动应用。详情请参见Callback API文档。 上传回调的作用 通过上传回调让用户应用服务器知道当前上传文件的基本信息。 返回的基本信息可以包含下表中一个或多个变量,返回内容的格式在Android/iOS上传时指定。 系统变量 含义 bucket 移动应用上传文件到OSS的哪个存储空间 object 移动应用上传文件到OSS后保存的文件名 etag 该上传的文件的ETag,即返回给用户的etag字段 size 上传文件的大小 mimeType 资源类型 imageInfo.height 图片高度 imageInfo.width 图片宽度 imageInfo.format 图片格式,如jpg、png等 通过上传回调设定自定义参数,达到信息传递的目的。 假如您是一个开发者,您想知道当前用户所使用的app版本、当前用户所在的操作系统版本、用户的GPS信息、用户的手机型号。您可以在Android/iOS端上传文件时,指定自定义参数,如下所示: x:version:指定APP版本 x:system:指定操作系统版本 x:gps:指定GPS信息 x:phone:指定手机型号 Android/iOS移动应用上传文件到OSS时附带上述参数,然后OSS把这些参数放到CallbackBody里发给应用服务器。这样应用服务器就能收到这些信息,达到信息传递的目的。 上传回调对应用服务器的要求 您必须部署一个可以接收POST请求的服务,这个服务必须有公网地址,如www.abc.com/callback.php,或者外网IP地址。 您必须给OSS正确的返回,返回格式必须是JSON格式,内容自定义。OSS会把应用服务器返回的内容,原封不动地返回给Android/iOS移动应用。详情请参见Callback API文档。注意 在移动应用端设置上传回调 要让OSS在接收上传请求时触发上传回调,移动应用在构造上传请求时必须把如下内容指定到上传请求里面: 要回调到哪个服务器(callbackUrl),如 http://abc.com/callback.php,这个地址必须是公网能够访问的。 上传回调给应用服务器的内容(callbackBody),可以是上述OSS返回应用服务器系统变量的一个或者多个。 假如您的用户服务器上传回调地址是http://abc.com/callback.php。您想获取手机上传的文件名称、文件的大小,并且定义了x:phone变量是指手机型号,x:system变量是指操作系统版本。 上传回调示例分以下两种: iOS指定上传回调示例:OSSPutObjectRequest * request = [OSSPutObjectRequest new]; request.bucketName = @"<bucketName>"; request.objectKey = @"<objectKey>"; request.uploadingFileURL = [NSURL fileURLWithPath:@<filepath>"]; // 设置回调参数 request.callbackParam = @{ @"callbackUrl": @"http://abc.com/callback.php", @"callbackBody": @"filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}" }; // 设置自定义变量 request.callbackVar = @{ @"x:phone": @"iphone6s", @"x:system": @"ios9.1" }; Android指定上传回调示例:PutObjectRequest put = new PutObjectRequest(testBucket, testObject, uploadFilePath); ObjectMetadata metadata = new ObjectMetadata(); metadata.setContentType("application/octet-stream"); put.setMetadata(metadata); put.setCallbackParam(new HashMap<String, String>() { { put("callbackUrl", "http://abc.com/callback.php"); put("callbackBody", "filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}"); } }); put.setCallbackVars(new HashMap<String, String>() { { put("x:phone", "IPOHE6S"); put("x:system", "YunOS5.0"); } }); 应用服务器收到的回调请求 根据设定的不同URL和回调内容,应用服务器收到的回调请求会所不同,示例如下: POST /index.html HTTP/1.0 Host: 121.43.113.8 Connection: close Content-Length: 81 Content-Type: application/x-www-form-urlencoded User-Agent: ehttp-client/0.0.1 authorization: kKQeGTRccDKyHB3H9vF+xYMSrmhMZjzzl2/kdD1ktNVgbWEfYTQG0G2SU/RaHBovRCE8OkQDjC3uG33esH2txA== x-oss-pub-key-url: aHR0cDovL2dvc3NwdWJsaWMuYWxpY2RuLmNvbS9jYWxsYmFja19wdWJfa2V5X3YxLnBlbQ== filename=test.txt&size=5&photo=iphone6s&system=ios9.1 更多内容请参见Callback API文档。 应用服务器判断回调请求是否来自OSS 如果您的回调服务器被人恶意攻击了,例如恶意回调您的应用服务器,导致应用服务器收到一些非法的请求,影响正常逻辑,此时您就需要判断回调请求是否来自OSS。 判断的方法主要是根据OSS给应用服务器返回的头部内容中 x-oss-pub-key-url和authorization这两个参数进行RSA校验。只有通过RSA校验才能说明这个请求是来自OSS。本文提供的示例程序有实现的示例供您参考。 应用服务器收到回调请求后的处理 应用服务器在校验这个请求是来自OSS后,指定回调给应用服务器的内容格式,如 filename=test.txt&size=5&photo=iphone6s&system=ios9.1 应用服务器就可以根据OSS的返回内容,解析得到自己想要的数据。得到这个数据后,应用服务器可以把数据存放起来,方便后续管理。 OSS如何处理应用服务器的返回内容 有两种情况: OSS将回调请求发送给应用服务器,但是应用服务器接收失败或者访问不通,OSS会返回给Android/iOS移动应用203的状态码,但是数据已经存放到OSS上了。 应用服务器接收到OSS的回调请求,并且正确返回了,OSS会返回给Android/iOS移动应用状态码200, 并把应用服务器返回给OSS的内容原封不动地返回给Android/iOS移动应用。 示例程序下载 示例程序只是完成了如何检查应用服务器收到的签名, 您需要自行增加对应用服务器收到回调内容的格式解析 。 Java: 下载地址:单击这里。 运行方法:解压后运行java -jar oss-callback-server-demo.jar 9000。9000是运行的端口,可以自己指定。 说明 这个jar例子在java 1.7运行通过,如果有问题可以自己依据提供的代码进行修改。这是一个maven项目。 PHP: 下载地址:单击这里 运行方法:将解压包部署到Apache环境下,因为PHP本身语言的特点,某些数据头部的获取会依赖于环境。请参考例子根据实际环境进行修改。 Python: 下载地址:单击这里。 运行方法:解压后直接运行python callback_app_server.py即可,程序自实现了一个简单的http server,运行该程序可能需要安装rsa的依赖。 Ruby版本: 下载地址:单击这里。 运行方法: ruby aliyun_oss_callback_server.rb。

2019-12-01 23:13:22 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 本文讲解如何搭建一个基于OSS的移动应用数据直传服务并设置上传回调。 背景 快速搭建移动应用直传服务介绍了如何快速搭建一个基于OSS的移动应用数据直传服务。但这一方案有个问题:对于Android/iOS移动应用来说,只需要申请一次STS凭证,就能多次使用该STS凭证上传数据到OSS。这就导致应用服务器无法得知用户上传了哪些数据 ,作为该app的开发者,就没法对应用上传数据进行管理。为此OSS提供了上传回调方案。 原理介绍 上传回调的原理如下图所示: OSS在收到Android/iOS移动应用的数据(上图中步骤5)和在返回用户上传结果(上图中步骤6)之间,触发一个上传回调任务,即第上图中步骤5.5,先回调用户服务器,得到应用服务器返回的内容,然后将此内容返回给Android/iOS移动应用。详情请参见Callback API文档。 上传回调的作用 通过上传回调让用户应用服务器知道当前上传文件的基本信息。 返回的基本信息可以包含下表中一个或多个变量,返回内容的格式在Android/iOS上传时指定。 系统变量 含义 bucket 移动应用上传文件到OSS的哪个存储空间 object 移动应用上传文件到OSS后保存的文件名 etag 该上传的文件的ETag,即返回给用户的etag字段 size 上传文件的大小 mimeType 资源类型 imageInfo.height 图片高度 imageInfo.width 图片宽度 imageInfo.format 图片格式,如jpg、png等 通过上传回调设定自定义参数,达到信息传递的目的。 假如您是一个开发者,您想知道当前用户所使用的app版本、当前用户所在的操作系统版本、用户的GPS信息、用户的手机型号。您可以在Android/iOS端上传文件时,指定自定义参数,如下所示: x:version:指定APP版本 x:system:指定操作系统版本 x:gps:指定GPS信息 x:phone:指定手机型号 Android/iOS移动应用上传文件到OSS时附带上述参数,然后OSS把这些参数放到CallbackBody里发给应用服务器。这样应用服务器就能收到这些信息,达到信息传递的目的。 上传回调对应用服务器的要求 您必须部署一个可以接收POST请求的服务,这个服务必须有公网地址,如www.abc.com/callback.php,或者外网IP地址。 您必须给OSS正确的返回,返回格式必须是JSON格式,内容自定义。OSS会把应用服务器返回的内容,原封不动地返回给Android/iOS移动应用。详情请参见Callback API文档。注意 在移动应用端设置上传回调 要让OSS在接收上传请求时触发上传回调,移动应用在构造上传请求时必须把如下内容指定到上传请求里面: 要回调到哪个服务器(callbackUrl),如 http://abc.com/callback.php,这个地址必须是公网能够访问的。 上传回调给应用服务器的内容(callbackBody),可以是上述OSS返回应用服务器系统变量的一个或者多个。 假如您的用户服务器上传回调地址是http://abc.com/callback.php。您想获取手机上传的文件名称、文件的大小,并且定义了x:phone变量是指手机型号,x:system变量是指操作系统版本。 上传回调示例分以下两种: iOS指定上传回调示例:OSSPutObjectRequest * request = [OSSPutObjectRequest new]; request.bucketName = @"<bucketName>"; request.objectKey = @"<objectKey>"; request.uploadingFileURL = [NSURL fileURLWithPath:@<filepath>"]; // 设置回调参数 request.callbackParam = @{ @"callbackUrl": @"http://abc.com/callback.php", @"callbackBody": @"filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}" }; // 设置自定义变量 request.callbackVar = @{ @"x:phone": @"iphone6s", @"x:system": @"ios9.1" }; Android指定上传回调示例:PutObjectRequest put = new PutObjectRequest(testBucket, testObject, uploadFilePath); ObjectMetadata metadata = new ObjectMetadata(); metadata.setContentType("application/octet-stream"); put.setMetadata(metadata); put.setCallbackParam(new HashMap<String, String>() { { put("callbackUrl", "http://abc.com/callback.php"); put("callbackBody", "filename=${object}&size=${size}&photo=${x:photo}&system=${x:system}"); } }); put.setCallbackVars(new HashMap<String, String>() { { put("x:phone", "IPOHE6S"); put("x:system", "YunOS5.0"); } }); 应用服务器收到的回调请求 根据设定的不同URL和回调内容,应用服务器收到的回调请求会所不同,示例如下: POST /index.html HTTP/1.0 Host: 121.43.113.8 Connection: close Content-Length: 81 Content-Type: application/x-www-form-urlencoded User-Agent: ehttp-client/0.0.1 authorization: kKQeGTRccDKyHB3H9vF+xYMSrmhMZjzzl2/kdD1ktNVgbWEfYTQG0G2SU/RaHBovRCE8OkQDjC3uG33esH2txA== x-oss-pub-key-url: aHR0cDovL2dvc3NwdWJsaWMuYWxpY2RuLmNvbS9jYWxsYmFja19wdWJfa2V5X3YxLnBlbQ== filename=test.txt&size=5&photo=iphone6s&system=ios9.1 更多内容请参见Callback API文档。 应用服务器判断回调请求是否来自OSS 如果您的回调服务器被人恶意攻击了,例如恶意回调您的应用服务器,导致应用服务器收到一些非法的请求,影响正常逻辑,此时您就需要判断回调请求是否来自OSS。 判断的方法主要是根据OSS给应用服务器返回的头部内容中 x-oss-pub-key-url和authorization这两个参数进行RSA校验。只有通过RSA校验才能说明这个请求是来自OSS。本文提供的示例程序有实现的示例供您参考。 应用服务器收到回调请求后的处理 应用服务器在校验这个请求是来自OSS后,指定回调给应用服务器的内容格式,如 filename=test.txt&size=5&photo=iphone6s&system=ios9.1 应用服务器就可以根据OSS的返回内容,解析得到自己想要的数据。得到这个数据后,应用服务器可以把数据存放起来,方便后续管理。 OSS如何处理应用服务器的返回内容 有两种情况: OSS将回调请求发送给应用服务器,但是应用服务器接收失败或者访问不通,OSS会返回给Android/iOS移动应用203的状态码,但是数据已经存放到OSS上了。 应用服务器接收到OSS的回调请求,并且正确返回了,OSS会返回给Android/iOS移动应用状态码200, 并把应用服务器返回给OSS的内容原封不动地返回给Android/iOS移动应用。 示例程序下载 示例程序只是完成了如何检查应用服务器收到的签名, 您需要自行增加对应用服务器收到回调内容的格式解析 。 Java: 下载地址:单击这里。 运行方法:解压后运行java -jar oss-callback-server-demo.jar 9000。9000是运行的端口,可以自己指定。 说明 这个jar例子在java 1.7运行通过,如果有问题可以自己依据提供的代码进行修改。这是一个maven项目。 PHP: 下载地址:单击这里 运行方法:将解压包部署到Apache环境下,因为PHP本身语言的特点,某些数据头部的获取会依赖于环境。请参考例子根据实际环境进行修改。 Python: 下载地址:单击这里。 运行方法:解压后直接运行python callback_app_server.py即可,程序自实现了一个简单的http server,运行该程序可能需要安装rsa的依赖。 Ruby版本: 下载地址:单击这里。 运行方法: ruby aliyun_oss_callback_server.rb。

2019-12-01 23:13:22 0 浏览量 回答数 0
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 企业信息查询 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站 阿里云双十一主会场 阿里云双十一新人会场 1024程序员加油包 阿里云双十一拼团会场 场景化解决方案 阿里云双十一直播大厅