Mengizinkan permintaan asal silang (CORS) di Nginx untuk 404 respons

26

Saya menggunakan Nginx untuk menyajikan file statis sebagai tanggapan terhadap permintaan CORS menggunakan teknik yang diuraikan dalam pertanyaan ini . Namun, ketika file tidak ada, respons 404 tidak berisi Access-Control-Allow-Origin: *header dan juga diblokir oleh browser.

Bagaimana saya bisa mengirim Access-Control-Allow-Origin: *404 tanggapan?

alnorth29
sumber

Jawaban:

35

Meskipun ini sudah lama ditanyakan, saya mengkompilasi nginx dengan lebih banyak modul, tetapi dengan versi yang lebih baru dari nginx, saya menemukan saya tidak harus mengkompilasi nginx secara kustom, yang saya butuhkan hanyalah menambahkan alwaysdirektif.

http://nginx.org/en/docs/http/ngx_http_headers_module.html

Syntax: add_header name value [always];

Jika parameter selalu ditentukan (1.7.5), bidang header akan ditambahkan terlepas dari kode respons.

Jadi versi header CORS yang disetel :

            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;
            }
Arnoldas
sumber
2
alwaysadalah kuncinya. Terima kasih telah menunjukkan ini padaku, aku sudah gila!
bgondy
11

Saya berasumsi bahwa Anda saat ini menggunakan add_headerarahan. Dokumentasi mencatat bahwa ini hanya menetapkan header untuk kode status 200, 204, 301, 302 dan 304. Untuk mengatur header untuk 404 kode status Anda harus menggunakan more_set_headersarahan dari modul headers_more (Anda mungkin perlu mengkompilasi ulang nginx untuk mendapatkan modul ini). Berikut ini akan mengatur tajuk untuk semua kode status:

more_set_headers 'Access-Control-Allow-Origin: *';

Anda juga dapat membatasi ke kode status tertentu:

more_set_headers -s '404' 'Access-Control-Allow-Origin: *';
Mgorven
sumber