2012-02-05 15 views
2

私はクロスドメインGETリクエストを作成しようとしています。私はサーバー上でCORSフィルターを使用しています。私はchrome、firefox、iphoneでこれをテストして、うまくいきます。アンドロイド2.3.3では、プリフライトリクエストはうまく見えますが、実際のリクエストはOriginヘッダーを送信していません。私はデータを元気にしていますが、ステータス0のajaxエラーが出ています。私はPOSTリクエストに変更しようとしました。ここでアンドロイド2.3.3で承認ヘッダーとCORS付きのAjax GETリクエストとAndroid 2.3.3

は、Ajaxのコードは次のとおりです。

...ここ

$.ajax({ 
    beforeSend: function (xhr, settings) { 
     xhr.withCredentials = true; 
     xhr.setRequestHeader('Authorization', 'Bearer myoathtoken'); 
    }, 
    dataType: "json", 
    type: "GET", 
    url: getMyUrl() + '/data.json', 
    success: function(data) { 
     alert("It works"); 
    } 
}); 

がここに来るの結果(動作しません)

OPTIONS http://test2.mydomain:9990/data.json HTTP/1.1 
Host: test2.mydomain:9990 
Accept-Encoding: gzip 
Accept-Language: en-US 
Access-Control-Request-Headers: Authorization, Accept 
Cookie: mycookie=mycookieval 
Accept-Charset: utf-8, iso-8859-1, utf-16, *;q=0.7 
Referer: http://test.mydomain:9990/ 
User-Agent: Mozilla/5.0 (Linux; U; Android 2.3.3; en-us; sdk Build/GRI34)   AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 
Origin: http://test.mydomain:9990 
Access-Control-Request-Method: GET 
Accept: text/xml, text/html, application/xhtml+xml, image/png, text/plain, */*;q=0.8 

HTTP/1.1 200 OK 
Server: Apache-Coyote/1.1 
Access-Control-Allow-Origin: http://test.mydomain:9990 
Access-Control-Allow-Credentials: true 
Access-Control-Allow-Methods: HEAD, GET, OPTIONS, POST 
Access-Control-Allow-Headers: Authorization, X-Requested-With, Origin, Accept, Content-Type 
Content-Length: 0 
Date: Fri, 03 Feb 2012 21:29:05 GMT 

GET http://test2.mydomain:9990/data.json HTTP/1.1 
Host: test2.mydomain:9990 
Accept-Encoding: gzip 
Referer: http://test.mydomain:9990/ 
Accept-Language: en-US 
User-Agent: Mozilla/5.0 (Linux; U; Android 2.3.3; en-us; sdk Build/GRI34)  AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 
Cookie: mycookie=mycookieval 
Authorization: Bearer oauthtoken 
Accept: application/json, text/javascript, */*; q=0.01 
Accept-Charset: utf-8, iso-8859-1, utf-16, *;q=0.7 

HTTP/1.1 200 OK 
Server: Apache-Coyote/1.1 
Cache-Control: no-cache 
Content-Type: application/json;charset=UTF-8 
Transfer-Encoding: chunked 
Date: Fri, 03 Feb 2012 21:29:08 GMT 

は結果であります郵便を送る(作品

OPTIONS http://test2.mydomain:9990/data.json HTTP/1.1 
Host: test2.mydomain:9990 
Accept-Encoding: gzip 
Accept-Language: en-US 
Access-Control-Request-Headers: Authorization, Accept 
Cookie: mycookie=mycookieval 
Accept-Charset: utf-8, iso-8859-1, utf-16, *;q=0.7 
Referer: http://test.mydomain:9990/ 
User-Agent: Mozilla/5.0 (Linux; U; Android 2.3.3; en-us; sdk Build/GRI34) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 
Origin: http://test.mydomain:9990 
Access-Control-Request-Method: POST 
Accept: text/xml, text/html, application/xhtml+xml, image/png, text/plain, */*;q=0.8 

HTTP/1.1 200 OK 
Server: Apache-Coyote/1.1 
Access-Control-Allow-Origin: http://test.mydomain:9990 
Access-Control-Allow-Credentials: true 
Access-Control-Allow-Methods: OPTIONS, POST, HEAD, GET 
Access-Control-Allow-Headers: Authorization, X-Requested-With, Origin, Accept, Content-Type 
Content-Length: 0 
Date: Fri, 03 Feb 2012 21:21:30 GMT 

POST http://test2.mydomain:9990/data.json HTTP/1.1 
Host: test2.mydomain:9990 
Accept-Encoding: gzip 
Accept-Language: en-US 
Cookie: mycookie=mycookieval 
Authorization: Bearer oauthtoken 
Accept-Charset: utf-8, iso-8859-1, utf-16, *;q=0.7 
Referer: http://test.mydomain:9990/ 
User-Agent: Mozilla/5.0 (Linux; U; Android 2.3.3; en-us; sdk Build/GRI34) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 
Origin: http://test.mydomain:9990 
Accept: application/json, text/javascript, */*; q=0.01 
Content-Length: 0 

HTTP/1.1 200 OK 
Server: Apache-Coyote/1.1 
Access-Control-Allow-Origin: http://test.mydomain:9990 
Access-Control-Allow-Credentials: true 
Cache-Control: no-cache 
Content-Type: application/json;charset=UTF-8 
Transfer-Encoding: chunked 
Date: Fri, 03 Feb 2012 21:21:32 GMT 

もう少しテストを行い、認証ヘッダーを数式から取り出して、GETを実行しました。なぜ承認ヘッダーがget要求に対して失敗するのか不明です。何か案は?

+0

CORSリクエストをテストするための簡単なテストページを作成しました。 Androidでリクエストを試してみて、その返答を見てみましょうか?http://client.cors-api.appspot.com/client?server.enable=true&server.httpstatus=200&server.methods=GET&server.headers=Authorization&client.method = GET&client.headers.Authorization = Test – monsur

+0

応答してくれてありがとう! http://server.cors-api.appspot.com/serverにGETリクエストを送信していますか? loadstart 解雇XHRイベント:カスタムヘッダー 火力XHRイベントとID = 6058740&はhttpStatus = 200&メソッド= GET&ヘッダ=認可、エラー XHRステータス: 解雇XHRイベントをreadystatechange 0 XHRのステータステキスト: – bmurmistro

+0

を私はアンドロイドのための同じ応答を取得2.2,2.3、および3.x。コンソールログ:3.x:E/browser(333):コンソール:XMLHttpRequestはhttp://server.cors-api.appspot.com/server?id=6202948&httpstatus=200&methods=GET&headersをロードできません=権限。 Originのhttp://client.cors-api.appspot.comは、Access- Control-Allow-Originによって許可されていません。 null:1 – bmurmistro

答えて

1

私は同じ問題を抱えていますが、認可ヘッダーに問題はありませんが、GET要求のオリジンヘッダーが欠落しています。これはまた、投稿要求が機能している理由です.CORSには原点ヘッダーがあり、原点ヘッダーは必須です。

これは、OPTIONSプリフライトコールにオリジンヘッダーが設定されていることです。

関連する問題