8

私はインターネットでいくつかの調査を行いましたが、この主題についての全体像を把握することはできませんでした。誰かが今そして永遠にこの答えを解決するのを手伝うことができますか?

これは私がこれまでに見つけたものです:

  • jsonpを使用してクロスドメイン呼び出しを行うことができます。jsonp呼び出しでヘッダーを変更することは許可されていません
  • サーバーで許可されている場合は、jsonを使用してクロスドメイン呼び出しを行うことができます。

これは私がやろうとしていることです:

$.ajax({
    type: "GET",
    crossDomain: true,
    beforeSend: function (request) {
        request.setRequestHeader("Authorization", "Bearer " + ($("#accesstoken").val()));
    },
    contentType: "application/json; charset=utf-8",
    url: myJSonServer + encodeURI(operation),
    dataType: 'json',
    cache: false,
    success: callback,
    error: function (jqXhr, textStatus, errorThrown) { alert(textStatus + ": " + errorThrown); }
});

これが起こっていることです:

  • myJSonServerが同じドメインにある場合は、まったく問題ありません。
  • myJSonServerが別のドメインにある場合、リクエストは送信されますが、Bearerヘッダーはありません

このBearerヘッダーは、oAuth2標準の一部です。

ブラウザでaccessTokenを設定することは、おそらくこれが最善の解決策ではないという事実を認識しています。そして、私はこの状況にプロキシを使用できることを知っています。

クロスドメインのjsonリクエストでヘッダーを設定できるかどうか、または設定できるかどうかだけ知りたいのですが。
ありがとう

- 問題が解決しました

私はMVC4を使用していて、web.configにcrossDomainScriptAccessEnabled="true"を追加しました。これで十分だと思いましたが、apsillersの答えで問題は解決しました。これをweb.configに追加しました:

 <system.webServer>
     <httpProtocol>
         <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Headers" value="Authorization" />
         </customHeaders>
      </httpProtocol>
   </system.webServer>
4

3 に答える 3

11

JSONPでは、カスタムヘッダーを設定することはできません。

CORSを使用する場合、サーバーはヘッダーを送信してAccess-Control-Allow-Headers、クライアントからの一般的でないリクエストヘッダーを許可する必要があります。HTML5 Rocks CORSページから:

Access-Control-Allow-Headers...-サポートされているリクエストヘッダーのカンマ区切りのリスト。

したがって、サーバーはを送信して、リクエストとともにサーバーAccess-Control-Allow-Headers: Authorizationに送信できることをブラウザに通知する必要があります。Authorizationこのサーバーヘッダーがないと、ブラウザーはリクエストとともにいくつかの一般的なヘッダーのみを送信し、残りは無視します。

于 2013-01-05T17:45:51.360 に答える
1

「jsonp」はスクリプトタグを作成し、属性を使用してsrc=別のドメインからリソースを読み込むことで機能するためです。したがって、リクエストヘッダーを変更する方法はないと思います。

于 2013-01-04T09:20:56.473 に答える
0

クロスオリジンリクエストを作成するためにJSONPを使用している場合、答えはノーです。そのようなリクエストにHTTPヘッダーを設定することはできません。クロスオリジンリクエストを作成するためにCORSを使用している場合、答えは「はい」です。プレーンXHRを使用してリクエストを作成しているためです:http://en.wikipedia.org/wiki/Cross-origin_resource_sharing

于 2013-01-05T17:41:02.507 に答える