共用方式為


要求節流問題與 HTTP 403 - 禁止問題

請參閱 Azure API 管理 疑難解答系列文章,這是實驗室的第五個案例。 請確定您已依照此指示遵循實驗室設定指示,以重新建立問題。

原始產品版本:API 管理 服務
原始 KB 編號: 4464928

徵兆

資源 API 會擷取使用者的個人詳細數據、社交媒體貼文、批注和相片,並利用機器學習專案傳回的回應。 奇怪的是,在幾天后, GetPosts 作業開始擲回 HTTP 403 - 禁止 錯誤,而其他作業正常運作正常。

{
“statusCode”: 403,
“message”: “禁止”
}

除了上述內容外,我們也會遇到 HTTP 429 - 在針對每秒要求叫用 GetComments 作業時發生太多要求錯誤。 問題會在 10 秒後自動解決,不過,一旦再次呼叫 API 時,就會重新發生問題。 不會觀察到其他作業的行為。

{
"statusCode": 429,
“message”: “速率限制已超過。 請在 5 秒內再試一次。
}

疑難排解步驟

  • HTTP 403 - 禁止錯誤可能會在實作任何存取限制原則時擲回。

  • 檢查 APIM 檢查器追蹤,您應該會注意到有一個 'ip-filter' 原則,其會篩選 (允許/拒絕) 來自特定 IP 位址和/或位址範圍的呼叫。

  • 若要檢查 『ip-filter』 原則的範圍,請選取 [ 計算有效原則 ] 按鈕。 如果您沒有看到在任何範圍實作的任何存取限制原則,則下一個驗證步驟應在產品層級完成,方法是流覽至相關聯的產品,然後按兩下 [原則] 選項。

    <inbound>
        <base />
        <choose>
            <when condition="@(context.Operation.Name.Equals("GetPosts"))">
                <ip-filter action="forbid">
                    <address-range from="0.0.0.0" to="255.255.255.255" />
                </ip-filter>
            </when>
        </choose>
    </inbound>
    
  • 針對第二個問題(HTTP 429 - 太多要求),我們將遵循相同的程式,檢查 APIM 偵測器追蹤,並檢查是否有在任何範圍實作的「速率限制」或「速率限制」原則。

  • 如果您計算有效原則,您應該注意到在全域範圍實作的存取限制原則(速率限制-索引鍵),也就是在 [所有 API] 選項的 [輸入處理] 下。

    <inbound>
        <choose>
            <when condition="@(context.Operation.Name.Equals("GetComments"))">
                <rate-limit-by-key calls="1" renewal-period="10" increment-condition="@(context.Response.StatusCode == 200)" counter-key="@(context.Request.IpAddress)" />
            </when>
        </choose>
    </inbound>
    

深入瞭解 APIM 中的 ip-filterrate-limit-by-key 原則。

與我們連絡,以取得說明

如果您有問題或需要相關協助,請建立支援要求,或詢問 Azure community 支援。 您也可以向 Azure 意見反應社群提交產品意見反應。