2014-09-10 109 views
0

HTTP響應代碼我有一個運行一個SQL查詢,通過多個列的一個排序,並返回一個請求的頁面(如跳躍海里界限N)的Web服務。它前面的用戶界面遵循「加載更多」模式,將所有加載的結果頁面累積在一個視圖中。的陳舊分頁

問題是新的和刪除的記錄,這些記錄可能隨時發生,導致「加載更多」的結果被錯誤地對齊,並且取決於正在使用的排序,甚至掩蓋了應該顯示的新記錄。除了前端定時器的自動刷新之外,我還將添加一個timestamp字段給RESTful請求和響應格式,以允許webapp檢測視圖應該在「加載更多」調用時完全重新加載。

我的問題是,什麼樣的HTTP狀態代碼是這個信號最佳匹配?在reviewing the codes我沒有看到一個確切的適合。我想使用302 Found的鏈接到'頁面1',但我想知道這是否會導致不必要的重定向緩存。我也想到了400 Bad Request,但是請求沒有任何問題,只是數據需要重新加載。

頁是由一個POST /path呼叫請求頁以JSON團體所提供的服務。

我不是一個完整的純粹,所以任何會使它沒有緩存或其他副作用的工作是可以接受的,但我想堅持REST儘可能原則。

回答

1

任何可能使其沒有緩存或其他副作用的工作是可以接受的

POST請求的響應are not cacheable,除非你明確地將其標記爲此類。因此,您可以使用狀態碼,響應頭和響應實體的任意組合來向客戶端傳遞「請重新載入」消息。

您可以使用conditional requests。將您客戶的時間戳記包含在If-Unmodified-Since標題中。如果客戶端陳舊,請與412 Precondition Failed聯繫。客戶必須知道如何重新加載。

你可以試試307 Temporary Redirect,但只有當你在/path編碼分頁,因爲在收到307(我假設你正在做的AJAX這裏)的XMLHttpRequest將透明地重新提交相同的POST請求到新Location(至少這是我的Chromium所做的)。您的實際頁面JSON必須在其覆蓋的範圍內包含元信息,以便客戶端知道它必須替換行,而不是附加它們。

+0

'如果未修飾-Since'和代碼412是一個不錯的選擇。 – wberry 2014-09-11 16:25:50