2015-09-04 24 views
0

我感興趣的是正確的行爲(標準明智或其他最佳實踐)當Web服務器負載過大時:它應該返回錯誤代碼,拒絕連接,超時,別的東西嗎?Web服務器在重載時如何運行?

+3

據的HTTP狀態代碼正式登記,[503服務不可用(http://tools.ietf.org/html/rfc7231#section-6.6.4)指示,其指示「服務器是目前無法處理該請求是由於臨時超載或定期維護造成的。「 – approxiblue

+0

「據」,雙「表示」,對我感到羞恥兩次。 – approxiblue

+0

@approxiblue:讓答案和賞金是你的:)獎勵點,如果你可以使它稍微更詳細。 –

回答

1

最佳做法肯定是給客戶的,爲什麼他們的要求無法處理一個明確的解釋。拒絕連接或超時不知道發生了什麼客戶端,所以他們可能(錯誤地)承擔任何數量的有關服務器的東西,比如服務器已經移動,服務消失了,服務器配置錯誤,還是真的任何可能導致拒絕的連接或超時。 503錯誤代碼可以清楚地表明由於過載或維護服務暫時中斷,並且很快會返回,因此,如果這是您的情況,那麼您肯定應該返回該錯誤代碼。

這也是爲什麼其他選項都比不上:

如果服務器拒絕連接,客戶端可以假定服務永久不可用,或者說他們還沒有正確驗證(這真的應該成爲一個403),但真的,被拒絕的連接可能意味着任何事情。客戶端不知道服務器過載。

如果服務器超時,再次這並不能真正告訴任何東西給客戶有用的。客戶端可能會認爲服務器無法訪問,並且該服務永遠不在該位置,或者可能認爲該Web服務器配置不正確。再一次,客戶端沒有清楚地表明服務器超負荷,必須猜測。

這意味着,最好的選擇是發送一個503錯誤。 503錯誤描述了客戶現在無法獲得服務的原因。它基本上意味着「目前服務不可用,但它很快就會來,所以再試一次」。從ietf spec

的503(服務不可用)狀態代碼表示該服務器 由於臨時過載 或定期維護,這將有可能一些 延遲後可緩解是目前無法處理該請求。

如果您的情況,然後告訴你的客戶有503錯誤,所以客戶不必試圖猜測什麼拒絕連接或超時可能意味着。 HTTP狀態代碼是有原因的,所以請使用它們!

相關問題