CORS kurallarını yapılandırma

Başka origin’lerdeki web uygulamalarının bir kovayı tarayıcıdan çağırması için REST API ile CORS kuralları ekleyin ve kuralların yürürlüğünü kontrol edin.

Başka origin’lerden gelen web sayfalarındaki betiklerin bir kovaya istek gönderebilmesi için kovaya CORS kuralları ekleyin. Kuralları REST API üzerinden ekler ve kaldırırsınız; konsol, kovanın kurallarını ve bunların yürürlükte olup olmadığını gösterir.

Başlamadan önce

  • Abonelikte veya projede Sahip veya Katkıda bulunan rolüne ya da Block & Object Storage için Yönet erişimi olan özel bir role sahip olmanız gerekir.
  • PC_TOKEN ortam değişkeninde storage:write kapsamına sahip bir API belirtecine ihtiyacınız vardır. Bkz. Servis hesapları ve API belirteçleri ve API belirteçleriyle kimlik doğrulama.
  • Kovanın ID’sine ihtiyacınız vardır: kovanın Genel bakış sekmesinde Kova kimliği değerini kopyalayın.
  • Projenizin ID’sine ihtiyacınız vardır. Bkz. Projenin ID’sini bulma.

CORS kuralları nasıl uygulanır

Nesne deposu her kova için tek bir CORS politikası tutar; bu nedenle platform, kovanın tüm kurallarını bu politikada birleştirir:

  • İzin verilen origin’ler, tüm kuralların origin’lerinin birleşimidir.
  • Açılan başlıklar, yani tarayıcı betiklerinin okuyabildiği yanıt başlıkları, tüm kuralların başlıklarının birleşimidir.
  • Max age, yani bir tarayıcının ön kontrol (preflight) yanıtını ne kadar süre önbelleğe alabileceği, tüm kuralların en uzun değeridir.

CORS kuralı olmayan bir kovanın kendine ait bir CORS politikası yoktur.

Kural alanları

AlanKurallar
originsEn az bir. Her origin, herhangi bir origin için * ya da isteğe bağlı :port ile tam bir scheme://host değeridir; örneğin https://app.example. Yalnızca ASCII kullanın ve uluslararası alan adlarını punycode olarak yazın. Origin; yol, ana bilgisayar adında joker karakter, kullanıcı adı, parola veya boşluk içeremez. Origin’ler küçük harfle saklanır ve nesne deposu bunları birebir karşılaştırır.
methodsEn az bir; örneğin GET veya PUT.
headersTarayıcı betiklerinin okuyabildiği yanıt başlıkları; örneğin ETag. Her giriş tek bir başlık adı veya * olur. Boş olabilir.
maxAgeSeconds0 veya daha fazla. Bir tarayıcının ön kontrol yanıtını saniye cinsinden ne kadar süre önbelleğe alabileceği.

Bir kovanın en fazla 100 CORS kuralı olabilir. Birleştirilmiş origin listesi ve birleştirilmiş açılan başlıklar listesi, her biri nesne deposunun tek bir meta veri değeri için belirlediği limite sığmalıdır; bu limiti aşacak bir kural reddedilir ve hata, limiti bayt cinsinden belirtir.

CORS kuralı ekleme

Kuralı kovanın yapılandırma kurallarına gönderin:

CORS kuralı ekleme
curl -X POST "https://<api-host>/api/v1/scopes/<project-id>/storage/buckets/<bucket-id>/configuration-rules" \
  -H "Authorization: Bearer $PC_TOKEN" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"type":"cors","cors":{"origins":["https://app.example"],"methods":["GET","PUT"],"headers":["ETag"],"maxAgeSeconds":3600}}'
  • <api-host>: API’nin ana bilgisayar adı. Bkz. URL yapısı.
  • <project-id>: kovayı barındıran projenin ID’si.
  • <bucket-id>: kovanın ID’si.

Yanıtı kontrol edin. Başarılı bir istek, id değeri dahil yeni kuralla birlikte 201 Created döndürür:

Yanıt
{"id":"<rule-id>","bucketId":"<bucket-id>","type":"cors","cors":{"id":"<rule-id>","origins":["https://app.example"],"methods":["GET","PUT"],"headers":["ETag"],"maxAgeSeconds":3600},"lifecycle":null,"replication":null}

