クライアントでjQuery(1.7.1)パワードajaxを使用し、Python(django)サーバーでApacheを使用して簡単なクロスソースリソース共有を設定しようとしています。CORS Access-Control-Allow-From-Headerが正しいにもかかわらず
XMLHttpRequest cannot load http://myexternaldomain.com/get_data . Origin http://localhost:8080 is not allowed by Access-Control-Allow-Origin.
ヘッダは、私が送って(私はそれもブラウザを過ぎてきていることを確認していない)にしようとしているもの:私は私のヘッダが正しく設定されて読みましたが、私は次のエラーを取得しておくすべての命令によると、次のとおりです。
Request URL:http://myexternaldomain.com/get_data
Accept:application/json, text/javascript, */*; q=0.01
Origin:http://localhost:8080
Referer:http://localhost:8080/static/js/test-zetta.html
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.66 Safari/535.11
javascriptのコードがorigin
が正しく設定されていること
var request = $.ajax({
url : "http://myexternaldomain.com/get_data",
type : "POST",
dataType : "json",
crossDomain : true
});
注意です。サーバーは、私が直接アドレスを訪問した場合、ヘッダがそれを設定し、クロスドメインに正しく
Access-Control-Allow-Origin:*
Content-Type:application/json
Date:Thu, 08 Mar 2012 05:06:25 GMT
Server:Apache/2.2.20 (Ubuntu)
Transfer-Encoding:chunked
しかし設定されていることを確認するために表示される次のPythonコード
def process_response(self, response):
if response.has_header('Access-Control-Allow-Origin'):
return response
response['Access-Control-Allow-Origin'] = '*'
return response
def get_orders(request):
""" Tell worker what to do """
response_data = {}
response_data['action'] = 'probe'
response = process_response(HttpResponse(json.dumps(response_data), mimetype="application/json"))
return response
を使用してヘッダーAccess-Control-Allow-Origin = *
を追加します常に失敗します(chromeとfirefoxの両方を試しました)。私はthis質問に正確に選択した答えは1としてコードを実装しようとしたが、同じエラーを取得しました
更新
私が取得するために管理しているとして、私は、問題はサーバ側であることをかなり確信しています私のajaxは、別の公開CORS対応サーバーで作業することを要求しています。このパブリックサーバから戻ってくるヘッダと私の返ってきたヘッダを比較すると(私が同じドメインからテストすると)、違いを説明する大きな違いはありません(下記参照)。
私が除外した1つの微妙な点は、実際のドメインが複数のサブドメインのアマゾンドメインであるかどうかということです。 実際のアドレスはhttp://ec2-23-20-27-108.compute-1.amazonaws.com/get_ordersです。私が間違っていることを調べるためにそれを調べてください。公開サーバーから
Access-Control-Allow-Origin:*
Connection:Keep-Alive
Content-Encoding:gzip
Content-Length:622
Content-Type:text/html
Date:Thu, 08 Mar 2012 15:33:20 GMT
Keep-Alive:timeout=15, max=99
Server:Apache/2.2.14 (Ubuntu)
Vary:Accept-Encoding
X-Powered-By:Perl/5.8.7, PHP/4.4.0
私のサーバーから - (クロスドメインを動作していない)
Access-Control-Allow-Origin:*
Content-Encoding:gzip
Content-Type:text/plain
Date:Thu, 08 Mar 2012 15:32:24 GMT
Server:Apache/2.2.20 (Ubuntu)
Transfer-Encoding:chunked
Vary:Accept-Encoding
私はこれまで、CORS for Jsonデータを有効にして成功したことはありませんでした。 CORSはそのような薄片になることがあります。 JSON-Pを返すほうがずっと良いでしょう。 – xbonez
リモートサーバーとローカルクライアントの間の_final_ exchangeからヘッダーを送信するだけです。完全な交換を見ると、OPTIONSリクエストと、Access-Control-Allow-MethodsヘッダーとAccess-Control-Allow-Headersヘッダーが含まれているレスポンスが表示されます。 –