HTTP(S)消息格式
操作场景
- 接收SMN服务发送的HTTP(S)消息时,终端证书的CN名称请参考业界规范,部分特殊字符可能导致https消息发送失败。
- 在互联网上传递未加密的http协议消息内容存在信息泄漏风险,推荐用户终端添加订阅时对接通道优先使用https类型。
描述SMN服务向HTTP(S)终端发送消息的格式,您可以通过消息头部信息中的消息类型来区分消息格式。消息格式包括:HTTP(S)订阅确认消息的格式、HTTP(S)推送消息的格式和HTTP(S)取消订阅消息的格式三种消息格式,HTTP/HTTPS协议均为POST方式。
当SMN服务向HTTP(S)终端发送消息时,头部包括请求X-SMN-MESSAGE-TYPE,X-SMN-MESSAGE-ID,X-SMN-TOPIC-URN,如表1所示。
参数 |
说明 |
---|---|
X-SMN-MESSAGE-TYPE |
消息类型,消息类型分别有:
|
X-SMN-MESSAGE-ID |
消息唯一标识。 |
X-SMN-TOPIC-URN |
主题的唯一标识,表示消息归属的主题。 |
关于HTTP(S)头部字段的说明:
- RFC 7230 章节3.2中规定,HTTP(S)头部的字段名称不区分大小写。
- RFC 7540 章节8.1.2中规定,对于支持HTTP/2的服务端,头部字段信息需要统一改为全小写。
- 对于用户自定义的HTTP(S)头部字段,SMN也将采用上述的处理策略。
- 用户如果从HTTP(S)头部中获取相关字段,建议采用不区分大小写的方式。
HTTP(S)订阅确认消息的格式
添加HTTP(S)订阅终端以后,SMN会向订阅终端推送一条订阅确认的消息,下面将描述消息的HTTP Content,它是JSON格式的字符串,其中包括subscribe_url值,订阅确认需要GET请求subscribe_url地址进行确认,具体JSON字段说明如表2所示。
参数 |
说明 |
---|---|
type |
消息类型,SubscriptionConfirmation。 |
signature |
签名信息。 签名字段包括message,message_id,subscribe_url,timestamp,topic_urn和type,具体签名信息校验,请参见校验消息签名。 |
topic_urn |
主题的唯一标识,表示消息归属的主题。 |
message_id |
消息唯一标识。 |
signature_version |
签名的版本信息,目前是V1。 |
message |
订阅确认消息的描述。 |
subscribe_url |
订阅确认需要访问的URL。 |
signing_cert_url |
用于消息签名的证书URL,不需要鉴权,可直接访问。 |
timestamp |
消息第一次发送的时间戳。 |
{ "subscribe_url": "https://console.******.com/smn/subscription/confirm?token=0a419ac94f80f2c62f14c01e34ae5dfcf6b0b92ef46241218eaae5b4cb90d5d423cf104593284665a1f98691b1576976785114fb4408450e8de153b9f1******&topic_urn=urn:smn:region01:0a419ac94f80f2c62f14c01e34******:test_******®ion=region01®ion_id=region01", "signature": "W/DQSiqpRkY6En0jNaFtCYOpmUjMhzoJIdMPLhnRv37iPzNhH+SxlievFoUIyS29z7Ig4hL/ECWNfGrRhTqoasiAeOaXOjoRNoQ73YfyqWm7x7OdX+2c202zxaOS5GcsUHohxAS+wCYd6W6aVhx6eQpWzpzLwrGgE+iPmsd5I00HXIBeZEeBx/VuoqkPyBDnSvGNNDTJ2gw+fL7XuKqf/DUUjjI8dkPsp3gAcETe/XMgf3UTMFDvLLrq2fAZVhr/jMR/9m81PwuDs1k9i3iBxT67afzmQ1AhY/a/ayQX7Fmwf/FBpehG1o8e98lXAZFS2nzhvTpttawUFG8Z82******", "topic_urn": "urn:smn:region01:0a419ac94f80f2c62f14c01e34******:test_******", "message_id": "54bb04eddfc842e9b44ca36393f77cd3", "signature_version": "v1", "type": "SubscriptionConfirmation", "message": "You are invited to subscribe to topic: urn:smn:regionid:0a419ac94f80f2c62f14c01e34******:test_******. To confirm this subscription, please visit the subscribe_url included in this message. The subscribe_url is valid only within 48 hours.", "signing_cert_url": "https://smn.region01.******.com/smn/SMN_region01_3190c26a56fb435f9882e3435b******.pem", "timestamp": "2024-07-10T09:43:44Z" }
HTTP(S)推送消息的格式
HTTP(S)订阅终端订阅确认后,终端将收到SMN推送的消息,下面将描述HTTP Content信息,它是JSON串,具体字段说明如表3所示。
参数 |
说明 |
---|---|
type |
消息类型,Notification。 |
signature |
签名信息。 签名字段包括message,message_id,subject, timestamp,topic_urn和type,具体签名信息校验,如果subject不存在,则不参与校验,请参见校验消息签名。 |
subject |
消息标题。 |
topic_urn |
主题的唯一标识,表示消息归属的主题。 |
message_id |
消息唯一标识。 |
signature_version |
签名的版本信息,目前是V1。 |
message |
订阅推送消息的描述。 |
unsubscribe_url |
通过访问该链接可以取消终端订阅。 |
signing_cert_url |
用于消息签名的证书URL。 |
timestamp |
消息第一次发送的时间戳。 |
{ "signature": "WmSQ2/0kp2v2u2T33lMqKYrrLxnJoW2NHqIy5QowDuHH3y+HvhCNlCgHDUiAGpb3suCXJm16hWF+EJAYR+tPaTY1q0N3p0p+oBbhlD30fOTxRNsEWRAg73k4qArmQajhdDZOtd57xelQiNhzl2r6iCs0en4kR2iY78zZM/9caZQGBTlNcjkd2lyXYP6aSc7MOgxTsYrRus0A6yipD3zsUA7TvTdfsauAe2hZLR5W0l+um+S3ytT7sA1CMlIJPBXHP5WlqS4iMAeivmufZv7T+G43DbwWfw/seKnK6uFKWd214oqsY2/oLY3C4dcyLdvsy0/7/W8zvxXbgHeSL4******", "subject": "SMN", "topic_urn": "urn:smn:region01:0a419ac94f80f2c62f14c01e34******:test_******", "message_id": "d84bd6629ef04513ad2e37bffd6e17cb", "signature_version": "v1", "type": "Notification", "message": "{\"enterpriseProjectId\": \"0\", \"eventTime\": \"2019-08-12 22:40:55.040632\", \"chargingMode\": \"postPaid\", \"cloudserviceType\": \"xxx.service.type.bandwidth\", \"eventType\": 1, \"regionId\": \"region01\", \"tenantId\": \"057eefe55400d2742f8cc00178******\", \"resourceType\": \"xxx.resource.type.bandwidth\", \"resourceSpecCode\": \"19_bgp\", \"resourceSize\": 10, \"resourceId\": \"e091f1b1-08ef-4e2b-a27e-f85e4c******\", \"resouceSizeMeasureId\": 15, \"resourceName\": \"elbauto_2019_08_13_06_40_46\"}", "unsubscribe_url": "https://console.******.com/smn/subscription/unsubscribe?region=region01®ion_id=region01&subscription_urn=urn:smn:region01:0a419ac94f80f2c62f14c01e34******:test_******:23cf104593284665a1f98691b1******", "signing_cert_url": "https://smn.region01.******.com/smn/SMN_region01_3190c26a56fb435f9882e3435b******.pem", "timestamp": "2024-07-10T09:45:00Z" }
HTTP(S)取消订阅消息的格式
HTTP(S)订阅终端取消订阅确认后,终端将收到SMN推送的取消订阅确认消息,下面将描述HTTP Content信息,它是JSON串,具体字段说明如表4所示。
参数 |
说明 |
---|---|
type |
消息类型,UnsubscribeConfirmation。 |
signature |
签名信息。 签名字段包括message,message_id,subscribe_url、timestamp,topic_urn和type,具体签名信息校验,请参见校验消息签名。 |
topic_urn |
主题的唯一标识,表示消息归属的主题。 |
message_id |
消息唯一标识。 |
signature_version |
签名的版本信息,目前是V1。 |
message |
取消订阅确认消息的描述。 |
subscribe_url |
再次订阅确认需要访问的URL。 |
signing_cert_url |
用于消息签名的证书URL。 |
timestamp |
消息第一次发送的时间戳。 |
{ "signature": "ViE96uGbBkl+S8eWqgebi5KdmRht2U8+Rs88yuyMHq1k4h3jUkcDZ6HCqTqdpJ8nrLcdqETyyEiOQyTszJdU05z+LhfE8jerCCdSbL4zeInVkydHh0kcCRWmORye0/EuQ/gLC1UIXwvUsqbUCPnBRhNFXOeXMOPPCzK+d04xjy4QHd1H/bHxgsY3AlTe0gCFT068Zru7OK6w9aQaY44mXnN3OWGmBmoHyFab5TRXLSQNz/9u/Vj646cQMMaI0PPQ30QzGYD0MtzgDZi12m8jMTHAnMkTEcbLaEgaqmaoEnATSpEcspFKNXv2skwk7rsVakMOISpMH3+qC6RzhE******", "topic_urn": "urn:smn:region01:0a419ac94f80f2c62f14c01e34******:test_******", "message_id": "d86c201092574e71a3ca85826652c58b", "signature_version": "v1", "type": "UnsubscribeConfirmation", "message": "You are unsubscribed from topic: urn:smn:region01:0a419ac94f80f2c62f14c01e34******:test_******. To subscribe to this topic again, please visit the subscribe_url included in this message. The subscribe_url is valid only within 48 hours.", "subscribe_url": "https://console.******.com/smn/subscription/confirm?token=0a419ac94f80f2c62f14c01e34ae5dfcf6b0b92ef46241218eaae5b4cb90d5d423cf104593284665a1f98691b1576976785114fb4408450e8de153b9f1******&topic_urn=urn:smn:region01:0a419ac94f80f2c62f14c01e34******:test_******®ion=region01®ion_id=region01", "signing_cert_url": "https://smn.region01.******.com/smn/SMN_region01_3190c26a56fb435f9882e3435b******.pem", "timestamp": "2024-07-10T11:45:00Z" }