2013-01-04 7 views
7

私はインターネットでいくつかの調査をしましたが、私はこの件について完全な画像を得ることはできませんでした。誰でもこの答えを今と永遠に解決するのを助けることができますか?ドメイン間のjson要求でヘッダを設定することはできますか?

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

  • 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が別のドメインにある場合、要求は送信されますが、ベアラヘッダーはありません。

このベアラヘッダーは、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> 
+0

[cross-origin 'Authorization'-header with jquery.ajax()](http://stackoverflow.com/questions/9559947/cross-origin-authorization-header-with-jquery-ajax)の可能な複製。 – apsillers

答えて

10

JSONPでは、カスタムヘッダーの設定はできません。

CORSの場合、サーバーはクライアントからの珍しい要求ヘッダーを許可するために、Access-Control-Allow-Headersヘッダーを送信する必要があります。 HTML5 Rocks CORS pageから:

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

したがって、サーバーは、ブラウザがそれを要求して、サーバーにAuthorizationを送信するために許可されている知っているようにAccess-Control-Allow-Headers: Authorizationを送信する必要があります。このヘッダーがないと、ブラウザーは要求に共通のヘッダーをいくつか送信し、残りは無視します。

1

「JSONPは、」スクリプトタグを作成し、別のドメインからリソースをロードするために属性src=を使用して動作しますので。だから私はリクエストヘッダーを変更する方法はないと思う。

0

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

関連する問題