2013-01-16 11 views
6

私はSencha Touch 2.1.0を使用しています。私はHTTP GET呼び出しを行っています。これはCORS要求です。したがって、期待どおりにプリフライトHTTP OPTIONSコマンドを送信しています。HTTPオプションフライト前リクエストロード中にChromeで保留状態がキャンセルされました

サーバーにCORSフィルタをインストールして構成しました。私のコードからの呼び出しは昨日までうまくいっていた。突然今日、データのロードが停止しました。 OPTIONS
状態テキスト:「ロードがキャンセル」
タイプ:
イニシエータを保留:Connection.js私はネットワークがChromeで呼び出しをチェックすると、私はOPTIONSメソッドは

方法「をキャンセルロード」として表示されていることがわかり:319

CORSフィルタを初めて設定したときも同様の問題がありました。私はブラウザのキャッシュをクリアすると、それは動作し始めた。今回はなぜ突然それが動作を停止したのか分かりません。ブラウザのキャッシュと履歴をクリアしても修正されません。

私はFirefoxでHTTPRequestorから正確に同じ呼び出しを行うとうまくいきます。ここでは、呼び出しです。私は機密理由のためにURLを隠しました。

OPTIONS http://myurl/rest/items?_dc=1358304888220&page=1&start=0&limit=25 HTTP/1.1 
Access-Control-Request-Method: GET 
Origin: http://localhost:8080 
Access-Control-Request-Headers: accept, origin, x-requested-with 

正確なリクエストで、HTTPRequestorから非常に良い応答が得られます。ここでの結果は次のとおりです。この呼び出しを行うためStoreで

OPTIONS http://myurl/rest/items?_dc=1358304888220&page=1&start=0&limit=25 
Access-Control-Request-Headers: accept, origin, x-requested-with 
Access-Control-Request-Method: GET 
Origin: http://localhost:8080 


-- response -- 
200 OK 
Date: Wed, 16 Jan 2013 03:19:27 GMT 

Server: Apache-Coyote/1.1 

Access-Control-Allow-Origin: http://localhost:8080 

Access-Control-Allow-Credentials: true 

Access-Control-Allow-Methods: HEAD, GET, POST, OPTIONS 

Access-Control-Allow-Headers: X-Requested-With, Origin, Accept, Content-Type 

Content-Length: 0 

Strict-Transport-Security: max-age=15768000, includeSubDomains 

Keep-Alive: timeout=15, max=100 

Connection: Keep-Alive 

煎茶コード:

proxy: { 
     type: 'ajax', 
     method: 'GET', 
     url: 'http://myurl/rest/items', 
     withCredentials: true, 
     useDefaultXhrHeader: false, 
     disableCaching: false, 
     headers: { 
      "Accept": "application/json" 
     }, 
     failure: function(response) { 
      if (response.timedout) { 
       Ext.Msg.alert('Timeout', "The server timed out :("); 
      } else if (response.aborted) { 
       Ext.Msg.alert('Aborted', "Looks like you aborted the request"); 
      } else { 
       Ext.Msg.alert('Bad', "Something went wrong with your request"); 
      } 
     }, 
     success: function(response){ 
      Ext.Msg.alert(response.responseText); 
     } 
    }, 
    autoLoad: true, 

私はこの問題を解決する方法を理解するのに役立ちます。

+0

リクエストに使用しているJavaScriptコードを表示できますか?あなたは '.withCredentials = true;'を設定していますか? – monsur

+0

@Monsur、私はこの呼び出しを行うために使用される賢者コードを追加しました。はいwithCredentialsはtrueです。このコードは昨日まで実際に働いていて、突然動いていませんでした。何がうまくいかなかったのか分かりません。私はサーバー側で何も変更を加えなかった。 –

答えて

2

これは、Google Chromeの最新のアップデートのために問題があるようです。私はIronブラウザで試してみるとうまくいきます。

0

Webkitブラウザのベータ版でも同様の問題が発生していました。その結果、Content-TypeヘッダーはBlobを含むXMLHttpRequestsに暗黙的に設定されているので、アップロードサーバーのAccess-Control-Allow-Headersに追加する必要がありました。

参照してください:https://bugs.webkit.org/show_bug.cgi?id=99983

0

私はこの問題を解決しました。サーバーの応答ヘッダーは、次のように設定する必要があります。

"Access-Control-Allow-Origin": "*" 
"Access-Control-Allow-Headers": "Origin, X-Requested-With, Content-Type, Accept" 

これは既に実行済みです。私は、GETメソッドまたはPOSTメソッドにX-Requested-Withヘッダが含まれていると、OPTIONSメソッドが最初に送信されると思います。 X-Requested-WithヘッダーはデフォルトのXHRヘッダーにあります。したがって、useDefaultXhrHeaderをfalseに設定する必要があります。 Ext.data.Storeはこのパラメータをサポートしていませんでした。 sdk/src/data/Connection.jsを編集し、useDefaultXhrHeaderのデフォルト値をfalseに変更します。

関連する問題