・自鯖(サーバプロセス)
・自鯖(WebUI)
・他鯖のWeb
・リモートサーバ(連合先)
・クライアントアプリ
かな。
CORS意識するのはWebUIを表示するブラウザぐらいで、他はみてないと思う()
クライアントアプリは、他鯖の画像を自鯖から取得せずにリモートを直接みにいっちゃうものが結構ある(けどCORS……)。PleromaやMisskey、キャッシュしないで直接見に行かせちゃう場合あるんじゃないかな。
プロキシが間に入る場合は、S3のヘッダを隠して、プロキシがヘッダを付け直す感じ?
https://docs.joinmastodon.org/admin/optional/object-storage-proxy/
proxy_hide_header 'Access-Control-Allow-Origin';
proxy_hide_header 'Access-Control-Allow-Methods';
proxy_hide_header 'Access-Control-Allow-Headers';
add_header 'Access-Control-Allow-Origin' '*'
@kedama @zundan Mastodonは、人知れずMediaProxyのエントリがあって、再取得が必要なメディアのstatusではプロキシのURLを返しています。
ユーザーがプロキシにアクセスすると、RedownloadMediaWorkerを走らせて再取得を行って、本来のローカルURLにリダイレクトするという処理を行います。
この仕組みで、media removeで消しちゃったり、壊れている画像をクリックしても、ローカルのURLが返るようになっています。
クライアントアプリは、このへんを無視して、リモートを直接見に行くものがあります。
ユーザーとしては画像がちゃんと表示されて嬉しかったりするんですが、どんな画像を読まされるかわからないのと、トラッキング防止になりません。逆に、本体が対応していないメディア形式でも読めたりします。
@noellabo @kedama なるほどなるほど。PleromaやMisskeyのWebUIが直接リモート(自サーバ)を見に来るならAllow-Originを*にしておくのが良くて、Mastodonだけ気にするならCORSを気にしないSidekiqからキャッシュを取りに来てくれるはずなのでAllow-Originを自サーバにに限定しても問題なさそうな感じですね。