本頁說明使用 Cloud Storage 時可能發生的常見錯誤,以及疑難排解方法。
如要瞭解影響 Cloud Storage 等 Google Cloud 服務的事件,請參閱 Google Cloud Personalized Service Health 資訊主頁。
記錄原始要求
使用 gcloud 或 Cloud Storage 用戶端程式庫等工具時,大部分的要求和回應資訊都會由工具處理。不過,有時查看詳細資料有助於疑難排解,或在 Stack Overflow 等論壇發布問題時,請按照下列操作說明,傳回工具的要求和回應標頭:
控制台
查看要求和回應資訊的方式,取決於您用來存取 Google Cloud 控制台的瀏覽器。Google Chrome 瀏覽器:
按一下 Chrome 的主選單按鈕 (more_vert)。
選取「更多工具」。
按一下「Developer Tools」(開發人員工具)。
在顯示的窗格中,按一下「網路」分頁標籤。
指令列
在要求中使用全域偵錯旗標。例如:
gcloud storage ls gs://my-bucket/my-object --log-http --verbosity=debug
用戶端程式庫
C++
設定環境變數
CLOUD_STORAGE_ENABLE_TRACING=http,即可取得完整的 HTTP 流量。將環境變數 CLOUD_STORAGE_ENABLE_CLOG 設為 yes,即可取得各個 RPC 的記錄。
C#
使用 ApplicationContext.RegisterLogger 方法新增記錄器,並在 HttpClient 訊息處理常式上設定記錄選項。詳情請參閱 C# 用戶端程式庫參考文件。
Go
設定環境變數 GODEBUG=http2debug=1。詳情請參閱 Go 套件 net/http。
如要一併記錄要求主體,請使用自訂 HTTP 用戶端。
Java
建立名為「logging.properties」的檔案,並加入下列內容:
# Properties file which configures the operation of the JDK logging facility. # The system will look for this config file to be specified as a system property: # -Djava.util.logging.config.file=${project_loc:googleplus-simple-cmdline-sample}/logging.properties # Set up the console handler (uncomment "level" to show more fine-grained messages) handlers = java.util.logging.ConsoleHandler java.util.logging.ConsoleHandler.level = CONFIG # Set up logging of HTTP requests and responses (uncomment "level" to show) com.google.api.client.http.level = CONFIG搭配 Maven 使用 logging.properties
mvn -Djava.util.logging.config.file=path/to/logging.properties insert_command
詳情請參閱「可外掛的 HTTP 傳輸」。
Node.js
呼叫 Node 指令碼前,請先設定環境變數 NODE_DEBUG=https。
PHP
使用 httpHandler 為用戶端提供自己的 HTTP 處理常式,並設定中介軟體來記錄要求和回應。
Python
使用記錄模組。例如:
import logging import http.client logging.basicConfig(level=logging.DEBUG) http.client.HTTPConnection.debuglevel=5
小茹
在 .rb file 頂端的 require "google/cloud/storage" 後方,新增以下內容:
ruby Google::Apis.logger.level = Logger::DEBUG
新增自訂標頭
在要求中加入自訂標頭是常見的偵錯工具,例如啟用偵錯標頭或追蹤要求。以下範例說明如何為不同的 Cloud Storage 工具設定要求標頭:
指令列
使用 --additional-headers 旗標,這適用於大多數指令。例如:
gcloud storage objects describe gs://my-bucket/my-object --additional-headers=HEADER_NAME=HEADER_VALUE
其中 HEADER_NAME 和 HEADER_VALUE 定義要新增至要求的標頭。
用戶端程式庫
C++
namespace gcs = google::cloud::storage;
gcs::Client client = ...;
client.AnyFunction(... args ..., gcs::CustomHeader("header-name", "value"));
C#
以下範例會為用戶端程式庫發出的每個要求新增自訂標頭。
using Google.Cloud.Storage.V1;
var client = StorageClient.Create();
client.Service.HttpClient.DefaultRequestHeaders.Add("custom-header", "custom-value");
var buckets = client.ListBuckets("my-project-id");
foreach (var bucket in buckets)
{
Console.WriteLine(bucket.Name);
}
Go
您可以使用 callctx.SetHeaders,在傳遞至方法的內容中,為 Storage 套件發出的任何 API 呼叫新增自訂標頭。
package main
import (
"context"
"cloud.google.com/go/storage"
"github.com/googleapis/gax-go/v2/callctx"
)
func main() {
ctx := context.Background()
client, err := storage.NewClient(ctx)
if err != nil {
// Handle error.
}
ctx = callctx.SetHeaders(ctx, "X-Custom-Header", "value")
// Use client as usual with the context and the additional headers will be sent.
_, err = client.Bucket("my-bucket").Attrs(ctx)
if err != nil {
// Handle error.
}
}
Java
import com.google.api.gax.rpc.FixedHeaderProvider;
import com.google.api.gax.rpc.HeaderProvider;
import com.google.cloud.WriteChannel;
import com.google.cloud.storage.BlobInfo;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;
import java.io.IOException;
import java.nio.ByteBuffer;
import static java.nio.charset.StandardCharsets.UTF_8;
public class Example {
public void main(String args[]) throws IOException {
HeaderProvider headerProvider =
FixedHeaderProvider.create("custom-header", "custom-value");
Storage storage = StorageOptions.getDefaultInstance()
.toBuilder()
.setHeaderProvider(headerProvider)
.build().getService();
String bucketName = "example-bucket";
String blobName = "test-custom-header";
// Use client with custom header
BlobInfo blob = BlobInfo.newBuilder(bucketName, blobName).build();
byte[] stringBytes;
try (WriteChannel writer = storage.writer(blob)) {
stringBytes = "hello world".getBytes(UTF_8);
writer.write(ByteBuffer.wrap(stringBytes));
}
}
}
Node.js
const storage = new Storage();
storage.interceptors.push({
request: requestConfig => {
Object.assign(requestConfig.headers, {
'X-Custom-Header': 'value',
});
return requestConfig;
},
});
PHP
所有會觸發 HTTP 要求的函式呼叫,都會接受選用的 $restOptions 引數做為最後一個引數。您可以依據個別要求或個別用戶端提供自訂標頭。
use Google\Cloud\Storage\StorageClient;
$client = new StorageClient([
'restOptions' => [
'headers' => [
'x-foo' => 'bat'
]
]
]);
$bucket = $client->bucket('my-bucket');
$bucket->info([
'restOptions' => [
'headers' => [
'x-foo' => 'bar'
]
]
]);
Python
from google.cloud import storage
client = storage.Client(
extra_headers={
"x-custom-header": "value"
}
)
小茹
require "google/cloud/storage"
storage = Google::Cloud::Storage.new
storage.add_custom_headers { 'X-Custom-Header'=> 'value' }
Rust
存取具有 CORS 設定的值區
如果您已在 bucket 設定 CORS,但發現用戶端瀏覽器傳入的要求失敗,請嘗試下列疑難排解步驟:
查看目標 bucket 的 CORS 設定。如果有多個 CORS 設定項目,請確認用於疑難排解的要求值,對應至單一 CORS 設定項目中的值。
測試發出 CORS 要求時,請確認您未向
storage.cloud.google.com端點發出要求,因為該端點不允許 CORS 要求。如要進一步瞭解 CORS 支援的端點,請參閱「Cloud Storage CORS 支援」。使用選擇的工具檢查要求及回應。在 Chrome 瀏覽器中,您可以使用標準開發人員工具來查看此資訊:
- 按一下瀏覽器工具列上的 Chrome 選單 (more_vert)。
- 依序選取「更多工具」 >「開發人員工具」。
- 按一下 [Network] (網路) 分頁標籤。
- 從您的應用程式或指令列傳送要求。
- 在顯示網路活動的窗格中,找出要求。
- 在 [Name] 欄中,按一下與要求對應的名稱。
- 按一下 [Headers] 分頁標籤查看回應標頭,或按一下 [Response] 分頁標籤查看回應內容。
如果沒有看到要求和回應,可能是因為瀏覽器快取了先前失敗的預檢要求。清除瀏覽器的快取應該會一併清除預檢快取。如果沒有,請將 CORS 設定中的
MaxAgeSec值設為低於預設值3600(60 分鐘) 的值,等待舊的MaxAgeSec時間長度,然後再次嘗試要求。這會執行新的預檢要求,進而擷取新的 CORS 設定並清除快取項目。偵錯完畢後,請將MaxAgeSec提高,減少傳送至 bucket 的預檢流量。請確定要求含有
Origin標頭,且該標頭值至少符合值區 CORS 設定中的一個Origins值。請注意,這些值的通訊協定、主機和通訊埠必須完全相符。以下是可接受的比對範例:http://origin.example.com與http://origin.example.com:80相符 (因為 80 是預設 HTTP 通訊埠),但與https://origin.example.com、http://origin.example.com:8080、http://origin.example.com:5151或http://sub.origin.example.com不符。https://example.com:443與https://example.com相符,但與http://example.com或http://example.com:443不相符。http://localhost:8080只會完全符合http://localhost:8080,不會符合http://localhost:5555或http://localhost.example.com:8080。
如果是簡單要求,請確認要求的 HTTP 方法符合值區 CORS 設定中的至少一個
Methods值。如果是預檢要求,請確認Access-Control-Request-Method中指定的方法至少與其中一個Methods值相符。如果是預檢要求,請檢查是否包含一或多個
Access-Control-Request-Header標頭。如果是,請確認每個Access-Control-Request-Header值都與 bucket 的 CORS 設定中的ResponseHeader值相符。所有在Access-Control-Request-Header中指名的標頭都必須納入 CORS 設定,預檢要求才會成功,並在回應中納入 CORS 標頭。
錯誤代碼
以下是您可能會遇到的常見 HTTP 狀態碼。
301:Moved Permanently (永久移動)
問題:我正在設定靜態網站,但存取目錄路徑時,系統傳回空白物件和 301 HTTP 回應代碼。
解決方案:如果瀏覽器下載了零位元組物件,且您在存取目錄 (例如 http://www.example.com/dir/) 時收到 301 HTTP 回應代碼,則 bucket 很可能包含該名稱的空白物件。如要確認這個情況並修正問題:
- 前往 Google Cloud 控制台的「Cloud Storage bucket」頁面。
- 按一下 Google Cloud 控制台頂端的「啟用 Cloud Shell」按鈕。
- 執行
gcloud storage ls --recursive gs://www.example.com/dir/。 如果輸出內容包含http://www.example.com/dir/,表示該位置有空白物件。 - 使用下列指令移除空白物件:
gcloud storage rm gs://www.example.com/dir/
現在您可以存取 http://www.example.com/dir/,並讓它傳回該目錄的 index.html 檔案,而不是空白物件。
400:要求無效
問題:執行支援續傳的上傳作業時,收到這項錯誤和 Failed to parse Content-Range header. 訊息
解決方案:Content-Range 標頭中的值無效。舉例來說,Content-Range: */* 無效,應指定為 Content-Range: bytes */*。如果收到這項錯誤,表示目前支援續傳的上傳作業已失效,必須重新開始。
400:Storage Intelligence 專屬錯誤
如要瞭解設定或管理 Storage Intelligence、Storage Insights 和 Storage 批次作業時,常見錯誤的解決方法,請參閱「排解 Storage Intelligence 問題」。
401:未經授權
問題:直接或使用 Cloud CDN 對公開值區提出的要求失敗,並收到 HTTP 401: Unauthorized 和 Authentication Required 回應。
解決方法:確認用戶端或任何中繼 Proxy 未將 Authorization 標頭新增至 Cloud Storage 要求。任何含有 Authorization 標頭的要求 (即使是空白),都會視為驗證嘗試進行驗證。
403:Account Disabled (帳戶已停用)
問題:嘗試建立 bucket 時,收到 403 Account Disabled 錯誤訊息。
解決方案:這個錯誤訊息表示您尚未啟用相關專案的計費功能。如需啟用帳單功能的步驟,請參閱「啟用專案的帳單功能」。
如果已啟用帳單功能,但仍收到這則錯誤訊息,請與支援團隊聯絡,並提供專案 ID 和問題說明。
403:禁止
問題:我應該有權存取特定 bucket 或物件,但嘗試存取時,系統會顯示 403 - Forbidden 錯誤,並顯示類似「example@email.com doesn't have storage.objects.get access to the
Google Cloud Storage object」的訊息。
解決方法:您缺少完成要求所需的 bucket 或物件 IAM 權限。如果您預期可以提出要求,但無法提出,請執行下列檢查:
錯誤訊息中提及的受益人是否符合預期?如果錯誤訊息提及非預期的電子郵件地址或「匿名來電者」,表示您的要求並未使用預期憑證。這可能是因為您用來提出要求的工具是以其他別名或實體的憑證設定,也可能是因為服務帳戶代表您提出要求。
錯誤訊息中提及的權限,是否與您認為需要的權限相同?如果出現非預期的權限,可能是因為您使用的工具需要額外存取權,才能完成要求。舉例來說,如要大量刪除 bucket 中的物件,
gcloud必須先建構 bucket 中要刪除的物件清單。這部分的大量刪除動作需要storage.objects.list權限,這可能令人意外,因為目標是刪除物件,通常只需要storage.objects.delete權限。如果這是錯誤訊息的原因,請確認您已獲派具備其他必要權限的 IAM 角色。您是否已取得目標資源或父項資源的 IAM 角色?舉例來說,如果您獲派專案的
Storage Object Viewer角色,並嘗試下載物件,請確認物件位於專案的 bucket 中;您可能無意間獲得其他專案的Storage Object Viewer權限。您是否透過便利值取得特定 bucket 或物件的存取權?如果移除授予便利值的存取權,先前啟用的主體可能會失去資源存取權。
舉例來說,假設 jane@example.com 擁有
my-example-project專案的擁有者 (roles/owner) 基本角色,且專案的 IAM 政策將 Storage 物件建立者 (roles/storage.objectCreator) 角色授予便利值projectOwner:my-example-project。因此,jane@example.com 具有與my-example-project內 bucket 的「Storage 物件建立者」角色相關聯的權限。如果移除這項授權,jane@example.com 就會失去與 Storage 物件建立者角色相關聯的權限。在這種情況下,您可以授予自己必要的 bucket 層級或物件層級權限,執行所需動作,重新取得 bucket 或物件的存取權。
是否有 IAM 拒絕政策禁止您使用特定權限?您可以聯絡貴機構管理員,瞭解是否已設定 IAM 拒絕政策。
403:權限遭拒
問題:設定或管理資源的Storage Intelligence設定時,發生權限遭拒錯誤。
解決方案:設定及管理資源的 Storage Intelligence 時,如果收到權限遭拒錯誤,且訊息類似 permission
storage.intelligenceConfigs.update,請參閱要執行作業的權限一節。如要解決這個問題,請授予適當權限。您可以透過下列任一方式授予權限:
- 在您要啟用 Storage Intelligence 的Google Cloud 資源階層資源上,授予 IAM 權限。
- 請確認 Google Cloud 資源階層中較高層級的資源會將權限傳遞給子項資源。
409:Conflict (衝突)
問題:我在嘗試建立值區時收到以下錯誤訊息:
409 Conflict. Sorry, that name is not available. Please try a different one.
解決方案:您嘗試使用的 bucket 名稱 (例如 gs://cats 或 gs://dogs) 已被占用。Cloud Storage 採用全域命名空間,因此您無法使用現有 bucket 的名稱。請選擇未使用的名稱。
412:違反自訂限制
問題:我的要求遭到拒絕,並顯示 412 orgpolicy 錯誤。
問題:我的要求遭到拒絕,並顯示 412 Multiple constraints were violated 錯誤。
解決方案:請洽詢安全管理員團隊,確認您傳送要求的 bucket 是否受到使用自訂限制的組織政策影響。如果不同的機構組織政策彼此衝突,也可能會影響 bucket。例如,某項政策指定值區必須採用 Standard Storage 儲存空間級別,而另一項政策指定值區必須採用 Coldline Storage 儲存空間級別。
429:要求數量過多
問題:我的要求遭到拒絕,並顯示 429 Too Many Requests 錯誤。
解決方案:您已達到 Cloud Storage 允許特定資源的要求數量上限。如要瞭解 Cloud Storage 的限制,請參閱「Cloud Storage 配額」。
如果工作負載每秒對儲存空間發出數千個要求,請參閱「要求率和存取分配指南」,瞭解最佳做法,包括逐步增加工作負載,以及避免使用連續檔名。
如果工作負載可能使用 50 Gbps 以上的網路輸出至特定位置,請檢查頻寬用量,確保未達到頻寬配額。
物件結構定義錯誤
本節說明使用物件情境時可能遇到的常見錯誤。
400:超過物件結構定義限制
問題:這項錯誤表示物件已超過 50 個環境的限制。
解決方法:每個物件的物件脈絡數量已超過上限。請減少內容鍵/值組合數量,然後再試一次。
400:物件脈絡資料鍵或值超過大小限制
問題:這個錯誤表示物件情境鍵或值的大小超過 256 位元組的限制。
解決方案:每個物件情境鍵和值不得超過 256 個位元組 (UTF-8 編碼)。請縮短鍵或值,然後再試一次。
400:物件脈絡資料鍵或值匯總大小超過上限
問題:這項錯誤表示所有物件內容鍵和值的總大小超出限制。
解決方法:物件的所有內容鍵和值總大小不得超過 25 KiB (25,600 位元組)。請減少比對內容資料總量,然後再試一次。
400:物件脈絡資料鍵或值含有禁止使用的字元
問題:這項錯誤表示物件內容鍵或值含有禁止使用的字元。
解決方案:物件內容鍵和值不得包含單引號 (')、雙引號 (") 和反斜線 (\`), or forward slashes (/`)。請檢查內容並移除所有無效字元。
400:物件情境索引鍵或值開頭必須是英數字元
問題:這項錯誤表示物件情境鍵或值開頭不是英數字元。
解決方案:物件內容鍵和值開頭必須是英文字母或十進位數字。
400:物件脈絡資料鍵或值空白
問題:這項錯誤表示物件內容鍵或值不得為空。
解決方案:為物件內容的鍵和值提供非空白字串。
400:物件脈絡資料鍵或值無效的 UTF-8
問題:這項錯誤表示物件脈絡鍵或值不是有效的 UTF-8 字串。
解決方案:確認情境索引鍵和值中的所有字元都使用 UTF-8 編碼。
400:物件脈絡資料鍵預留前置字串
問題:這項錯誤表示物件內容鍵開頭為保留前置字元。
解決方案:部分前置字串會保留給系統使用。請避免在情境索引鍵中使用受限制的前置字元,例如 goog。
400:物件的 Drop Context 群組不得超過 50 個
問題:這項錯誤表示 drop_context_groups 參數的值不能超過 50 個。
解決方案:減少 drop_context_groups 參數中的值數量,然後再試一次。
400:Drop Context Groups 欄位的值無效
問題:這項錯誤表示 drop_context_groups 參數包含無效值。
解決方案:drop_context_groups 參數唯一接受的值是 custom。
診斷 Google Cloud 控制台錯誤
問題:使用 Google Cloud 控制台執行作業時,我收到一般錯誤訊息。舉例來說,嘗試刪除 bucket 時,我看到錯誤訊息,但沒有看到作業失敗的詳細原因。
解決方法:使用 Google Cloud 控制台的通知,查看作業失敗的詳細資訊:
按一下 Google Cloud 控制台頁首的「通知」按鈕 (notifications)。
下拉式選單會顯示控制台最近執行的作業。Google Cloud
按一下要進一步瞭解的項目。
頁面隨即開啟,顯示作業的詳細資訊。
按一下各列,即可展開詳細錯誤資訊。
問題:使用 Google Cloud 控制台時,我沒有看到特定資料欄。
解決方法:如要在控制台中顯示特定資料欄,請按一下「資料欄顯示選項」圖示 (),然後選取要顯示的資料欄。 Google Cloud
模擬資料夾和代管資料夾
問題:我刪除了 bucket 中的一些物件,現在 Google Cloud 控制台未顯示包含這些物件的資料夾。
解決方法:雖然 Google Cloud 控制台會顯示 bucket 內容,彷彿有目錄結構,但資料夾在 Cloud Storage 中基本上不存在。因此,當您從 bucket 中移除所有具有共同前置字串的物件時,代表該組物件的資料夾圖示就不會再顯示於 Google Cloud 控制台。
問題:我無法建立代管資料夾。
解決方案:如要建立代管資料夾,請確認符合下列需求條件:
您具備包含
storage.managedfolders.create權限的 IAM 角色,例如 Storage 物件管理員 (roles/storage.objectAdmin) 角色。如需授予角色的操作說明,請參閱「使用 IAM 權限」。您要建立代管資料夾的值區已啟用統一值區層級存取權。
值區或專案沒有使用值區資源類型 (
storage.googleapis.com/Bucket) 或物件資源類型 (storage.googleapis.com/Object) 的 IAM 條件。如果專案中的任何值區具有使用這兩種資源類型的 IAM 條件,則該專案中的任何值區都無法建立代管資料夾,即使之後移除條件也一樣。
問題:bucket 中有代管資料夾,因此無法停用統一 bucket 層級存取權。
解決方法:如果 bucket 中有代管資料夾,就無法停用統一 bucket 層級存取權。如要停用統一 bucket 層級存取權,請先刪除 bucket 中的所有代管資料夾。
靜態網站錯誤
設定值區來託管靜態網站時,可能會遇到下列常見問題。
透過 HTTPS 提供內容
問題:我想透過 HTTPS 提供內容,但不使用負載平衡器。
解決方法:你可以使用直接 URI (例如 https://storage.googleapis.com/my-bucket/my-object) 透過 HTTPS 提供靜態內容。如要透過 SSL 透過自訂網域提供內容,您也可以:
- 搭配 Cloud Storage 使用第三方內容傳遞網路。
- 改用 Firebase 託管服務,而非 Cloud Storage,提供靜態網站內容。
頁面無法存取
問題:網站提供的網頁顯示 Access denied 錯誤訊息。
解決方案:檢查物件是否為公開共用。如果不是,請參閱「公開資料」一文的操作說明。
如果您先前上傳了物件並進行共用,但之後上傳該物件的新版本,那麼您必須以公開分享方式轉貼該物件,這是因為公開權限會由新的上傳內容取代。
下載內容
問題:系統提示我下載頁面內容,而無法在瀏覽器中查看。
解決方案:如果您將 MainPageSuffix 指定為沒有網路內容類型的物件,系統會提示網站訪客下載內容,而不是顯示網頁內容。如要解決這個問題,請將 Content-Type 中繼資料項目更新為適當的值,例如 text/html。如需操作說明,請參閱「編輯物件中繼資料」。
公開您的資料
問題:我嘗試公開資料,但收到組織政策錯誤訊息。
解決方案:部分組織政策限制可能會阻止您公開資料。舉例來說,「網域限定共用」限制 (constraints/iam.allowedPolicyMemberDomains) 會根據機構的網域限制資源共用。如果組織政策失敗,請與管理員聯絡,要求授予專案或 bucket 層級權限,以便編輯組織、資料夾或專案資源的組織政策,允許共用資源。如果覆寫機構政策後仍看到這則錯誤訊息,請稍候幾分鐘,等待變更生效。
問題:嘗試公開資料時,收到權限錯誤訊息。
解決方案:確認您具備 storage.buckets.setIamPolicy 權限或 storage.objects.setIamPolicy 權限。舉例來說,Storage 管理員 (roles/storage.admin) 角色即具備這些權限。如果您具備 storage.buckets.setIamPolicy 權限或 storage.objects.setIamPolicy 權限,但仍收到錯誤訊息,表示 bucket 可能受到禁止公開存取的限制,不允許存取 allUsers 或 allAuthenticatedUsers。禁止公開存取功能可能直接在 bucket 上設定,也可能透過在較高層級設定的組織政策強制執行。
延遲時間
以下是您可能會遇到的常見延遲問題。此外,Google Cloud Service Health會提供影響 Cloud Storage 等服務的事件資訊。 Google Cloud
上傳或下載延遲時間
問題:上傳或下載時延遲時間變長。
解決方案:請考量下列上傳和下載延遲的常見原因:
CPU 或記憶體限制:受影響環境的作業系統應具備工具,可評估本機資源消耗量,例如 CPU 和記憶體用量。
磁碟 IO 限制:本機磁碟 IO 可能會影響效能。
地理距離:Cloud Storage bucket 與受影響環境之間的實際距離可能會影響效能,尤其是跨洲的情況。使用與受影響環境位於相同區域的值區進行測試,可以判斷地理位置分隔對延遲時間的影響程度。
- 如果適用,受影響環境的 DNS 解析器應使用 EDNS(0) 通訊協定,以便將環境的要求透過適當的 Google Front End 傳送。
CLI 或用戶端程式庫延遲時間
問題:使用 Google Cloud CLI 或其中一個用戶端程式庫存取 Cloud Storage 時,延遲時間增加。
解決方案:gcloud CLI 和用戶端程式庫會在適當情況下自動重試要求,但這種行為可能會有效增加使用者看到的延遲時間。使用 Cloud Monitoring 指標 storage.googleapis.com/api/request_count,查看 Cloud Storage 是否持續提供可重試的回應代碼,例如 429 或 5xx。
Proxy 伺服器
問題:我透過 Proxy 伺服器連線,我需要做些什麼?
解決方案:如要透過 Proxy 伺服器存取 Cloud Storage,您必須允許存取下列網域:
accounts.google.com:用於建立 OAuth2 驗證權杖oauth2.googleapis.com執行 OAuth2 權杖交換*.googleapis.com儲存空間要求
如果您的 Proxy 伺服器或安全性政策不支援依網域加入許可清單,而僅支援依 IP 網路區塊加入許可清單,強烈建議您為所有 Google IP 位址範圍設定 Proxy 伺服器。如要查詢位址範圍,請前往 ARIN 查詢 WHOIS 資料。最佳做法是定期檢查 Proxy 設定,確保與 Google 的 IP 位址相符。
不建議使用從 oauth2.googleapis.com 和 storage.googleapis.com 的一次性查詢中取得的個別 IP 位址設定 Proxy。Google 服務是透過 DNS 名稱公開,這些名稱會對應至大量 IP 位址,且可能隨時間變更,因此如果根據一次性查詢設定 Proxy,可能會導致無法連線至 Cloud Storage。
如果要求是透過 Proxy 伺服器傳送,您可能需要與網路管理員確認,Proxy 是否會移除含有憑證的 Authorization 標頭。如果沒有 Authorization 標頭,系統會拒絕要求,並顯示 MissingSecurityHeader 錯誤。
後續步驟
- 如需其他問題的解答,請參閱 Cloud Storage 常見問題。
- 瞭解支援選項。
- 瞭解如何使用 Error Reporting 找出並瞭解 Cloud Storage 錯誤。