3
JavaScript経由でアクセスできるCORS対応APIを設定しようとしています。ブラウザとAJAX応答のCORSヘッダーが異なる
私がテストに使用しているコードは、このです:
$(function(){
get = function(url_fragment)
{
$.ajax({
url: 'my_api',
dataType: 'json',
cache: false,
success: function(data)
{
alert('success');
},
error: function(data)
{
alert('failure');
}
})
}
get('');
});
それはかなり単純なAJAXリクエストです。
私は私のnginxの設定
add_header Access-Control-Allow-Origin *;
でCORSを有効にしていると私のブラウザでAPIを訪れたとき、私は放火犯でXHRリクエストを表示すると、放火犯が期待されるヘッダ
Access-Control-Allow-Origin *
Connection keep-alive
Content-Length 59
Content-Type application/json;charset=utf-8
Server nginx/1.0.11 + Phusion Passenger 3.0.11 (mod_rails/mod_rack)
Status 200
X-Frame-Options sameorigin
X-Powered-By Phusion Passenger (mod_rails/mod_rack) 3.0.11
X-XSS-Protection 1; mode=block
を示しCORSヘッダーが存在しません:
Connection keep-alive
Content-Encoding gzip
Content-Type text/plain
Server nginx/1.0.11 + Phusion Passenger 3.0.11 (mod_rails/mod_rack)
Status 403
Transfer-Encoding chunked
X-Frame-Options sameorigin
X-Powered-By Phusion Passenger (mod_rails/mod_rack) 3.0.11
私は正しいヘッダーを受信していますグラムcurl
$ curl -i my_api
HTTP/1.1 200 OK
Content-Type: application/json;charset=utf-8
Connection: keep-alive
Status: 200
X-Powered-By: Phusion Passenger (mod_rails/mod_rack) 3.0.11
X-Frame-Options: sameorigin
X-XSS-Protection: 1; mode=block
Content-Length: 61
Server: nginx/1.0.11 + Phusion Passenger 3.0.11 (mod_rails/mod_rack)
Access-Control-Allow-Origin: *
言うまでもなく、私はこれは、任意のアイデアを働いていない理由として困惑していますか?
これはヘッダーの違いを説明していますが、元の場所が許可されていなかったため、403が返された理由があったと仮定していましたか? – djlumley
私はなぜそれが403を返すのか分かりませんが、X-Powered-Byヘッダは私がそれがルビーアプリから来ていると思うようにします。 – kolbyjack