Http Endpoint
描述
MNS 通过发送 POST 请求将 Notifications 推送到 Endpoint 端,Notifications 格式支持两种:XML 完整格式和 SIMPLIFIED 精简格式。XML 完整格式会在 Request Body 中包含推送消息的正文和消息的 Meta 信息;SIMPLIFIED 精简格式的 Request Body 即为用户的消息正文,不做任何改动,MessageId 会在 Request Header 中传递给用户。
Request 的构造由以下几个部分组成:
POST /notifications HTTP/1.1默认是 /notifications,如果订阅者在创建 Subscription 时指定的 Endpoint 包含 URI,会使用用户设置的 URI 替换 /notifications
无
参数名称 | 说明 | 备注 |
Authorization | 此次推送请求的签名 | XML 和 SIMPLIFIED格式下均有 |
x-mns-signing-cert-url | 签名证书的地址(Base64编码过) | XML 和 SIMPLIFIED格式下均有 |
x-mns-request-id | 此次推送消息的 Request 编号 | XML 和 SIMPLIFIED格式下均有 |
x-mns-message-id | 此次推送消息的 MessageId | SIMPLIFIED格式下有 |
x-mns-message-tag | 此次推送消息的消息标签 | SIMPLIFIED格式下有 |
XML 格式下,Request Body 为 XML 格式,包含消息正文和 Meta 信息。
参数名称 | 说明 |
TopicOwner | 被订阅主题的拥有者 |
TopicName | 被订阅主题的名称 |
Subscriber | 订阅者 |
SubscriptionName | 订阅名称 |
MessageId | 消息编号 |
Message | 消息正文 |
MessageMD5 | 消息的 MD5 值 |
MessageTag | 消息标签(用于消息过滤) |
PublishTime | 消息的发布时间,从 1970-1-1 00:00:00 000 到消息发布时的毫秒值 |
| 签名证书的地址(仅XML格式有,注:不建议使用,仅为兼容内测用户,2016年7月份已经不再支持) |
精简格式下,Request Body 为发布者发布的消息正文。
返回消息由返回状态行、HTTP头和消息体三部分组成
HTTP/1.1 204 No Content正常处理通知消息,返回 204;请求签名验证不通过,返回 403;其他任何错误,返回 500。
无
无
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在阿里云的Message Service(MNS)中,HTTP Endpoint是一种接收和处理来自MNS消息通知的方式。当您在MNS中创建一个Subscription时,可以选择将其绑定到一个HTTP Endpoint,这样每当有新消息发布到相应的Topic时,MNS就会通过HTTP POST请求将这些消息推送到指定的Endpoint。
/notifications
路径发送HTTP/1.1版本的请求。如果在创建Subscription时自定义了包含URI的Endpoint,则该路径会被替换为用户设置的URI。虽然示例代码未直接给出,但根据上述描述,一个简单的处理流程如下:
假设您的服务端(HTTP Endpoint)用Python编写,可以使用Flask或Django等框架来接收并处理这样的POST请求:
from flask import Flask, request
app = Flask(__name__)
@app.route('/your_custom_endpoint', methods=['POST'])
def handle_notification():
# 验证请求签名(此处简化处理,实际应用需实现详细验证逻辑)
if not validate_signature(request.headers): # 实现validate_signature函数以验证Authorization头
return "Unauthorized", 403
message_id = request.headers.get('x-mns-message-id')
message_body = request.data.decode('utf-8') # SIMPLIFIED格式下直接从请求体获取消息正文
# 处理消息逻辑...
print(f"Received message with ID: {message_id}, content: {message_body}")
# 返回204表明成功处理
return "", 204
if __name__ == '__main__':
app.run()
请根据实际需求调整验证签名的方法和消息处理逻辑。记得在部署前配置好相应的路由和安全措施,确保系统能够安全有效地处理来自MNS的通知。