6

SenchaTouch2.1.0を使用しています。HTTPGET呼び出しを行っています。CORSリクエストです。したがって、期待どおりに飛行前のHTTPOPTIONSコマンドを送信しています。

サーバーにCORSフィルターをインストールして構成しました。私のコードからの呼び出しは昨日まで非常にうまくいっていました。今日突然、データの読み込みを停止しました。Chromeでネットワーク通話を確認すると、OPTIONSメソッドが「読み込みがキャンセルされました」と表示されます。

メソッド:OPTIONS
ステータステキスト:「ロードがキャンセルされました」
タイプ:保留中
イニシエーター:Connection.js: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からの非常に良い応答が得られます。結果は次のとおりです。

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

この呼び出しを行うためのストアのSenchaコード:

    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,

この問題を解決する方法を理解するのを手伝ってください。

4

3 に答える 3

2

これは、GoogleChromeの最後のアップデートによる問題のようです。Ironブラウザで試してみると動作します。

于 2013-01-23T02:38:24.793 に答える
0

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

参照:https ://bugs.webkit.org/show_bug.cgi?id = 99983

于 2013-02-05T17:01:47.233 に答える
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に変更します。

于 2014-02-07T15:53:27.190 に答える