本頁面說明如何解決酬載解除包裝問題。
HTTP 狀態碼錯誤
使用有效負載解除包裝時,可能會發生常見的 HTTP 狀態碼錯誤。您可以使用 push_request_count 指標監控錯誤。
400 錯誤的要求
如果 Pub/Sub 無法處理要求,可能是因為設定有誤或缺少資料,
400 Bad Request
發生這項錯誤的原因如下:以下是幾個最常見的錯誤原因:
- 酬載 (訊息資料) 不符合 HTTP 端點指定的預期要求格式。
- 缺少處理要求所需的標頭。
- 訂閱項目設定的 HTTP 端點有誤。
如要解決這個問題,請嘗試下列方法:
- 檢查酬載 (訊息資料) 的格式。請確認格式符合 HTTP 端點指定的預期要求格式。
- 確認要求包含必要標頭。如果缺少標頭,可能需要在訊息屬性中新增。舉例來說,您可能需要加入
Content-Type,但其他項目也可能不可或缺。 - 確認為訂閱項目設定的 HTTP 端點有效。
- 在推送訂閱項目中啟用無效信件佇列 (DLQ)。系統會將無法傳送的個別訊息重新導向至這個地址。如果看到少量 400 錯誤,且想要檢查這些錯誤,建議啟用 DLQ。
401 未授權 / 403 禁止
如果 Pub/Sub 無法處理要求,可能是因為憑證不正確或無效,就會發生下列錯誤。
401 unauthorized / 403 forbidden
發生這項錯誤的原因是推送訂閱項目未通過驗證。
如要解決這個問題,請嘗試下列方法:
啟用推送驗證。如果您要與 Cloud Run 或 App Engine 整合,請務必使用推播驗證。
如果您的解決方案不支援推播驗證,您可能需要在發布訊息屬性中加入自己的授權金鑰或 API 金鑰。
415 不支援的媒體類型
如果酬載格式不受支援,Pub/Sub 就無法處理要求,並會發生下列錯誤。
415 Unsupported Media Type
發生這項錯誤的原因如下:以下是幾個最常見的錯誤原因:
- 端點缺少必要的媒體類型標頭。
如要解決這個問題,請嘗試下列方法:
- 您的端點可能需要
Content-Type標頭。根據預設,有效負載解除包裝不會設定媒體類型標頭。您可以將Content-Type標頭附加為發布訊息屬性,藉此設定標頭。
431 要求標頭欄位過大 / 413 內容過大
如果要求傳送的內容過大,Pub/Sub 無法處理要求,就會發生下列錯誤。
431 request header fields too Large / 413 content too large
如果 Pub/Sub 訊息中的屬性超過伺服器的標頭大小限制,就會發生這個錯誤。
如要解決這些問題,請嘗試下列解決方法:
- 關閉「寫入中繼資料」。
- 在推送訂閱項目中啟用無效信件佇列 (DLQ)。系統會將無法傳送的個別訊息重新導向至這個地址。之後,訂閱項目會繼續運作,但含有錯誤的訊息會重新導向至另一個主題,以供進一步分析。
檢查是否已啟用酬載解除包裝功能
前往 Google Cloud 控制台的「Subscriptions」(訂閱項目) 頁面。
按一下服務名稱。
服務詳細資料頁面隨即開啟。
在設定表格中,找出「Message data unwrapping」(訊息資料解除包裝) 和「Write message metadata」(寫入訊息中繼資料) 這兩個值。
對應的表格列會顯示酬載包裝狀態 (已啟用或已停用)。
後續步驟
- 如果仍無法解開酬載包裝,請參閱「取得支援」。