0

CORS と Javascript について、および投稿のヘッダーの変更について多くのトピックを読みましたが、探している適切な例が見つかりません。

そこで、まず状況を説明することから始めます。

  • これは私の手の届かないところにあるため、Web サーバーに何も変更できません (これは SAP クラウド ポータルです)。
  • 変更できるのは POST コードだけなので、送信する内容を制御することしかできません。

私が抱えている問題は、次の投稿で説明されています: jQuery $.ajax(), $.post send "OPTIONS" as REQUEST_METHOD in Firefox

--> 私の FF & Chrome ヘッダーは、METHOD POST の代わりに METHOD OPTIONS を送信します。

IE では動作するが FF および Chrome では動作しないサンプル コードを作成しました。

var dataString = "<result><firstname>example</firstname><lastname>ThisIsSparta</lastname></result>";
    var urlString = "http://delyo001.you.local:8000/sap/bc/youconsulting/ws/rest/anonymous/z_names_post";

    //Add TO SAP.
    var aData =  
            jQuery.ajax({
                type: "POST",
                contentType: "application/xml",
                url: urlString,  // for different servers cross-domain restrictions need to be handled
                data: dataString,
                dataType: "text",
                success: function(xml) { // callback called when data is received
                    //oModel.setData(data);             // fill the received data into the JSONModel
                    alert("success to post");
                },

                error: function(xml) { // callback called when data is received
                    //oModel.setData(data);             // fill the received data into the JSONModel
                    alert("fail to  post");
                }
            });
        });

または

var invocation = new XMLHttpRequest();
var url = 'http://delyo001.you.local:8000/sap/bc/youconsulting/ws/rest/anonymous/z_names_post';
var body = '<result><firstname>perthyrtyrtygop</firstname><lastname>sparta</lastname></result>';


   invocation.open('POST', url, true);
   invocation.setRequestHeader('X-PINGOTHER', 'pingpong');
   invocation.setRequestHeader('Content-Type', 'application/xml');
   invocation.send(body);

これを修正する2つの方法を見つけましたが、例はありません: - プロキシで何かをしますか? - 特定のヘッダーを送信する

問題の詳細については、次の URL を参照してください。 - http://scn.sap.com/message/13697625#13697625

4

1 に答える 1

1

サーバー側で正しいヘッダーを設定できず、jsonP の応答を変更できない場合は、実際にプロキシを使用する必要があります。

プロキシ スクリプトは一種のミドルウェアです。スクリプトにリクエストを送信すると、スクリプトがデータを取得して返します。たとえば、php プロキシ。asp、jsp、flash、さらには Java アプレットでも同じことができます。

これで、SAP サービス、プロキシ (php) ファイルが任意の場所に配置され、ローカルの JavaScript がプロキシと同じドメインに配置されました。CORSすら必要ありません。

プロキシを別のドメインに配置する場合は、php ファイルが正しいヘッダーを送信していることを確認する必要があります。(Access-Control-Allow-Origin yourdomainまたはAccess-Control-Allow-Origin * for allow all)

于 2012-12-04T15:03:35.117 に答える