0

Luracast の Restler API フレームワークをインストールしましたが、ドメイン間でPUT または DELETE を送信する場合を除いて、すべてで素晴らしい成功を収めています。以下は、すべてが同じサーバー上にある場合は正常に機能しますが、ドメインをクロスすると、Firebug は PUT または GET を OPTIONS として表示し、サーバー上で見つかりません。PUT または DELETE の代わりに送信される "OPTIONS" を停止する方法に困惑しています。

$.ajax({
    url: url,
    type: 'PUT',
    data: "thename="+ $('#TheName').val(),
    success: function(xhr, status) {
        console.info(xhr);
    },
    error: function(xhr, status) {
        console.info(xhr.responseText);
    },
    complete: function(xhr, status) {
        $('#showResponse').val(xhr.responseText);
    }
});

どこか別のスレッドごとに、以下を Restler 出力に追加しました。

    header('Access-Control-Allow-Origin: *');
    header('Access-Control-Allow-Methods: GET, POST, DELETE, PUT, OPTIONS');

localhost およびクロスドメインでの PUT/GET/POST/DELETE

4

1 に答える 1

0

適切な応答ヘッダーを取得しましたが、サーバーもそれらのヘッダーを使用して OPTIONS 要求に応答する必要があります。

これはクロスオリジン リクエストであり、プリフライトと呼ばれるものの対象となります。PUT または DELETE リクエストを行う前に、ブラウザはターゲット Web サーバーに、別のドメインの Web ページから安全に実行できるかどうかを尋ねます。OPTIONS メソッドを使用してそれを求めます。ターゲット サーバーが問題ないと判断しない限り、Web ブラウザは PUT または DELETE リクエストを送信しません。PUT または DELETE が行われると、応答を受け入れるには遅すぎるため、要求をプリフライトする必要があります。機密情報が漏洩した可能性があります。

GET と POST はもう少し複雑です。ブラウザーは最初に確認せずに安全であると判断する場合もあれば、ブラウザーがプリフライト チェックを行う場合もあります。リクエストで特定のヘッダーが使用されているかどうかによって異なります。

CORS 仕様には、詳細な情報が含まれています。肝心なのは、ターゲット Web サーバーが OPTIONS メソッドをサポートしていない限り、Web ページのコードはこれらの要求を行うことが許可されず、OPTIONS メソッドへの応答には、そのような要求が許可されていることを示すヘッダーが含まれているということです。

于 2013-01-21T19:19:40.870 に答える