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_TOKENortam değişkenindestorage:writekapsamı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ı
| Alan | Kurallar |
|---|---|
origins | En 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. |
methods | En az bir; örneğin GET veya PUT. |
headers | Tarayıcı betiklerinin okuyabildiği yanıt başlıkları; örneğin ETag. Her giriş tek bir başlık adı veya * olur. Boş olabilir. |
maxAgeSeconds | 0 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:
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:
{"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:
| Durum | Anlamı |
|---|---|
| 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:
curl "https://<api-host>/api/v1/scopes/<project-id>/storage/buckets/<bucket-id>" \
-H "Authorization: Bearer $PC_TOKEN"Kuralı silin:
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ıt | Neden | Çözüm |
|---|---|---|
code değeri VALIDATION_FAILED ve field değeri cors.origins olan 422 | Bir 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 422 | Bir 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 422 | Birleş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 409 | Kovada zaten 100 CORS kuralı var. | Kuralları kaldırın veya origin’lerini daha az sayıda kuralda birleştirin. |
code değeri CONFLICT olan 409 | Kova 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 422 | Kuralı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. |