Nginxを使用して、CORSリクエストに応答して静的ファイルを提供します この質問 で概説されている手法を使用しています。ただし、ファイルが存在しない場合、404応答にはAccess-Control-Allow-Origin: *
ヘッダーが含まれないため、ブラウザーによってブロックされます。
404応答でAccess-Control-Allow-Origin: *
を送信するにはどうすればよいですか?
これはずっと前に尋ねられましたが、nginxをより多くのモジュールでコンパイルしていましたが、nginxの新しいバージョンでは、nginxをカスタムコンパイルする必要はなく、always
ディレクティブを追加するだけで済みました。
http://nginx.org/en/docs/http/ngx_http_headers_module.html
Syntax: add_header name value [always];
Alwaysパラメーターが指定されている場合(1.7.5)、応答コードに関係なくヘッダーフィールドが追加されます。
したがって、調整されたバージョンの [〜#〜] cors [〜#〜] ヘッダー:
if ($cors = "trueget") {
# Tells the browser this Origin may make cross-Origin requests
# (Here, we echo the requesting Origin, which matched the whitelist.)
add_header 'Access-Control-Allow-Origin' "$http_Origin" always;
# Tells the browser it may show the response, when XmlHttpRequest.withCredentials=true.
add_header 'Access-Control-Allow-Credentials' 'true' always;
}
私はあなたが現在使用していると仮定しています add_header
ディレクティブ。ドキュメントでは、これは200、204、301、302および304ステータスコードのヘッダーのみを設定することに注意しています。 404ステータスコードのヘッダーを設定するには、 more_set_headers
headers_more モジュールからのディレクティブ(このモジュールを取得するには、nginxを再コンパイルする必要がある場合があります)。以下は、すべてのステータスコードのヘッダーを設定します。
more_set_headers 'Access-Control-Allow-Origin: *';
特定のステータスコードに制限することもできます。
more_set_headers -s '404' 'Access-Control-Allow-Origin: *';