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_TOKENmühit dəyişənindəstorage:writemiqyaslı (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. |
headers | Brauzer 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. |
maxAgeSeconds | 0 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:
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:
{"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ət | Mə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:
curl "https://<api-host>/api/v1/scopes/<project-id>/storage/buckets/<bucket-id>" \
-H "Authorization: Bearer $PC_TOKEN"Qaydanı 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
| Cavab | Səbəb | Hə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. |