6

スプレー サーバー (cors ヘッダーが既にサポートされているバージョン 1.1-20131011) に CORS サポートを実装しようとしていました。

現在、サーバー コードは次のようになっています。

trait DefaultCORSDirectives { this: Directives =>
  def defaultCORSHeaders = respondWithHeaders(
      `Access-Control-Allow-Origin`(AllOrigins),
      `Access-Control-Allow-Methods`(HttpMethods.GET, HttpMethods.POST, HttpMethods.OPTIONS, HttpMethods.DELETE,
      HttpMethods.CONNECT, HttpMethods.DELETE, HttpMethods.HEAD, HttpMethods.PATCH, HttpMethods.PUT, HttpMethods.TRACE),
      `Access-Control-Allow-Headers`("Origin, X-Requested-With, Content-Type, Accept, Accept-Encoding, Accept-Language, Host," +
    " Referer, User-Agent, Overwrite, Destination, Depth, X-Token, X-File-Size, If-Modified-Since, X-File-Name, Cache-Control"),
      `Access-Control-Allow-Credentials`(true),
      `Access-Control-Max-Age`(3600)
    )
}

そして、このように使用されます

  defaultCORSHeaders {
      options {
        complete {
          StatusCodes.OK
        }
      } ~
      post {
        path("path") {
          //response
      }
   }

curl を使用すると、POST メソッドと OPTIONS メソッドの両方の応答が期待どおりになります。ただし、ブラウザーから、Origin is not allowed by Access-Control-Allow-Origin (Chrome) または Error 415 Unsupported Media Type (Firefox) が表示され、POST リクエストがまったく送信されていないようです。

要求する jQuery コードは次のとおりです。

$(document).ready(function () {
        $.post(url,
            {
               'params': "params",
            },
            function (data) {
                //handle response
            }
    );
});

CORS仕様と見つけたすべてのリソースを読み、Access-Control-Allow-ヘッダーの可能な組み合わせを試しました(Access-Control-Allow-Credentialsの有無、Access-Control-Allow-HeadersのさまざまなコンテンツとAccess-Control-Allow-Methods、Access-Control-Allow-Origin を * または単一の Origin に設定するなど)。また、ディスク (Origin null)、Web サーバー (Origin localhost:8888)、およびリモート サーバー (Origin standard url) からスクリプトを実行しようとしました。これは、一部のブラウザーがローカル オリジンのリクエストをブロックしているように見えますが、常に同じ否定的な結果になるためです。

これを機能させる方法を教えていただければ幸いです。

4

3 に答える 3

3

ディレクティブは使用しませんでしたが、rawheader を試してみましたが、うまくいきました。

コードは次のとおりです。

 path("ping"){
   get{
     respondWithMediaType(`application/json`){
       respondWithHeader(RawHeader("Access-Control-Allow-Origin","*")){
         complete{
           jsonPrefix + """{"result": "PONG"}"""
         }
       }
     }
   }
 }
于 2014-11-28T09:01:47.447 に答える
2

API に承認がある場合は、Authorization ヘッダーを に含める必要がありますAccess-Control-Allow-Headers

cUrl から cors をテストする唯一の方法は、Origin ヘッダーを使用する場合です: curl cors

于 2014-09-25T15:23:19.323 に答える