CORS qaydalarını konfiqurasiya edin

REST API ilə CORS qaydaları əlavə edin ki, başqa origin-lərdəki veb tətbiqlər brauzerdən bucket-ə müraciət edə bilsin, və qaydaların qüvvədə olduğunu yoxlayın.

Başqa origin-lərdən olan veb səhifələrdəki skriptlər bucket-ə sorğu göndərə bilsin deyə bucket-ə CORS qaydaları əlavə edin. Qaydaları REST API vasitəsilə əlavə edir və silirsiniz; konsol bucket-in qaydalarını və onların qüvvədə olub-olmadığını göstərir.

Başlamazdan əvvəl

  • Abunəlikdə (subscription) və ya layihədə (project) sizə Owner və ya Contributor rolu, yaxud Block & Object Storage üzrə Manage girişi olan fərdi rol (custom role) lazımdır.
  • PC_TOKEN mühit dəyişənində storage:write miqyaslı (scope) API tokeni (API token) olmalıdır. Xidmət hesabları və API tokenləri və API tokenləri ilə autentifikasiyadan keçin səhifələrinə baxın.
  • Bucket-in ID-si lazımdır: bucket-in Overview tab-vərəqəsində Bucket ID dəyərini köçürün.
  • Layihənizin ID-si lazımdır. Layihənin ID-sini tapın bölməsinə baxın.

CORS qaydaları necə tətbiq olunur

Obyekt anbarı hər bucket üçün bir CORS siyasəti saxlayır, buna görə platforma bucket-in bütün qaydalarını həmin siyasətdə birləşdirir:

  • Allowed origins bütün qaydaların origin-lərinin birləşməsidir.
  • Exposed headers, yəni brauzer skriptlərinin oxuya bildiyi cavab başlıqları, bütün qaydaların başlıqlarının birləşməsidir.
  • Max age, yəni brauzerin preflight cavabını nə qədər müddət keşdə saxlaya biləcəyi, bütün qaydalardakı ən böyük dəyərdir.

CORS qaydaları olmayan bucket-in öz CORS siyasəti olmur.

Qayda sahələri

SahəQaydalar
originsƏn azı biri. Hər origin ya istənilən origin üçün *, ya da ixtiyari :port ilə dəqiq scheme://host olur, məsələn, https://app.example. Yalnız ASCII simvollarından istifadə edin, beynəlmiləlləşdirilmiş domen adlarını isə punycode ilə yazın. Yol, hostda əvəzedici simvol, istifadəçi adı və ya parol, həmçinin boşluqlar olmamalıdır. Origin-lər kiçik hərflə saxlanılır və obyekt anbarı onları dəqiq müqayisə edir.
methodsƏn azı biri, məsələn, GET və ya PUT.
headersBrauzer skriptlərinin oxuya bildiyi cavab başlıqları, məsələn, ETag. Hər element bir başlıq adı və ya * olur. Boş ola bilər.
maxAgeSeconds0 və ya daha çox. Brauzerin preflight cavabını saniyə ilə nə qədər müddət keşdə saxlaya biləcəyi.

Bucket-in 100-ə qədər CORS qaydası ola bilər. Origin-lərin birləşdirilmiş siyahısı və açıqlanan başlıqların birləşdirilmiş siyahısı ayrı-ayrılıqda obyekt anbarının bir metaverilənlər dəyəri üçün limitinə sığmalıdır; bu limiti aşan qayda rədd edilir və xəta limiti baytlarla göstərir.

CORS qaydası əlavə edin

Qaydanı bucket-in konfiqurasiya qaydalarına göndərin:

CORS qaydası əlavə edin
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 host adı. URL strukturu bölməsinə baxın.
  • <project-id>: bucket-in aid olduğu layihənin ID-si.
  • <bucket-id>: bucket-in ID-si.

Cavabı yoxlayın. Uğurlu sorğu yeni qaydanı, o cümlədən onun id dəyərini 201 Created ilə qaytarır:

