每天進步一點點 Swift中HTTP返回碼解析

2021-06-20 18:51:47 字數 3085 閱讀 7821

在剛開始接觸swift的時候,為了能更好的完成專案開發,當時花了點時間簡單總結了一下swift返回碼所對應的意思以及產生的原因。現在拿出來分享一下,希望對需要的朋友有用。

根據swift官方文件所描述對外的值主要有:200,201,202,204,400,403,404,405,408,409,411,412,500,503,507。下面將根據

swift特性(account/container/object)來分別討論各個返回碼產生的原因及其代表的意思。

1.account

200  

列取賬戶下的容器成功

201建立賬戶成功

202獲取賬戶的元資料資訊成功

2041. 

建立或者更新元資料成功

2. 獲取元資料成功

3. 刪除元資料成功

400 建立

account的名字長度大於256個位元組

403刪除了乙個賬戶,但是swift內部並未來得急將其刪除,只是將其標誌為刪除且在等待收割程序將其**,而此時又發起了建立該賬戶的請求

404賬戶不存在

405錯誤的請求方法(

put delete post head get等之外的方法)

409

刪除賬戶,賬戶正在被刪除而此時發起了建立賬戶請求則會返回該值

4121. 

列取容器時傳入了無法解析的

delimiter

2. 列取容器時傳入的limiter大於了account_listing_limit(預設10000)

3. http請求中包含了非utf-8的字元

2.container

200  

列取容器下的物件成功

201建立容器成功

202建立容器時容器已經存在

2041. 

刪除容器成功

2. 獲取元資料成功

3. 建立或者更新元資料成功

4. 刪除元資料

4001. 建立的容器名長度大於256個字元

403如果設定了每個賬戶下最多能有容器個數的限制(

max_containers_per_account),當賬戶下達到該限制時會返回該值

,預設可以建立無限個容器。

4041. 

當容器不存在時返回該值

2. 在對容器操作時對應的賬戶不存在

405錯誤的請求方法(

put delete post head get等之外的方法)

409

1. 刪除乙個還有物件的容器會返回該值

2. 容器正在被刪除而此時又發起了刪除該容器的請求

3. 容器正在被刪除而此時又發起了建立該容器的請求

4121. 

列取物件時傳入了無法解析的

delimiter

2. 列取物件時傳入的limiter大於了container_listing_limit(預設10000)

3. http請求中包含了非utf-8的字元

3.object

200

列取物件元資料成功

201建立物件成功

202建立或者更新物件元資料成功

204刪除物件成功

400post或者put請求中傳入的x-delete-after值無法轉化或者傳入的值是乙個針對當前系統來說是個過去的時間

4041. 

建立、刪除

物件時容器不存在

2. 列取物件相關資訊時物件本身不存在或者容器不存在

3. 如果物件使用了超時則超時後物件暫時還未被**程序刪除,此時請求該物件也會返回該值

405錯誤的請求方法(

put delete post head get copy等之外的方法)

408

請求物件超時

411建立物件時在請求中沒有content-length項

4121. 

物件正在被刪除此時又發起了獲取物件的請求

2. 在物件有多版本時出現了相關的容器不存在可能會返回該值

3. 在使用了物件過時自動刪除功能時,刪除物件時時間戳不對

4. http請求中包含了非utf-8的字元

5. 在http請求的頭中有if-match類似的匹配查詢時,由於條件無法滿足

6. 在copy請求中沒有傳入目標值或者傳入的值不滿足container/object的格式

7. 總之就是請求中的某些欄位不滿足服務端的處理邏輯就會返回該值

413當建立的物件大小超過max_file_size(預設5gb)

499上傳物件的過程中連線斷開或者本應該上傳的資料與實際上傳的資料長度不一致

4.服務不可用型別的返回值

5 00

account-server container-server object-server在出現不可處理的請求時會給proxy-server返回該值或者在處理proxy-server的請求超時時

503 在

eswift中出現該值的情況很多

1. proxy服務無法連線account,container,object等服務或者連線超時,那麼proxy會統一將這種情況以該值反饋給swift的客戶端

2. 當swift被配置為多個副本,多節點的時候,如果請求某個資源,proxy服務將會計算出該資源所處的位置(有多少個副本就有多少個位置),然後向所有位置所在的節點發起請求,如果有少於一半的節點由於各種原因(網路超時、遇到未知情況無法完成請求、所請求節點沒有swift或者相關服務沒又開啟、節點之間時間不同步,磁碟出問,有一半以上的節點資料被破壞但是有些節點的資料又是完整的等)沒有正常返回,那麼proxy經過處理之後也將給客戶端返回該值。所以對於客戶端來說很難知道swift到底出了什麼情況,只能通過swift日誌來排查問題。當在實際使用過程中遇到該值客戶端只能通過不斷重試來獲取想要的資料,具體重試多少次就得因問題而異了。

50 7

對應的磁碟沒有被掛載,而是直接使用了系統的目錄 

注:以上總結都是在沒有認證模組的基礎上做的,並不是非常完全,或許還有不正確的地方。

每天進步一點點

很多朋友總喜歡問 成功靠什麼?其實,成功很難單一的歸納為靠什麼條件,如果一定要回答,只能從某種意義上說 很多人的成功就是靠他們每天比別人 多做一點點 正如古人有云 業精於勤,荒於嬉。這裡所說的勤,也就是比別人多做一點點,即付出多一點的勞動和努力。不要小看這一點點,又如古語說 集腋成裘,積沙成丘。如果...

每天進步一點點

在模組化程式設計時,在子模組中宣告變數 例如unsigned char aa 不需要在標頭檔案中宣告 要在主函式中呼叫,要寫成 extern unsigned char aa 而不能寫成 extern aa 寫成extern aa 則無法改變aa的值。2014年9月22日 21 12 00 品質因數...

每天進步一點點(一)

最近接了第乙個商業專案,一人獨立完成從前台到後台,做了有幾天的時間,每天進步一點點,把每天看到的學到的記錄下來,以後也堅持。後台繼續用自己的extjs老本行,因為相比其他js庫,extjs用的比較熟,現成的 也有所以開發起來也比較容易,今天學到了兩個ext的新東西。一 ext和後台進行互動大部分用的...