0

jQuery v1.8.3 を使用して、クロスドメイン GET ajax リクエストを実行したいと考えています。

これが私のセットアップです:

  1. リクエストに対してdomain1.devこれらの CORS ヘッダーを発行するサーバーがあります。

    • Access-Control-Allow-Origin: *
    • Access-Control-Allow-Credentials: true
    • Access-Control-Allow-Methods: *
    • Access-Control-Allow-Headers: *
  2. と呼ばれるdomain2.devからjavascriptをロードするWebアプリケーションがあります。domain1.devdomain1.js

    このdomain1.jsファイルでは、次の AJAX リクエストを発行します。

    jQuery.ajax('http://domain1.dev/path', {
        headers: {'Accept': 'application/json'},
        xhrFields: {
            withCredentials: true
        },
        statusCode: {
            200: function(data, textStatus, jqXHR) {
                // some logic
            },
            401: function(data, textStatus, jqXHR) {
                // some other logic
            }
        }
    })
    
  3. からページを読み込みますdomain2.dev。AJAX リクエストが (プリフライトなしで) 発行され、成功しました (ステータス コード 200)。

何か案が?

編集:

によって送信される応答ヘッダーdomain1.dev:

Access-Control-Allow-Cred...    true
Access-Control-Allow-Head...    Accept, Accept-Encoding, Accept-Language,    Connection, Cookie, Host, Origin, Referer, User-Agent
Access-Control-Allow-Meth...    GET
Access-Control-Allow-Orig...    *
Cache-Control   private
Connection  keep-alive
Content-Type    application/json
Date    Thu, 22 Nov 2012 22:24:44 GMT
Server  nginx/1.2.3
Transfer-Encoding   chunked
X-Powered-By    PHP/5.4.6
x-debug-token   50aea62c91ee6

リクエストヘッダーは次のとおりでした:

Accept  application/json
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Connection  keep-alive
Cookie  obfuscated=uk40mmmqbffues5cpn6omj6mf0; __utma=126865951.1486960365.1353615466.1353615466.1353619027.2; __utmz=126865951.1353615466.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utmc=126865951
Host    domain1.dev:8080
Origin  http://domain2.dev:8080
Referer http://domain2.dev:8080/app_dev.php
User-Agent  Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/17.0 Firefox/17.0
4

1 に答える 1

3

バックエンドでは、許可するヘッダーとメソッドを明示的に指定する必要があります。Access-Control-Allow-Methodsおよび応答ヘッダーは、Access-Control-Allow-Headersワイルドカードをサポートしていません。

Access-Control-Request-Methodsメソッド/ヘッダーを許可する場合は、(プリフライト) リクエストでヘッダーとヘッダーを探してAccess-Control-Request-Headers、リテラル値を返します。

また、が trueのAccess-Control-Allow-Origin場合にワイルドカードを使用することはできません。withCredentials前に説明したのと同じメカニズムを使用してワイルドカードをシミュレートするか、使用しないでくださいwithCredentials

于 2012-11-22T22:02:06.753 に答える