外部 API の取得 (CORS 回避)
壁紙は fluxlay:// という独立した origin で動作するため、外向きの HTTP リクエストは 2 段階のゲートを通ります:
- CSP
connect-src—fluxlay.yamlのnetwork:で宣言した origin にしか到達できない。 - CORS — CSP を通過しても、相手サーバが
Access-Control-Allow-Originを返さなければブラウザがレスポンスをブロックする。
普通の REST API は CORS を返してくれるのでそのまま fetch で動きますが、ICS フィードや公開 RSS、静的ファイルホストなど CORS を意識していないエンドポイントだと 2 番目の壁で止まります。その場合は proxiedFetch を使ってください。
通常パターン: 直接 fetch
CORS を返す API なら何もせず標準の fetch で OK です。network: だけ宣言します。
CORS で弾かれた時: proxiedFetch
ブラウザに「Origin ... is not allowed by Access-Control-Allow-Origin」と怒られたら、相手サーバが CORS を返していないサインです。fetch を proxiedFetch に置き換えるだけで動きます。
proxiedFetch の中身は POST /v1/network-proxy 経由でホスト (Rust) にリクエストを投げるだけです。ホスト側で実際の fetch が行われるためブラウザの CORS は適用されません。target URL の origin が network: に宣言されているかはホストが検証するので、セキュリティモデルは直接 fetch と同じです。
どちらを使うか
迷ったら 直接 fetch を試して、CORS エラーが出たら proxiedFetch に切り替えてください。proxiedFetch はストリーミング非対応・10 MiB 上限などの制約があるので、対応しているなら直接 fetch の方が素直です。
よくあるハマりどころ
network:宣言を忘れている → CSPconnect-srcで弾かれてFailed to fetchになる。エラーメッセージにヒントが無いので、まず yaml を確認する。- GitHub に
User-Agent必須エラー →proxiedFetch経由ならFluxlay-Wallpaper-Proxy/<version>が自動付与されるので追加対応不要。 - Cookie が送られない →
proxiedFetchはCookieヘッダを意図的に転送しない。認証はAuthorizationヘッダで明示的に渡す。
詳細は proxiedFetch リファレンスを参照してください。