0

サーバーをTomcatとして、GWTで作成されたアプリケーションを使用しています。プロジェクトは正常に実行されますが、サーバーが再起動される場合があります。そのような時点で、以下のコードによって行われた ajax 呼び出しは、ステータス コード 304 で空白のテキストを返します。

RequestBuilder requestBuilder = new RequestBuilder(RequestBuilder.POST, URL.encode(serverUrl)); //-- serverUrl is the url to which this call is posted to.
requestBuilder.setHeader("Content-Type", "application/x-www-form-urlencoded");
requestBuilder.setHeader("Expires","0");
requestBuilder.sendRequest(
    postData, 
    new RequestCallback()
    {

        public void onError(Request request, Throwable exception)
        {
            //Do nothing
        }

        public void onResponseReceived(Request request, Response response)
        {
            //sometimes when the server is restarted, I get response.getStatusCode() = 304 and the response.getText() as blank
        }
    }
);

通常、この応答テキスト内でサーバーから何らかのデータが返されます。応答自体が空白の場合、どうすればデータを取得できますか?

4

1 に答える 1

1

HTTP 304 は、クライアントがキャッシュされたページのコピーを使用することをサーバーが期待していることを意味します。HTTP 仕様では、304 応答の場合は応答本文を空にする必要があることが示されています ( RFC 2616 セクション 10.3.5 を参照)。サーバーが混乱しているため、またはクライアントによって応答がキャッシュされることを本当に期待しているために、304 エラーが発生していますか? おそらく、ヘッダーに設定Cache-Control: no-cacheしてみてください。

304 ステータスがサーバーの混乱に関連しており、それらを停止できない場合は、いくつかのオプションがあります。

  1. 304 を受け取ったときにキャッシュされた応答を使用できるように、実際に応答をアプリにキャッシュします。
  2. 304 応答をキャプチャし、RPC を再試行します (おそらく再帰的にretryTimesLeft、関数のパラメーターとして a を指定します)。
  3. 304 が実際には失敗であることを示し、エラー処理関数を呼び出してデータの不足に対処する

どちらを選択するかは、明らかにアプリのニーズによって異なります。

于 2010-04-18T06:33:32.773 に答える