404 yanıt için Nginx'te çapraz kökenli isteklere (CORS) izin verme


26

Bu soruda belirtilen tekniği kullanarak CORS isteklerine yanıt olarak statik dosyalar sunmak için Nginx kullanıyorum . Ancak, dosya bulunmadığında 404 yanıtı Access-Control-Allow-Origin: *başlık içermez ve bu nedenle tarayıcı tarafından engellenir.

Access-Control-Allow-Origin: *404 yanıtı nasıl gönderebilirim ?

Yanıtlar:


35

Bu çok uzun zaman önce sorulsa da, nginx'i daha fazla modülle derliyordum, fakat nginx'in daha yeni sürümüyle, nginx'i özel derlemek zorunda olmadığımı buldum, tek ihtiyacım olan alwaysyönerge eklemek oldu .

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

Syntax: add_header name value [always];

Her zaman parametre belirtilirse (1.7.5), yanıt kodundan bağımsız olarak başlık alanı eklenir.

Yani CORS başlıklarının ayarlanmış bir versiyonu :

            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;
            }

2
alwaysanahtar oldu. Beni işaret ettiğin için teşekkür ederim, delirmiştim!
bgondy

11

Şu anda add_headerdirektif kullandığınızı farz ediyorum . Belgeler, bunun yalnızca 200, 204, 301, 302 ve 304 durum kodunun başlığını ayarladığını belirtir. 404 durum kodunun üstbilgisini ayarlamak için headers_more modülünden more_set_headersyönergeyi kullanmanız gerekir (bu modülü almak için nginx'i yeniden derlemeniz gerekebilir). Aşağıdakiler tüm durum kodlarının başlığını belirler:

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

Ayrıca belirli durum kodlarıyla da kısıtlayabilirsiniz:

more_set_headers -s '404' 'Access-Control-Allow-Origin: *';
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.