4

このエラーに関しては、すでに多くの質問があることを私は知っています。しかし、ヘッダーを設定した後でも、これを機能させることはできません

         "Access-Control-Allow-Origin" : "*"

私のサーバー側で。

これが私のSpringMVCコントローラーメソッドです:

    @RequestMapping(method=RequestMethod.GET, value="dummy/{num}")
    @ResponseBody
    public ResponseEntity<Result> dummy(@PathVariable String num)
    {
        int n = Integer.parseInt(num);
        final Result result = new Result();
        result.setAddition(n+20);
        result.setMultiplication(n*20);
        result.setSubtraction(n-20);
        HttpHeaders headers = new HttpHeaders();
        headers.add("Access-Control-Allow-Origin", "*");
        ResponseEntity<Result> ent = new ResponseEntity<Result>(result,headers,HttpStatus.CREATED);
        return ent;
    }

そしてこれがJqueryからの私のAJAX呼び出しです

$.ajax({
    url: "http://localhost:8010/Probe_Rest_Service/test/dummy/9",
    type: "get",
    crossDomain: true,
    dataType: 'json',
    headers: { 
    "Content-type" : "application/json"
    },

    success: function(data){

        console.log("It worked!");
        alert(data);
    },

    error: function(){
        // enable the inputs
        alert("error");
    }
});

Chrome用のdev-httpクライアントからRESTAPIを呼び出してみましたが、正常に機能します(応答ヘッダーにはAccess-Control-Allow-Origin:*が設定されています)。しかし、HTMLファイルから呼び出すと、エラーが発生します。

残りのAPIにはJBossを使用し、クライアントWebページをホストするためにTomcatを使用します

4

1 に答える 1

3

コンテンツタイプでリクエストを送信しているためapplication/json、クライアントはCORSプリフライトリクエストを実行する必要があります。

CORS仕様では、、、または以外のコンテンツタイプでapplication/x-www-form-urlencodedは、ヘッダーが許可されているかどうかを判断するためにプリフライトリクエストが必要であるとされています。multipart/form-datatext/plain

したがって、飛行前のリクエストを処理する必要があります(HTTPメソッド= OPTIONS)。

簡単にするために、サーバーにヘッダーで応答させます。

Access-Control-Allow-Headers: *

これにより、すべてのリクエストヘッダーが許可されます。

アップデート

あなたの質問をもう一度読みましたが、理解できないことがわかりContent-Typeました。HTTPGETリクエストのヘッダーを最初に送信するのはなぜですか。これは正しくありません。

削除するだけ

headers: { 
   "Content-type" : "application/json"
}

そしてさらに試みる。それはそれを修正するかもしれません!

于 2013-03-19T21:20:09.827 に答える