本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
解析 Amazon SNS 消息格式
Amazon SNS 使用以下格式。
主题
HTTP/HTTPS标题
当亚马逊SNS向HTTP/HTTPS终端节点发送订阅确认、通知或取消订阅确认消息时,它会发送POST一条包含许多亚马逊SNS特定标头值的消息。您可以将标头值用于诸如识别消息类型之类的任务,而无需解析JSON消息正文即可读取该Type
值。默认情况下,Amazon SNS 会将所有通知发送到Content-Type
设置为 HTTP /S 的终端节点text/plain; charset=UTF-8
。要选择除文本/纯文本(原定设置)以外的 Content-Type
,请参阅创建 HTTP /S 传输策略中的 headerContentType
。
x-amz-sns-message-type
-
消息类型。可能的值为
SubscriptionConfirmation
、Notification
和UnsubscribeConfirmation
。 x-amz-sns-message-id
-
通用唯一标识符 (UUID),对于发布的每封邮件都是唯一的。对于 Amazon SNS 在重试期间重新发送的通知,将使用原始消息的消息 ID。
x-amz-sns-topic-arn
-
此消息发布到的主题的 Amazon 资源名称 (ARN)。
x-amz-sns-subscription-arn
-
ARN用于订阅此终端节点。
以下HTTPPOST标头是发送到HTTP端点的Notification
消息的标头示例。
POST / HTTP/1.1 x-amz-sns-message-type: Notification x-amz-sns-message-id: 165545c9-2a5c-472c-8df2-7ff2be2b3b1b x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic x-amz-sns-subscription-arn: arn:aws:sns:us-west-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55 Content-Length: 1336 Content-Type: text/plain; charset=UTF-8 Host: myhost.example.com Connection: Keep-Alive User-Agent: Amazon Simple Notification Service Agent
HTTP/HTTPS订阅确认JSON格式
在您订阅HTTP/HTTPS endpoint, Amazon SNS sends a subscription confirmation
message to the HTTP/HTTPS终端节点之后。此条消息包含您必须访问的 SubscribeURL
值,以确认订阅(或者,您可以将 Token
值与 ConfirmSubscription
结合使用)。
注意
在确认订阅之前,Amazon SNS 不会向此终端节点发送通知
订阅确认消息是一条带有POST消息正文的消息,其中包含具有以下名称/值对的JSON文档。
Type
-
消息类型。为订阅确认,消息类型为:
SubscriptionConfirmation
。 MessageId
-
通用唯一标识符 (UUID),对于发布的每封邮件都是唯一的。对于 Amazon SNS 在重试期间重新发送的消息,将使用原始消息的消息 ID。
Token
-
您可以使用
ConfirmSubscription
操作确认订阅的一个值。或者,您只需访问SubscribeURL
。 TopicArn
-
此终端节点订阅的主题的 Amazon 资源名称 (ARN)。
Message
-
一个描述消息的字符串。为订阅确认,字符串看上去像这样:
You have chosen to subscribe to the topic arn:aws:sns:us-east-2:123456789012:MyTopic.\nTo confirm the subscription, visit the SubscribeURL included in this message.
SubscribeURL
-
您URL必须访问才能确认订阅。或者,您可以改为将
Token
与ConfirmSubscription
操作结合使用以确认订阅。 Timestamp
-
发送订阅确认的时间 (GMT)。
SignatureVersion
-
使用的亚马逊SNS签名版本。
-
如果
SignatureVersion
为 1,则Signature
是Message
、MessageId
、Type
、Timestamp
和TopicArn
值的 Base64 编码SHA1withRSA
签名。 -
如果
SignatureVersion
为 2,则Signature
是Message
、MessageId
、Type
、Timestamp
和TopicArn
值的 Base64 编码SHA256withRSA
签名。
-
Signature
-
Message
、MessageId
、Type
、Timestamp
和TopicArn
值的 Base64 编码SHA1withRSA
或SHA256withRSA
签名。 SigningCertURL
-
用于URL对邮件进行签名的证书。
以下HTTPPOST消息是向HTTP终端节点发送SubscriptionConfirmation
消息的示例。
POST / HTTP/1.1 x-amz-sns-message-type: SubscriptionConfirmation x-amz-sns-message-id: 165545c9-2a5c-472c-8df2-7ff2be2b3b1b x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic Content-Length: 1336 Content-Type: text/plain; charset=UTF-8 Host: myhost.example.com Connection: Keep-Alive User-Agent: Amazon Simple Notification Service Agent { "Type" : "SubscriptionConfirmation", "MessageId" : "165545c9-2a5c-472c-8df2-7ff2be2b3b1b", "Token" : "2336412f37...", "TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic", "Message" : "You have chosen to subscribe to the topic arn:aws:sns:us-west-2:123456789012:MyTopic.\nTo confirm the subscription, visit the SubscribeURL included in this message.", "SubscribeURL" : "https://sns.us-west-2.amazonaws.com/?Action=ConfirmSubscription&TopicArn=arn:aws:sns:us-west-2:123456789012:MyTopic&Token=2336412f37...", "Timestamp" : "2012-04-26T20:45:04.751Z", "SignatureVersion" : "1", "Signature" : "EXAMPLEpH+DcEwjAPg8O9mY8dReBSwksfg2S7WKQcikcNKWLQjwu6A4VbeS0QHVCkhRS7fUQvi2egU3N858fiTDN6bkkOxYDVrY0Ad8L10Hs3zH81mtnPk5uvvolIC1CXGu43obcgFxeL3khZl8IKvO61GWB6jI9b5+gLPoBc1Q=", "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem" }
HTTP/HTTPS通知JSON格式
当 Amazon SNS 向订阅者HTTP或HTTPS终端节点发送通知时,发送到终端节点的消息正文包含具有以下名称/值对的JSON文档。POST
Type
-
消息类型。用于通知,这种类型属于
Notification
。 MessageId
-
通用唯一标识符 (UUID),对于发布的每封邮件都是唯一的。对于 Amazon SNS 在重试期间重新发送的通知,将使用原始消息的消息 ID。
TopicArn
-
此消息发布到的主题的 Amazon 资源名称 (ARN)。
Subject
-
在将通知发布至主题时指定的
Subject
参数。注意
此参数为可选参数。如果未指
Subject
定,则此名称/值对不会出现在本JSON文档中。 Message
-
当通知发布至主题时指定的
Message
值。 Timestamp
-
发布通知的时间 (GMT)。
SignatureVersion
-
使用的亚马逊SNS签名版本。
-
如果
SignatureVersion
为 1,则Signature
是Message
、MessageId
、Subject
(如果存在)、Type
、Timestamp
和TopicArn
值的 Base64 编码SHA1withRSA
签名。 -
如果
SignatureVersion
为 2,则Signature
是Message
、MessageId
、Subject
(如果存在)、Type
、Timestamp
和TopicArn
值的 Base64 编码SHA256withRSA
签名。
-
Signature
-
Message
、MessageId
、Subject
(如果存在)、Type
、Timestamp
和TopicArn
值的 Base64 编码SHA1withRSA
或SHA256withRSA
签名。 SigningCertURL
-
用于URL对邮件进行签名的证书。
UnsubscribeURL
-
A URL 可用于取消订阅此主题的终端节点。如果您访问此终端节点URL,Amazon 将SNS取消订阅终端节点并停止向该终端节点发送通知。
以下HTTPPOST消息是向HTTP终端节点发送Notification
消息的示例。
POST / HTTP/1.1 x-amz-sns-message-type: Notification x-amz-sns-message-id: 22b80b92-fdea-4c2c-8f9d-bdfb0c7bf324 x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic x-amz-sns-subscription-arn: arn:aws:sns:us-west-2:123456789012:MyTopic:c9135db0-26c4-47ec-8998-413945fb5a96 Content-Length: 773 Content-Type: text/plain; charset=UTF-8 Host: myhost.example.com Connection: Keep-Alive User-Agent: Amazon Simple Notification Service Agent { "Type" : "Notification", "MessageId" : "22b80b92-fdea-4c2c-8f9d-bdfb0c7bf324", "TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic", "Subject" : "My First Message", "Message" : "Hello world!", "Timestamp" : "2012-05-02T00:54:06.655Z", "SignatureVersion" : "1", "Signature" : "EXAMPLEw6JRN...", "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem", "UnsubscribeURL" : "https://sns.us-west-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-west-2:123456789012:MyTopic:c9135db0-26c4-47ec-8998-413945fb5a96" } }
HTTP/HTTPS取消订阅确认格式 JSON
HTTP/HTTPS终端节点取消订阅主题后,Amazon 会向该终端节点SNS发送取消订阅确认消息。
取消订阅确认消息是一条POST消息,其消息正文包含具有以下名称 JSON /值对的文档。
Type
-
消息类型。为取消订阅确认,消息类型为
UnsubscribeConfirmation
。 MessageId
-
通用唯一标识符 (UUID),对于发布的每封邮件都是唯一的。对于 Amazon SNS 在重试期间重新发送的消息,将使用原始消息的消息 ID。
Token
-
您可以使用
ConfirmSubscription
操作重新确认订阅的一个值。或者,您只需访问SubscribeURL
。 TopicArn
-
此终端节点已取消订阅的主题的 Amazon 资源名称 (ARN)。
Message
-
一个描述消息的字符串。为了取消订阅确认,字符串应看起来像这样:
You have chosen to deactivate subscription arn:aws:sns:us-east-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55.\nTo cancel this operation and restore the subscription, visit the SubscribeURL included in this message.
SubscribeURL
-
您URL必须访问才能重新确认订阅。或者,您可以改为将
Token
与ConfirmSubscription
操作结合使用以重新确认订阅。 Timestamp
-
发送取消订阅确认的时间 (GMT)。
SignatureVersion
-
使用的亚马逊SNS签名版本。
-
如果
SignatureVersion
为 1,则Signature
是Message
、MessageId
、Type
、Timestamp
和TopicArn
值的 Base64 编码SHA1withRSA
签名。 -
如果
SignatureVersion
为 2,则Signature
是Message
、MessageId
、Type
、Timestamp
和TopicArn
值的 Base64 编码SHA256withRSA
签名。
-
Signature
-
Message
、MessageId
、Type
、Timestamp
和TopicArn
值的 Base64 编码SHA1withRSA
或SHA256withRSA
签名。 SigningCertURL
-
用于URL对邮件进行签名的证书。
以下HTTPPOST消息是向HTTP终端节点发送UnsubscribeConfirmation
消息的示例。
POST / HTTP/1.1 x-amz-sns-message-type: UnsubscribeConfirmation x-amz-sns-message-id: 47138184-6831-46b8-8f7c-afc488602d7d x-amz-sns-topic-arn: arn:aws:sns:us-west-2:123456789012:MyTopic x-amz-sns-subscription-arn: arn:aws:sns:us-west-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55 Content-Length: 1399 Content-Type: text/plain; charset=UTF-8 Host: myhost.example.com Connection: Keep-Alive User-Agent: Amazon Simple Notification Service Agent { "Type" : "UnsubscribeConfirmation", "MessageId" : "47138184-6831-46b8-8f7c-afc488602d7d", "Token" : "2336412f37...", "TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic", "Message" : "You have chosen to deactivate subscription arn:aws:sns:us-west-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55.\nTo cancel this operation and restore the subscription, visit the SubscribeURL included in this message.", "SubscribeURL" : "https://sns.us-west-2.amazonaws.com/?Action=ConfirmSubscription&TopicArn=arn:aws:sns:us-west-2:123456789012:MyTopic&Token=2336412f37fb6...", "Timestamp" : "2012-04-26T20:06:41.581Z", "SignatureVersion" : "1", "Signature" : "EXAMPLEHXgJm...", "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem" }
SetSubscriptionAttributes配送政策JSON格式
如果您向SetSubscriptionAttributes
操作发送请求并将AttributeName
参数的值设置为DeliveryPolicy
,则该AttributeValue
参数的值必须是有效的JSON对象。例如,以下例子将传输策略设置为 5 次重试。
http://sns.us-east-2.amazonaws.com/ ?Action=SetSubscriptionAttributes &SubscriptionArn=arn%3Aaws%3Asns%3Aus-east-2%3A123456789012%3AMy-Topic%3A80289ba6-0fd4-4079-afb4-ce8c8260f0ca &AttributeName=DeliveryPolicy &AttributeValue={"healthyRetryPolicy":{"numRetries":5}} ...
使用以下JSON格式作为AttributeValue
参数的值。
{ "healthyRetryPolicy" : { "minDelayTarget" : int, "maxDelayTarget" : int, "numRetries" : int, "numMaxDelayRetries" : int, "backoffFunction" : "linear|arithmetic|geometric|exponential" }, "throttlePolicy" : { "maxReceivesPerSecond" : int }, "requestPolicy" : { "headerContentType" : "text/plain | application/json | application/xml" } }
有关该SetSubscriptionAttribute
操作的更多信息,请SetSubscriptionAttributes访问《亚马逊简单通知服务API参考》。有关支持的HTTP内容类型标头的更多信息,请参阅。创建 HTTP /S 传输策略
SetTopicAttributes 配送政策JSON格式
如果您向SetTopicAttributes
操作发送请求并将AttributeName
参数的值设置为DeliveryPolicy
,则该AttributeValue
参数的值必须是有效的JSON对象。例如,以下例子将传输策略设置为 5 次重试。
http://sns.us-east-2.amazonaws.com/ ?Action=SetTopicAttributes &TopicArn=arn%3Aaws%3Asns%3Aus-east-2%3A123456789012%3AMy-Topic &AttributeName=DeliveryPolicy &AttributeValue={"http":{"defaultHealthyRetryPolicy":{"numRetries":5}}} ...
使用以下JSON格式作为AttributeValue
参数的值。
{ "http" : { "defaultHealthyRetryPolicy" : { "minDelayTarget": int, "maxDelayTarget": int, "numRetries": int, "numMaxDelayRetries": int, "backoffFunction": "linear|arithmetic|geometric|exponential" }, "disableSubscriptionOverrides" : Boolean, "defaultThrottlePolicy" : { "maxReceivesPerSecond" : int }, "defaultRequestPolicy" : { "headerContentType" : "text/plain | application/json | application/xml" } } }
有关该SetTopicAttribute
操作的更多信息,请SetTopicAttributes访问《亚马逊简单通知服务API参考》。有关支持的HTTP内容类型标头的更多信息,请参阅。创建 HTTP /S 传输策略