私が間違っていることはわかりませんが、静的なhtmlサイトを取得することができません。CORS、nginx via vagrant
私の静的なサイトは127.0.0.1:4000
で提供されていて、example.loc/api/api.php?querystuff
からJSONデータを取得しようとしています。
var url ='http://example.loc/api/api.php?querystuff'
var xhr = new XMLHttpRequest();
if (!('withCredentials' in xhr)) xhr = new XDomainRequest(); // fix IE8/9
xhr.open('GET', url);
xhr.onload = success;
xhr.send();
そして、これは、応答クロムが私に与えているです:
そのサイトの
私のnginxの設定は
私の静的なサイトがでエンドポイントに当たっているserver { listen 80; listen 443 ssl; server_name example.loc ~^example\.\d+\.\d+\.\d+\.\d+\.xip\.io$; # Tells nginx which directory the files for this domain are located root /srv/www/example/htdocs/current; rewrite ^/(.*)/$ /$1 permanent; location /api/api.php { if ($request_method = 'OPTIONS') { add_header 'Access-Control-Allow-Origin' $http_origin; add_header 'Access-Control-Allow-Credentials' 'true'; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type'; add_header 'Access-Control-Max-Age' 1728000; add_header 'Content-Type' 'text/plain charset=UTF-8'; add_header 'Content-Length' 0; return 204; } if ($request_method = 'POST') { add_header 'Access-Control-Allow-Origin' $http_origin; add_header 'Access-Control-Allow-Credentials' 'true'; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type'; } if ($request_method = 'GET') { add_header 'Access-Control-Allow-Origin' $http_origin; add_header 'Access-Control-Allow-Credentials' 'true'; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type'; } ... } ... }
を持っています読み込みに失敗しました http://example.loc/api/api.php?api=line_status&line=red:いいえ 'Access-Control-Allow-Origin' h eaderは要求された リソースに存在します。したがって、オリジン 'http://127.0.0.1:4000'は許可されません。
私は何が欠けていますか?
だから、問題はあなたのnginxの設定は '場所を/持っていないだけということではありませんapi/api.php'(これはあなたが必要とする実際のパスです)?その代わりに 'location/lib/api.php'があります。 – sideshowbarker
ええ、それらはタイプミスで、パスは/lib/api.phpでしたが、すべてを/api/api.phpに変更しました。 ロケーションブロックを 'location /api/api.php {}'に変更しても、それはまだ動作しません。私はちょうど私のnginx設定でそれを変更し、それをテストするために 'nginx -t'を実行して、サービスを再起動し、私は同じエラーを取得します。 – rugbert
レスポンスのHTTPステータスコードとは何ですか? nginxは、 'always'キーワードを' add header'ディレクティブに追加しない限り、非 '2xx'レスポンスにヘッダーを追加しません。 – sideshowbarker