346
阿里云
消息通知常见问题__FAQ_开发人员指南_消息服务-阿里云
- 强烈建议使用辅助开发工具进行调试,可确定是否是HttpEndpoint接收消息的逻辑有问题。使用辅助开发工具可分别针对鉴权逻辑以及处理消息的逻辑进行调试。
- 如果通过辅助开发工具确认HttpEndpoint可以正常接收推送请求,但仍然无法接收线上服务的推送消息,建议使用日志管理功能,能够获取消息服务接收发布的消息以及推送消息所有相关的日志,可通过日志查看消息服务的推送过程以及结果。也可通过加入MNS旺旺客户技术支持群(51222373),专业的技术人员会给您提供帮助。
如何确认推送请求中x-mns-signing-cert-url所标识的证书地址是MNS官方给出的?
- 确认这点后才能保证推送请求是MNS发出的。
- 目前MNS是将公钥证书放到OSS的固定Bucket(mnstest)中的,地址为:
https://mnstest.oss-cn-hangzhou.aliyuncs.com/x509_public_certificate.pem
,考虑到安全性,证书会定期更换,文件名也会发生变化,但一定还是放在Bucket(mnstest)中的。所以在判断证书地址的有效性时可通过前缀匹配的方式进行,即判断证书地址的前缀是否为:https://mnstest.oss-cn-hangzhou.aliyuncs.com/
即可。 - 将来可能会考虑将证书放到其他更安全的地方,届时会通知大家。
HttpEndpoint端验权时每次远程请求公钥证书会比较耗时,如果提高性能?
- 强烈建议根据公钥证书地址,按Key-Value的方式缓存证书,这样就可以从内存中直接获取证书。MNS的每个推送请求中都会携带公钥证书地址,如果证书更换,那对应的地址也会更新(文件名会更新,比如加上版本号),只要地址没有更新,就可以一直拿缓存的证书进行鉴权。所以在处理推送请求时,可以根据x-mns-signing-cert-url描述的地址从缓存中直接获取证书,获取不到再远程访问,并存到缓存中以便下次使用。
- 例:证书地址为:
https://mnstest.oss-cn-hangzhou.aliyuncs.com/x509_public_certificate.pem
,最简单的就可以使用如下方式缓存:typedef map<string, string> cache;
cache["x509_public_certificate.pem"] = "$content";
cache["x509_public_certificate.pem.version2"] = "$content2";
HttpEndpoint签名认证失败,如何调查?
这里列举遇到过的一些问题:
- 用户HttpEndpoint使用了某些HttpServer框架,对HttpHeader的Key进行了格式转化,导致用户在签名认证的时候拿到的MNS自定义的HttpHeader的Key已经发生了变化(注:MNS自定义的Header的Key是全小写的),最常见的是变成了首字母大写。针对这种情况,只需要在认证之前,将HttpHeader的Key全部转为小写就可以了。比如:
使用PHP编写HttpEndpoint时接收不到消息体,怎么玩?
确认下您的处理逻辑中,是否是直接使用 $POST 来获取HttpBody的,如果是的话,需要改成这种方式:
file_get_contents("php://input");
原因:最常见的$_POST[‘fieldname’]方法,只能接收Content-Type: application/x-www-form-urlencoded提交的数据,也就是表单POST过来的数据。而MNS推送请求中的Content-Type的类型仅支持:
text/xml;charset=utf-8
text/plain;charset=utf-8
application/json;charset=utf-8
file_get_contents(“php://input”)这种方法允许读取POST的原始数据,对于不同Content-Type的POST数据都可以使用,甚至对于未指定Type的,也可以用来获取原始数据。所以建议使用这种方法来处理推送请求。
最后更新:2016-11-23 17:16:08
上一篇:
常见问题__FAQ_开发人员指南_消息服务-阿里云
下一篇:
消息服务MNS和消息队列ONS产品对比__FAQ_开发人员指南_消息服务-阿里云
ECS上的自建数据库到RDS/MongoDB/PetaData/OceanBase的数据迁移__数据迁移_用户指南_数据传输-阿里云
公共请求头__API-Reference_日志服务-阿里云
SDK 下载__Java SDK_SDK参考_E-MapReduce-阿里云
营销邮件标准及相关规范__业务指导_产品使用问题_企业邮箱-阿里云
服务__系统管理_用户指南(Linux)_数据管理-阿里云
JavaSDK手册__SDK使用手册_邮件推送-阿里云
ECS云服务器自定义镜像FAQ
获取访问AK__快速入门_消息服务-阿里云
什么是MaxCompute__产品简介_大数据计算服务-阿里云
业务模型__性能测试技术体系_性能测试体系_性能测试-阿里云
相关内容
常见错误说明__附录_大数据计算服务-阿里云
发送短信接口__API使用手册_短信服务-阿里云
接口文档__Android_安全组件教程_移动安全-阿里云
运营商错误码(联通)__常见问题_短信服务-阿里云
设置短信模板__使用手册_短信服务-阿里云
OSS 权限问题及排查__常见错误及排除_最佳实践_对象存储 OSS-阿里云
消息通知__操作指南_批量计算-阿里云
设备端快速接入(MQTT)__快速开始_阿里云物联网套件-阿里云
查询API调用流量数据__API管理相关接口_API_API 网关-阿里云
使用STS访问__JavaScript-SDK_SDK 参考_对象存储 OSS-阿里云