2010-03-19 59 views
0

我們正在使用GWT中的服務器作爲tomcat製作的應用程序。 項目正常運行良好,但有些情況下服務器重新啓動。在這樣的時間點,通過代碼所做的AJAX調用下面返回空白文本 與狀態碼304解決HTTP 304 - 在通過GWT進行的AJAX調用中未修改

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 
     } 
    } 
); 

通常我們從這個響應文本內的服務器能夠找回一些數據。當響應本身是空白時,我們現在如何獲取數據?

+0

你解決了這個問題嗎? – Mushfiq

回答

1

HTTP 304意味着服務器期望客戶端使用頁面的緩存副本。 HTTP規範指出響應正文應該爲空的情況下的304響應(請參閱see RFC 2616 section 10.3.5)。你是否得到了304錯誤,是因爲服務器搞砸了,還是因爲它真的希望響應被客戶端緩存?也許試試setting Cache-Control: no-cache in your headers

如果304種狀態都搞亂了相關的服務器,你不能讓他們停下來,你有幾個選擇:

  1. 其實緩存響應在您的應用程序,這樣,當你得到一個304,你可以使用緩存的響應
  2. 捕獲304級響應,然後重試RPC(也許是遞歸,指定retryTimesLeft作爲參數傳遞給函數)
  3. 表明,304的實際上是失敗和調用一些錯誤處理功能來處理缺少數據

您選擇的顯然取決於您的應用程序的需求。

相關問題