Örnekteki gibi her kural için yeni bir değerle Idempotency-Key başlığı gönderin. Bir isteği aynı anahtar ve gövdeyle tekrarlarsanız API, ikinci bir kural eklemek yerine ilk isteğin oluşturduğu kuralı döndürür. Başlık olmadan tekrarlanan bir istek ikinci bir kural ekler. İstek biçimi için bkz. POST/scopes/{scopeId}/storage/buckets/{bucketId}/configuration-rules.

Kural hemen kaydedilir ve arka planda nesne deposuna uygulanır. Kuralın ne zaman yürürlüğe girdiğini görmek için kovanın CORS sekmesini kontrol edin.

Kuralların yürürlükte olup olmadığını kontrol etme

Konsolda DepolamaNesne Depolama sayfasına gidin ve kovanın adını seçin.

CORS sekmesini seçin.

Sekme her kuralın İzin verilen origin'ler, Açılan başlıklar ve Max age değerlerini listeler. Listenin üstündeki bir satır, en son değişikliğin durumunu gösterir:

DurumAnlamı
Object store üzerinde yürürlükte.Nesne deposu kovanın güncel kurallarını tutuyor.
Object store'a uygulanıyor…Değişiklik uygulanıyor. Nesne deposu kısa süreliğine kullanılamadığında platform yeniden dener.
Uygulanamadı — object store önceki CORS politikasını koruyor: <reason>Nesne deposu değişikliği reddetti. Önceki CORS politikasını korur.

API üzerinden GET/scopes/{scopeId}/storage/buckets/{bucketId} kuralları corsRules içinde, durumu corsApply.status içinde döndürür: pending, applied veya failed. Kovanın kuralları hiç değişmediyse corsApply değeri null olur.

CORS kuralını kaldırma

Kuralın id değerini corsRules içinde bulun:

Kovayı görüntüleme
curl "https://<api-host>/api/v1/scopes/<project-id>/storage/buckets/<bucket-id>" \
  -H "Authorization: Bearer $PC_TOKEN"

Kuralı silin:

CORS kuralını kaldırma
curl -X DELETE "https://<api-host>/api/v1/scopes/<project-id>/storage/buckets/<bucket-id>/configuration-rules/<rule-id>" \
  -H "Authorization: Bearer $PC_TOKEN"

<rule-id>: kuralın id değeri.

Başarılı bir istek 204 No Content döndürür ve platform kalan kuralları nesne deposuna uygular. Son kuralı kaldırdığınızda kovanın CORS politikası kaldırılır. Bkz. DELETE/scopes/{scopeId}/storage/buckets/{bucketId}/configuration-rules/{configurationRuleId}.

Bir kuralı değiştirmek için kuralı kaldırın ve yeni bir kural ekleyin. Kurallar düzenlenemez.

Sonuç

İzin verilen origin’lerden gelen tarayıcı istekleri, kovanın birleştirilmiş politikasının belirlediği CORS başlıklarını alır.

Sorun giderme

YanıtNedenÇözüm
code değeri VALIDATION_FAILED ve field değeri cors.origins olan 422Bir origin, * veya tam bir ASCII scheme://host[:port] değil.Yolu veya joker karakteri kaldırın ve uluslararası adları punycode olarak yazın.
field değeri cors.headers olan 422Bir başlık girişi tek bir başlık adı veya * değil.Her girişte tek bir başlık adı gönderin.
details.reason değeri cors_policy_too_large olan 422Birleştirilmiş origin’ler veya başlıklar, nesne deposunun details.limitBytes içinde verilen limitini aşar.Önce origin’leri, başlıkları veya kuralları kaldırın.
code değeri QUOTA_EXCEEDED olan 409Kovada zaten 100 CORS kuralı var.Kuralları kaldırın veya origin’lerini daha az sayıda kuralda birleştirin.
code değeri CONFLICT olan 409Kova oluşturuluyor, siliniyor veya hata durumunda.Kova oluşturuluyorsa oluşturma tamamlanana kadar bekleyin. Silinmekte olan veya hata durumundaki bir kovaya yeni kural eklenemez.
details.reason değeri lifecycle_not_supported veya replication_not_supported olan 422Kuralın type değeri lifecycle veya replication. Platform bu kural türlerini uygulamaz.Yalnızca CORS kuralları gönderin.
CORS sekmesinde Uygulanamadı — object store önceki CORS politikasını koruyor: <reason>Nesne deposu birleştirilmiş politikayı reddetti.En son eklediğiniz kuralı kaldırın. Her değişiklik kovanın tüm kural kümesini yeniden uygular.

Bu sayfada