1

サーバーは、正しい要求ヘッダーを送信するように変更されました。

サーバー - 応答ヘッダー:

Access-Control-Max-Age: 86400
Access-Control-Allow-Methods: GET, OPTIONS, POST
Access-Control-Allow-Origin: * 
Access-Control-Allow-Headers: Content-Type, X-Requested-With

サーバー (a.foo.com) に Spring Web mvc を使用し、mvc インターセプターを使用して HttpResponseHeaders を設定しています。

また、オリジンを「*」ではなく、リクエストのドメインに設定しようとしました。

クライアント - jQuery コード

jQuery/AJAX - jquery 1.7.1 を使用しています POST リクエストの概要を次に示します。

var settings = {};
settings.url = "http://a.foo.com/api";
settings.type = 'POST';
settings.data = JSON.stringify(request);
settings.dataType = 'json';
settings.contentType = 'application/json; charset=utf-8';
settings.crossDomain = true; // adding or removing this, didn't make a difference
.... (setup callbacks etc)
jQuery.ajax(settings);

ウェブサイト - html/js は a.bar.com でホストされています

クライアントのエラー - JavaScript コンソール (Chrome でのテスト)

XMLHttpRequest はhttp://a.foo.com/apiを読み込めません。Origin http://a.bar.comは Access-Control-Allow-Origin で許可されていません。

質問

私が見逃しているものは他にありますか?主に POST サポートが必要なため、JSONP の使用は避けたいと思います。

ご指摘いただきありがとうございます。

4

1 に答える 1

1

OPTIONS リクエストに応答ヘッダーが設定されていませんでした。GET/POST リクエスト用に設定していました。

このブログに従うことは役に立ちました: http://zhentao-li.blogspot.com/2012/06/enable-cors-support-in-rest-services.html

リクエスト メソッド OPTIONS/GET/POST でエンドポイント (a.foo.com/api/*) にアクセスすると、次のヘッダーが表示されます。

Date: Wed, 08 Aug 2012 02:58:05 GMT  
Connection: keep-alive  
Content-Length: 0   
Allow: GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS   
Server: Apache-Coyote/1.1   
Access-Control-Max-Age: 1800  
Access-Control-Allow-Methods: GET, POST, PUT, DELETE  
Content-Type: text/plain; charset=UTF-8   
Access-Control-Allow-Origin: *  
Access-Control-Allow-Headers: Content-Type

これをChromeでテストしました。IEに問題があるのだろうか!:)これがIE9でも動作することを望んでいますが、私が読んだことから、私は希望を抱くべきではありません.

あなたの提案をありがとう@Strelok。そして@sthと@xdazz。

于 2012-08-08T18:33:06.223 に答える