2016-04-12 40 views
2

www.website.comの代わりにwebsite.comを表示していた場合、私のウェブサイトにSVGが読み込まれる問題がありました。ウェブサイトはnginxのサーバー上にあるので、私はこれを追加し、それが問題を解決:nginx内の複数のドメインにCORS経由でSVGへのアクセスを許可する方法

location/{ 
    add_header Access-Control-Allow-Origin "*"; 
} 

は、しかし、私は何を読んでオフに基づいて、これはセキュリティ上の問題の原因であるように思えますか? *の代わりにwww.website.comとwebsite.comを指定する方法はありますか?私はPHPでこれに出会ったので、私は尋ねると、それは私が必要なもののようですが、nginxのためと思われる:

header('Access-Control-Allow-Origin: http://www.website.com'); 
header('Access-Control-Allow-Origin: http://website.com'); 
+1

[Access-Control-Origin-Origin Multiple Originドメイン]の複製がありますか?(http://stackoverflow.com/questions/1653308/access-control-origin-multiple-origin-domains) – StephenKing

+0

@StephenKingこれは、nginxの実装を具体的に求めています。 – davidjb

+0

そのページを下にスクロールできますか? ;-) – StephenKing

答えて

1

Access-Control-Allow-OriginW3 specは、複数の起源はスペースで区切られたリストで指定することができると説明しています。しかし実際には、これはブラウザでの現在の実装では正しく解釈されることはありません(例えば、執筆時にはFirefox 45で失敗します)。合計はthis commentです。

次nginxのスニペットは、着信Originヘッダをチェックし、それに応じて応答を調整し、必要なものを実装するには:必要に応じて

location/{ 
    if ($http_origin ~* "^https?://(website.com|www.website.com)$") { 
     add_header Access-Control-Allow-Origin "$http_origin"; 
    } 
} 

は、正規表現の中に複数のドメインを追加します。 http://のみをサポートする場合は、s?を削除することができます。

Webページに直接HTML(例:<img src="http://example.com/img.svg>)でSVGを組み込む場合は、CORSとAccess-Control-Allow-Originは不要です。画像にcrossorigin属性(CORS Enabled Imagesなど)を使用している場合や、JSなどを使用して読み込んでいる場合は、上記が必要です。


(彼らは間違っていましたように除去CORS参照)nginxの中で同じ名前の複数のヘッダを追加するオリジナルの答え:あなたが与えられたブロックにadd_headerを複数回使用することができます

location/{ 
    add_header Header-Name "value"; 
    add_header Header-Name "value2"; 
} 

あなたの応答に含まれるもの:

Header-Name: value 
Header-Name: value2 

add_headerは、エラーを含むすべての応答コードにヘッダーを追加する場合は、alwaysパラメーター(http://nginx.org/en/docs/http/ngx_http_headers_module.html#add_headerを参照)を追加することもできます。

+0

私はこのエラーが発生しています私がそれをするとき: 'XMLHttpRequestはhttp://www.website.com/image.svgをロードできません。 'Access-Control-Allow-Origin'ヘッダーには複数の値「http://www.website.com、http://website.com」が含まれていますが、1つだけが許可されています。したがって、Origin 'http://website.com'はアクセスが許可されていません。 – Shonna

+0

@Shonna CORSではヘッダーが1つのみ使用されるため、複数のヘッダーを使用しないように答えを調整しました。 – davidjb

関連する問題