← Cloudflare R2 / r2 / buckets
Konfigurace CORS
Cross-Origin Resource Sharing (CORS) ↗ je standardizovaná metoda, která brání doméně X v přístupu ke zdrojům domény Y. Využívá k tomu speciální hlavičky v odpovědích HTTP z domény Y, díky nimž prohlížeč ověří, že doména Y povoluje doméně X přístup k těmto zdrojům.
CORS sice pomáhá chránit vaše data před škodlivými weby, zároveň se ale používá i k práci s objekty ve vašem bucketu a ke konfiguraci zásad pro bucket.
CORS se používá, když s bucketem pracujete z webového prohlížeče, a máte dvě možnosti:
Nastavení bucketu jako veřejného: Tato možnost zpřístupní váš bucket na internetu v režimu pouze pro čtení, což znamená, že kdokoli může požadovat a načíst objekty z vašeho bucketu ve svém prohlížeči nebo kdekoli jinde. Tato možnost je ideální, pokud váš bucket obsahuje obrázky používané ve veřejném blogu.
Presigned URLs: Umožňuje komukoli s přístupem k jedinečné adrese URL provádět konkrétní akce s vaším bucketem.
Předpoklady
Než nakonfigurujete CORS, musíte mít:
- Bucket R2 alespoň s jedním objektem. Pokud potřebujete bucket vytvořit, přečtěte si Vytvoření veřejného bucketu.
- Doména, kterou můžete použít pro přístup k objektu. Může to být také
localhost. - (Volitelné) Přístupové klíče. Přístupový klíč je nutný pouze při vytváření presigned URL.
Použijte CORS s veřejným bucketem
Použití CORS s veřejným bucketem, ujistěte se, že je váš bucket nastaven tak, aby povoloval veřejný přístup.
Dále přidejte zásadu CORS do vašeho bucketu, aby bylo možné soubor sdílet.
Použijte CORS s předem podepsanou URL
Presigned URLs umožňují dočasný přístup k provádění konkrétních akcí s vaším bucketem, aniž byste vystavovali své přihlašovací údaje. Presigned URLs sice řeší ověřování, ale při odesílání požadavků z prohlížeče je stále nutné nakonfigurovat CORS.
Když prohlížeč odesílá požadavek na předem podepsanou URL adresu z jiného původu, vynucuje zásady CORS. Bez zásady CORS selžou nahrávání a stahování v prohlížeči pomocí předem podepsaných URL adres, i když je samotná předem podepsaná URL adresa platná.
Vypršené předem podepsané URL adresy vrátí 403 ExpiredRequest odpověď. R2 nezahrnuje hlavičky odpovědi CORS u odpovědí na vypršelé presigned URL, takže JavaScript v prohlížeči nemůže přečíst tělo chyby. Obnovujte presigned URL dříve, než vyprší jejich platnost, nebo směrujte požadavky přes svůj aplikační server, pokud prohlížeč potřebuje chyby vypršení platnosti zpracovat přímo.
Chcete-li povolit přístup z prohlížeče pomocí předem podepsaných URL adres:
-
Přidání zásady CORS do vašeho bucketu, které povoluje požadavky z originu vaší aplikace.
-
Nastavte
AllowedMethodsaby operace odpovídaly tomu, co provádí vaše podepsané URL, použijteGET,PUT,HEAD, a/neboDELETE. -
Nastavte
AllowedHeadersaby zahrnovala všechny hlavičky, které klient odešle při použití podepsané URL, jako jsou hlavičky pro typ obsahu, kontrolní součty, cachování nebo vlastní metadata. -
(Volitelné) Nastavte
ExposeHeadersaby váš JavaScript mohl číst hlavičky odpovědi jakoETag, který obsahuje hash objektu a je užitečný pro ověřování nahrávání. -
(Volitelné) Nastavte
MaxAgeSecondsaby se odpověď na preflight požadavek uložila do cache a snížil se počet preflight požadavků, které prohlížeč odesílá.
Následující příklad umožňuje nahrávání z prohlížeče z https://example.com s Content-Type hlavičku:
[
{
"AllowedOrigins": ["https://example.com"],
"AllowedMethods": ["PUT"],
"AllowedHeaders": ["Content-Type"],
"ExposeHeaders": ["ETag"],
"MaxAgeSeconds": 3600
}
]Použijte CORS s vlastní doménou
Vlastní domény připojené k R2 bucketu s CORS policy automaticky vracejí CORS hlavičky odpovědi pro cross-origin požadavky ↗.
Cross-origin požadavky musí obsahovat platnou Origin hlavičku požadavku, například Origin: https://example.com. Pokud testujete přímo nebo používáte nástroj příkazové řádky, jako je curl, neuvidíte CORS Access-Control-* hlavičky odpovědi, pokud Origin hlavička požadavku je zahrnuta v požadavku.
Přidání zásad CORS z dashboardu
-
V dashboardu Cloudflare přejděte na Objektové úložiště R2 stránce.
Přejděte na Přehled ↗ -
V seznamu vyhledejte a vyberte svůj bucket.
-
Vyberte Nastavení.
-
V části Zásady CORS, vyberte Přidání zásady CORS.
-
Z JSON kartě ručně zadejte nebo zkopírujte a vložte vaši zásadu do textového pole.
-
Až budete hotovi, vyberte Save.
Vaše zásada se zobrazí na Nastavení stránku pro váš bucket.
Přidání zásad CORS pomocí Wrangler CLI
Pravidla CORS můžete nakonfigurovat pomocí Wrangler CLI.
- Vytvořte soubor JSON s konfigurací CORS:
{
"rules": [
{
"allowed": {
"origins": ["https://example.com"],
"methods": ["GET"]
}
}
]
}- Použijte zásadu CORS na svůj bucket:
npx wrangler r2 bucket cors set <BUCKET_NAME> --file cors.json- Ověřte, že se zásada CORS použila:
npx wrangler r2 bucket cors list <BUCKET_NAME>Hlavičky odpovědi
Následující pole v zásadách CORS R2 odpovídají hlavičkám HTTP odpovědi. Tyto hlavičky odpovědi se vrací pouze tehdy, když je příchozí požadavek HTTP platným požadavkem CORS.
| Název pole | Popis | Příklad |
|---|---|---|
AllowedOrigins |
Určuje hodnotu pro Access-Control-Allow-Origin hlavička, kterou R2 nastavuje při požadavcích na objekty v bucketu z prohlížeče. |
Pokud web na adrese www.test.com potřebuje přistupovat ke zdrojům (například k fontům, skriptům) na vlastní doména z static.example.com, nastavili byste https://www.test.com jako AllowedOrigin. |
AllowedMethods |
Určuje hodnotu pro Access-Control-Allow-Methods hlavička, kterou R2 nastavuje při požadavcích na objekty v bucketu z prohlížeče. |
GET, POST, PUT |
AllowedHeaders |
Určuje hodnotu pro Access-Control-Allow-Headers hlavička, kterou R2 nastavuje při požadavcích na objekty v tomto bucketu z prohlížeče. Cross-origin požadavky, které obsahují vlastní hlavičky (např. x-user-id) by měly tyto hlavičky uvádět jako AllowedHeaders. |
x-requested-by, User-Agent |
ExposeHeaders |
Určuje hlavičky, které lze vrátit zpět a ke kterým může přistupovat JavaScript odesílající cross-origin požadavek. Pokud potřebujete přistupovat k hlavičkám nad rámec povolené hlavičky odpovědi ↗, jako je Content-Encoding nebo cf-cache-status, musíte jej uvést zde. |
Content-Encoding, cf-cache-status, Date |
MaxAgeSeconds |
Určuje dobu (v sekundách), po kterou smí prohlížeče ukládat odpovědi na CORS preflight požadavky do mezipaměti. Prohlížeče mohou tuto dobu omezit na 2 hodiny nebo méně, i když je zadána maximální hodnota (86400). | 3600 |
Příklad
Tento příklad ukazuje zásady CORS přidané pro bucket, který obsahuje Roboto-Light.ttf objekt, což je soubor s fontem.
AllowedOrigins určit používaný webový server a localhost:3000 je název hostitele, na kterém běží webový server. AllowedMethods určit, že pouze GET požadavky jsou povoleny a mohou číst objekty ve vašem bucketu.
[
{
"AllowedOrigins": ["http://localhost:3000"],
"AllowedMethods": ["GET"]
}
]Obecně platí, že dobrým způsobem, jak ověřit správné nastavení pravidel CORS, je podívat se na síťový požadavek, který váš prohlížeč blokuje.
- Ujistěte se, že pravidlo má
AllowedOriginszahrnuje origin, ze kterého je požadavek odeslán. (napříkladhttp://localhost:3000nebohttps://yourdomain.com) - Ujistěte se, že pravidlo má
AllowedMethodsobsahuje metodu blokovaného požadavku. - Ujistěte se, že pravidlo má
AllowedHeadersobsahuje hlavičky blokovaného požadavku.
Mějte také na paměti, že šíření pravidla CORS může ve výjimečných případech trvat až 30 sekund.
Časté problémy
- Hlavičky odpovědi CORS obsahuje pouze požadavek typu cross-origin.
- Cross-origin požadavek se pozná podle přítomnosti
Originhlavička požadavku HTTP s hodnotouOriginpředstavující platný, povolený origin definovanýAllowedOriginspole vaší politiky CORS. - Požadavek bez
Originhlavička požadavku HTTP bude ne nevrací žádné hlavičky odpovědi CORS. Hodnoty origin se musí shodovat přesně.
- Cross-origin požadavek se pozná podle přítomnosti
- Hodnota(y) pro
AllowedOriginsve vaší zásadě CORS musí být platný Hodnota hlavičky HTTP Origin ↗. PlatnýOriginhlavička dělá ne musí obsahovat komponentu cesty a smí se skládat pouze zscheme://host[:port](přičemž port je volitelný).- Platný
AllowedOriginshodnota:https://static.example.com- zahrnuje schéma a hostitele. Port je volitelný a vyplývá ze schématu. - Neplatný
AllowedOriginshodnota:https://static.example.com/nebohttps://static.example.com/fonts/Calibri.woff2- nesprávně zahrnuje součást cesty.
- Platný
- Pokud potřebujete přistupovat ke konkrétním hodnotám hlaviček pomocí JavaScriptu na původní stránce, například při použití videopřehrávače, nezapomeňte nastavit
Access-Control-Expose-Headerssprávně a zahrnout hlavičky, ke kterým váš JavaScript potřebuje mít přístup, napříkladContent-Length.