2017-10-12 2 views
0

Playアプリをローカルに配置し、ブラウザ内からlocalhost:9000経由でREST APIにアクセスしても問題ありません。 jQueryのスクリプトを実行するときにPlay CORSが動作しない

はしかし、私はfile:///C:/Users/XXX/XXX//index.htmlから(下記参照)、次のエラーを取得:

Failed to load resource: the server responded with a status of 403 (Forbidden) 

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access. The response had HTTP status code 403. 

私はhttps://www.playframework.com/documentation/2.6.x/CorsFilterの下に与えられた指示に従いました。

マイbuild.sbt

libraryDependencies ++= Seq(
    jdbc, 
    evolutions, 
    guice, 
    "com.h2database" % "h2" % "1.4.194", 
    javaJpa, 
    "org.hibernate" % "hibernate-core" % "5.2.5.Final", 
    filters 
) 

マイapplication.conf

注:

$.ajax({ 

    'url' : 'http://localhost:9000/employee/' + user_id + '/weeklyWorkingHours', 
    'type' : 'GET', 
    'success' : function(data) { 
     console.log('Data: '+ JSON.stringify(data)); 

    }, 
    'error' : function(request,error) 
    { 
     console.log("Error: "+JSON.stringify(request)); 
    } 
}); 
:私は両方 allowedOrigins = null & allowedOrigins = ["*"]

jQueryのスクリプトを試してみましたここ

言うプレイです:

[warn] p.f.c.CORSFilter - Invalid CORS request;Origin=Some(null);Method=GET;Access-Control-Request-Headers=None 
+0

プレイ仕様として、あなたのファイルを読み込むことができ

cd c:\Users\XXX\XXX python -m SimpleHTTPServer 

で、たとえば、ローカルWebサーバーを設定することができます 'デフォルトでは、すべての起源はallowed'であることを述べています。あなたは 'allowedOrigins = null'と' allowedOrigins = ["*"] 'の両方を試みたと言います。あなたはそれを削除しようとしましたか? – Bruno

+0

ヒントをありがとう。残念ながら、それはトリックをしません。 – mollwitz

+0

私はこの問題が 'Origin = Some(null)'にあると思います。 Playはこれを 'isValidOrigin =新しいURI(" null ")として検証します。getScheme ne null'。それは偽を返します。あなたは有効な 'Origin'を使ってリクエストを行うことができますか?これは 'Origin = 'ですか? – Bruno

答えて

2

ローカルファイルからCORSを動作させることはできません。ブラウザはoriginというnullのヘッダー値をサーバーに送信し、Playはaccess-control-allow-originヘッダーで応答しません。テストのために、あなたは次にあなたが

http://localhost:8000/index.html

+0

あなたの答えをありがとう。null値も受け入れられるようにPlayを設定することはできませんか? CORS(https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi)用のクロムプラグインを使用すると、ローカルファイルからlocalhostを呼び出すことができるため、CORSはまだ動作していないと思います。 – mollwitz

+0

PlayのようにPlayを設定する方法が見つからず、十分なソースコードを読み込んで、そのための準備がないと思っています。その拡張子は 'origin'ヘッダーを変更しないので、あなたはPlayで幸せにならないでしょう。開発ツールでそのヘッダを監視してください。ローカルWebサーバーを試してください。 – cayhorstmann

1

application.confでこれを配置しよう(それはすべての起源をできるようになります)

play.filters.cors.allowedOrigins = null 

とCORSが

play.filters.enabled += "play.filters.cors.CORSFilter" 
をフィルタリング無効にしません
+0

残念ながら、それは問題を解決しません。とりあえずありがとう! – mollwitz

+0

大丈夫then play.filters.cors.allowedOrigins = ["http:// localhost:9000"] – cutoffurmind

+0

私は別のドメインから自分のRESTサービスにアクセスしているのでどちらもうまくいきません – mollwitz

関連する問題