ここにいくつかの背景情報があります...
- 1) http://www.html5rocks.com/en/tutorials/cors/ - JSON はこのカテゴリに分類されるため、「それほど単純ではないリクエスト」について少し読む必要があることに注意してください。
- 2) http://stackoverflow.com/questions/9613210/cors-access-control-allow-origin-despite-correct-headers?rq=1
- 3) http://caniuse.com/#search=cors - CORS をサポートするブラウザーの詳細
- 4) http://stackoverflow.com/questions/10748537/access-control-allow-origin-on-playframework (再生 1 ではなく再生 2 の場合)
だからここに私が実装したものがあります:
それほど単純ではないリクエスト (上記の 1 を参照) は飛行前の呼び出しを行うため、routes ファイルに以下を追加する必要があります。
POST /url_to_json_webservice controllers.myJsonWebServices.myJsonWebService
OPTIONS /url_to_json_webservice controllers.myJsonWebServices.checkPreFlight
次に、コントローラーで次のメソッドを設定します。
public static Result checkPreFlight() {
response().setHeader("Access-Control-Allow-Origin", "*"); // Need to add the correct domain in here!!
response().setHeader("Access-Control-Allow-Methods", "POST"); // Only allow POST
response().setHeader("Access-Control-Max-Age", "300"); // Cache response for 5 minutes
response().setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); // Ensure this header is also allowed!
return ok();
}
ここで必要以上のヘッダーを設定した可能性があることに注意してください。必要なものを確認してください!!
また、実際のJSON結果を返すコントローラーメソッドの最後に次を追加することを忘れないでください(上記の私の質問のように):
public static Result myJsonWebService() {
...
response().setHeader("Access-Control-Allow-Origin", "*");
return ok(toJson(jsonObject));
}