Cavab
{"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}

Nümunədə olduğu kimi, hər qayda üçün yeni dəyərlə Idempotency-Key başlığı göndərin. Sorğunu eyni açar və gövdə ilə təkrarlasanız, API ikinci qayda əlavə etmək əvəzinə ilk sorğunun yaratdığı qaydanı qaytarır. Başlıq olmadan təkrarlanan sorğu ikinci qayda əlavə edir. Sorğu formatı üçün POST/scopes/{scopeId}/storage/buckets/{bucketId}/configuration-rules səhifəsinə baxın.

Qayda dərhal saxlanılır və arxa planda obyekt anbarına tətbiq olunur. Onun nə vaxt qüvvəyə mindiyini görmək üçün bucket-in CORS tab-vərəqəsini yoxlayın.

Qaydaların qüvvədə olub-olmadığını yoxlayın

Konsolda StorageObject Storage bölməsinə keçin və bucket-in adını seçin.

CORS tab-vərəqəsini seçin.

Tab-vərəqə hər qaydanın Allowed origins, Exposed headers və Max age dəyərlərini siyahıya alır. Siyahının üstündəki sətir son dəyişikliyin vəziyyətini göstərir:

VəziyyətMənası
In force on the object store.Obyekt anbarında bucket-in cari qaydaları saxlanılır.
Being applied to the object store…Dəyişiklik tətbiq olunur. Obyekt anbarı qısa müddətə əlçatmaz olduqda platforma yenidən cəhd edir.
Not applied — the object store keeps its previous CORS policy: <reason>Obyekt anbarı dəyişikliyi rədd edib. O, əvvəlki CORS siyasətini saxlayır.

API vasitəsilə GET/scopes/{scopeId}/storage/buckets/{bucketId} qaydaları corsRules daxilində, vəziyyəti isə corsApply.status daxilində qaytarır: pending, applied və ya failed. Bucket-in qaydaları heç vaxt dəyişməyibsə, corsApply dəyəri null olur.

CORS qaydasını silin

corsRules daxilində qaydanın id dəyərini tapın:

Bucket-i əldə edin
curl "https://<api-host>/api/v1/scopes/<project-id>/storage/buckets/<bucket-id>" \
  -H "Authorization: Bearer $PC_TOKEN"

Qaydanı silin:

CORS qaydasını 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>: qaydanın id dəyəri.

Uğurlu sorğu 204 No Content qaytarır və platforma qalan qaydaları obyekt anbarına tətbiq edir. Son qaydanı sildikdə bucket-in CORS siyasəti silinir. DELETE/scopes/{scopeId}/storage/buckets/{bucketId}/configuration-rules/{configurationRuleId} səhifəsinə baxın.

Qaydanı dəyişmək üçün onu silin və yenisini əlavə edin. Qaydaları redaktə etmək olmaz.

Nəticə

İcazə verilmiş origin-lərdən gələn brauzer sorğuları bucket-in birləşdirilmiş siyasətinin təyin etdiyi CORS başlıqlarını alır.

Nasazlığın həlli

CavabSəbəbHəll
422, code VALIDATION_FAILED və field cors.origins iləOrigin * və ya dəqiq ASCII scheme://host[:port] deyil.Yolu və ya əvəzedici simvolu silin, beynəlmiləlləşdirilmiş adları isə punycode ilə yazın.
422, field cors.headers iləBaşlıq elementi tək başlıq adı və ya * deyil.Hər elementdə bir başlıq adı göndərin.
422, details.reason cors_policy_too_large iləBirləşdirilmiş origin-lər və ya başlıqlar obyekt anbarının details.limitBytes daxilində verilən limitini aşardı.Əvvəlcə origin-ləri, başlıqları və ya qaydaları silin.
409, code QUOTA_EXCEEDED iləBucket-in artıq 100 CORS qaydası var.Qaydaları silin və ya onların origin-lərini daha az qaydada birləşdirin.
409, code CONFLICT iləBucket yaradılır və ya silinir, yaxud xəta vəziyyətindədir.Bucket yaradılırsa, onun yaradılması başa çatana qədər gözləyin. Silinməkdə olan və ya xəta vəziyyətində olan bucket yeni qaydalar qəbul edə bilməz.
422, details.reason lifecycle_not_supported və ya replication_not_supported iləQaydanın type dəyəri lifecycle və ya replication olur. Platforma bu qayda tiplərini tətbiq etmir.Yalnız CORS qaydaları göndərin.
Not applied — the object store keeps its previous CORS policy: <reason> — CORS tab-vərəqəsindəObyekt anbarı birləşdirilmiş siyasəti rədd edib.Sonuncu əlavə etdiyiniz qaydanı silin. Hər dəyişiklik bucket-in bütün qaydalar dəstini yenidən tətbiq edir.

Bu səhifədə