您在調(diào)用VPC API時(shí),如果發(fā)生請(qǐng)求超時(shí)或服務(wù)器內(nèi)部錯(cuò)誤,客戶端可能會(huì)嘗試重發(fā)請(qǐng)求。您可以在請(qǐng)求中設(shè)置ClientToken參數(shù)避免多次重試帶來重復(fù)操作的問題。

什么是冪等性

在數(shù)學(xué)計(jì)算或者計(jì)算機(jī)科學(xué)中,冪等性(idempotence)是指相同操作或資源在一次或多次請(qǐng)求中具有同樣效果的作用。冪等性在分布式系統(tǒng)設(shè)計(jì)中具有十分重要的地位。

保證冪等性

通常情況下,客戶端只需要在500(InternalServerError)或503(ServiceUnavailable)錯(cuò)誤,或者無(wú)法獲取響應(yīng)結(jié)果時(shí)重試。使用阿里云VPC API,您可以從客戶端生成一個(gè)參數(shù)值不超過64個(gè)的ASCII字符,并將值賦予ClientToken,保證重試請(qǐng)求的冪等性。

ClientToken詳解

ClientToken參數(shù)的詳細(xì)信息如下所示。

  • ClientToken是一個(gè)由客戶端生成的唯一的、大小寫敏感、不超過64個(gè)ASCII字符的字符串。例如,ClientToken=123e4567-e89b-12d3-a456-426655440000
  • 如果您提供了一個(gè)已經(jīng)使用過的ClientToken,但其他請(qǐng)求參數(shù)有變化,則VPC會(huì)返回IdempotentParameterMismatch的錯(cuò)誤代碼。
    說明 參數(shù)SignatureNonceTimestampSignature在重試時(shí)是需要變化的。具體原因是VPC使用SignatureNonce防止重放攻擊,使用Timestamp標(biāo)記每次請(qǐng)求時(shí)間。所以再次請(qǐng)求必須提供不同的SignatureNonceTimestamp參數(shù)值,同時(shí)也會(huì)導(dǎo)致Signature值的變化。
  • 添加了ClientToken參數(shù)后:
    • 返回結(jié)果是200 HTTPCode時(shí),重試后客戶端可以得到與上次相同的結(jié)果,但對(duì)您的服務(wù)端狀態(tài)沒有影響。
    • 返回結(jié)果是4xx HTTPCode時(shí),如果錯(cuò)誤信息沒有表明try it later類似的信息,重試不會(huì)成功。您需要根據(jù)錯(cuò)誤信息排查問題后再重試請(qǐng)求。