在iOS開發(fā)中經(jīng)常會遇到網(wǎng)絡請求的錯誤, 一方面可能會是自己網(wǎng)絡請求的方式, 參數(shù), 請求頭等造成的; 另一方面可能就是后臺寫的接口出了問題; 所以看懂報錯原因就顯得尤為重要.
一. iOS錯誤狀態(tài)碼
狀態(tài)碼類別含義
1XX ?Informational (信息性狀態(tài)碼)接收的請求正在處理
2XX ?Success (成功狀態(tài)碼)請求正常處理完畢
3XX ?Redirection (重定向狀態(tài)碼)需要進行附加操作以完成請求
4XX ?Client Error (客戶端錯誤狀態(tài)碼)服務器無法處理請求
5XX ?Server Error (服務器錯誤狀態(tài)碼)服務器處理請求出錯
Detail (詳解)
1XX 請求前的準備工作
100 Continue 繼續(xù)
客戶端應當繼續(xù)發(fā)送請求。這個臨時響應是用來通知客戶端它的部分請求已經(jīng)被服務器接收膀捷,且仍未被拒絕迈嘹。
101 Switching Protocols 切換協(xié)議
服務器已經(jīng)理解了客戶端的請求,并將通過Upgrade消息頭通知客戶端采用不同的協(xié)議來完成這個請求全庸。
在發(fā)送完這個響應最后的空行后秀仲,服務器將會切換到在Upgrade消息頭中定義的那些協(xié)議。
注意:目前這個方式只有在切換新的協(xié)議更有好處的時候才應該采取類似措施壶笼。例如神僵,切換到新的HTTP版本比舊版本更有優(yōu)勢,或者切換到一個實時且同步的協(xié)議以傳送利用此類特性的資源覆劈。
102 Processing 處理
由WebDAV(RFC 2518)擴展的狀態(tài)碼保礼,代表處理將被繼續(xù)執(zhí)行沛励。
2XX 成功
這一類型的狀態(tài)碼,代表請求已成功被服務器接收炮障、理解目派、并接受。
200 OK
請求已成功胁赢,請求所希望的響應頭或數(shù)據(jù)體將隨此響應返回址貌。
201 Created 創(chuàng)建
請求已經(jīng)被實現(xiàn),而且有一個新的資源已經(jīng)依據(jù)請求的需要而創(chuàng)建徘键,且其URI已經(jīng)隨Location頭信息返回
202 Accepted 接受
服務器已接受請求,但尚未處理遍蟋。正如它可能被拒絕一樣吹害,最終該請求可能會也可能不會被執(zhí)行。
203 Non-Authoritative Information 非授權信息
服務器已成功處理了請求虚青,但返回的實體頭部元信息不是在原始服務器上有效的確定集合它呀,而是來自本地或者第三方的拷貝。當前的信息可能是原始版本的子集或者超集棒厘。例如纵穿,包含資源的元數(shù)據(jù)可能導致原始服務器知道元信息的超集。使用此狀態(tài)碼不是必須的奢人,而且只有在響應不使用此狀態(tài)碼便會返回200 OK的情況下才是合適的谓媒。
204 No Content?無內容
服務器成功處理了請求,但不需要返回任何實體內容何乎,并且希望返回更新了的元信息句惯。響應可能通過實體頭部的形式,返回新的或更新后的元信息支救。如果存在這些頭部信息抢野,則應當與所請求的變量相呼應。
如果客戶端是瀏覽器的話各墨,那么用戶瀏覽器應保留發(fā)送了該請求的頁面指孤,而不產生任何文檔視圖上的變化,即使按照規(guī)范新的或更新后的元信息應當被應用到用戶瀏覽器活動視圖中的文檔贬堵。
205 Reset Content 重置內容
服務器成功處理了請求恃轩,且沒有返回任何內容。但是與204響應不同扁瓢,返回此狀態(tài)碼的響應要求請求者重置文檔視圖详恼。該響應主要是被用于接受用戶輸入后,立即重置表單引几,以便用戶能夠輕松地開始另一次輸入昧互。
與204響應一樣挽铁,該響應也被禁止包含任何消息體,且以消息頭后的第一個空行結束敞掘。
206 206 Partial Content
服務器成功處理了客戶端的范圍請求.
3XX重定向
301 Moved Permanently
永久性重定向. 表示請求的資源已被分配了新的URI, 以后應使用資源現(xiàn)有的URI.
302 Found
臨時性重定向. 表示請求的資源已被分配了新的URI, 希望用戶(本次)能使用新的URI訪問.
303 See Other
303狀態(tài)碼和302狀態(tài)碼有著相同的功能, 但303狀態(tài)碼明確表示客戶端應當采用GET方法獲取資源.
304 Not Modified
客戶端發(fā)送GET請求獲取資源時, 報文中包含If-Match,?If-Modified-Since,?If-None-Match,?If-Range,?If-Unmodified-Since中任一首部.
服務端允許資源訪問, 但是由于請求報文中的首部條件未滿足, 直接返回304 Not Modified (服務端資源未改變, 可直接只用客戶端未過期的緩存).
雖然被劃分為3XX, 但是和重定向沒有關系.
307 Temporary Redirect
臨時重定向.
4XX 客戶端錯誤
表示客戶端是發(fā)生錯誤的原因所在.
400 Bad Request
請求報文中存在語法錯誤.講白了就是你給的Json和后端定義的不同叽掘,后端無法識別,你需要仔細對照文檔玖雁,改成相對應的字段更扁,再錯就去找后端,八成是他改了字段又沒更新文檔赫冬。
401 Unauthorized
表示:發(fā)送的請求需要有通過HTTP認證的認證信息; 若之前已經(jīng)進行過1次請求, 則表示用戶認證失敗. 就是沒授權浓镜,具體和后端溝通去,鍋不在前端劲厌。
403 Forbidden
資源請求被服務器拒絕了膛薛。找后端,為什么被拒补鼻,和前端沒多大關系哄啄。
404 Not Found
無法找到請求的資源. url填錯了,自己仔細看開發(fā)文檔风范,別copy錯了咨跌,再錯找后端溝通。
405 Method Not Allowed 不允許此方法
對于請求所標識的資源硼婿,不允許使用請求行中所指定的方法锌半。請確保為所請求的資源設置了正確的 MIME 類型。
請求行中指定的請求方法不能被用于請求相應的資源寇漫。該響應必須返回一個Allow頭信息用以表示出當前資源能夠接受的請求方法的列表拳喻。
解決方案:
? 1.鑒于PUT,DELETE方法會對服務器上的資源進行寫操作猪腕,因而絕大部分的網(wǎng)頁服務器都不支持或者在默認配置下不允許上述請求方法冗澈,對于此類請求均會返回405錯誤。
? 2.如果問題依然存在陋葡,請與服務器的管理員聯(lián)系亚亲。
406 Not Acceptable 不可接受
請求的資源的內容特性無法滿足請求頭中的條件,因而無法生成響應實體腐缤。
除非這是一個HEAD請求捌归,否則該響應就應當返回一個包含可以讓用戶或者瀏覽器從中選擇最合適的實體特性以及地址列表的實體。實體的格式由Content-Type頭中定義的媒體類型決定岭粤。瀏覽器可以根據(jù)格式及自身能力自行作出最佳選擇惜索。但是,規(guī)范中并沒有定義任何作出此類自動選擇的標準剃浇。
解決方案:
1.根據(jù)此請求中所發(fā)送的“接受”標題巾兆,此請求所標識的資源只能生成內容特征為“不可接受”的響應實體猎物。
2.如果問題依然存在,請與服務器的管理員聯(lián)系角塑。
407 Proxy Authentication Required 需要代理身份驗證
與401響應類似蔫磨,只不過客戶端必須在代理服務器上進行身份驗證。代理服務器必須返回一個Proxy-Authenticate用以進行身份詢問圃伶〉倘纾客戶端可以返回一個Proxy-Authorization信息頭用以驗證。參見RFC 2617窒朋。
解決方案:
1.在可為此請求提供服務之前搀罢,您必須驗證此代理服務器。請登錄到代理服務器侥猩,然后重試魄揉。
2.如果問題依然存在,請與 Web 服務器的管理員聯(lián)系拭宁。
408 Request Timeout 請求超時
客戶端沒有在服務器預備等待的時間內完成一個請求的發(fā)送“旮客戶端可以隨時再次提交這一請求而無需進行任何更改杰标。這個前端自己處理人際交互就好了。
409 Conflict 請求沖突
沖突通常發(fā)生于對PUT請求的處理中彩匕。例如腔剂,在采用版本檢查的環(huán)境下,某次PUT提交的對特定資源的修改請求所附帶的版本信息與之前的某個(第三方)請求向沖突驼仪,那么此時服務器就應該返回一個409錯誤掸犬,告知用戶請求無法完成。此時绪爸,響應實體中很可能會包含兩個沖突版本之間的差異比較湾碎,以便用戶重新提交歸并以后的新版本。
410 Gone 請求資源不存在
被請求的資源在服務器上已經(jīng)不再可用奠货,而且沒有任何已知的轉發(fā)地址介褥。這樣的狀況應當被認為是永久性的。如果可能递惋,擁有鏈接編輯功能的客戶端應當在獲得用戶許可后刪除所有指向這個地址的引用柔滔。如果服務器不知道或者無法確定這個狀況是否是永久的,那么就應該使用404狀態(tài)碼萍虽。除非額外說明睛廊,否則這個響應是可緩存的。
410響應的目的主要是幫助網(wǎng)站管理員維護網(wǎng)站杉编,通知用戶該資源已經(jīng)不再可用超全,并且服務器擁有者希望所有指向這個資源的遠端連接也被刪除咆霜。這類事件在限時、增值服務中很普遍卵迂。同樣裕便,410響應也被用于通知客戶端在當前服務器站點上,原本屬于某個個人的資源已經(jīng)不再可用见咒。當然偿衰,是否需要把所有永久不可用的資源標記為'410 Gone',以及是否需要保持此標記多長時間改览,完全取決于服務器擁有者下翎。
411 Length Required
服務器無法處理客戶端發(fā)送的不帶Content-Length的請求信息
服務器拒絕在沒有定義Content-Length頭的情況下接受請求。在添加了表明請求消息體長度的有效Content-Length頭之后宝当,客戶端可以再次提交該請求视事。
412 Precondition Failed 前提條件失敗
服務器在驗證在請求的頭字段中給出先決條件時,沒能滿足其中的一個或多個庆揩。這個狀態(tài)碼允許客戶端在獲取資源時在請求的元信息(請求頭字段數(shù)據(jù))中設置先決條件俐东,以此避免該請求方法被應用到其希望的內容以外的資源上。
解決方案:
在服務器上測試前提條件時订晌,部分請求標題字段中所給定的前提條件估計為FALSE虏辫。客戶機將前提條件放置在當前資源 metainformation(標題字段數(shù)據(jù))中锈拨,以防止所請求的方法被誤用到其他資源砌庄。如果問題依然存在,請與 Web 服務器的管理員聯(lián)系奕枢。
413 Request Entity Too Large 請求過大而拒絕
服務器拒絕處理當前請求娄昆,因為該請求提交的實體數(shù)據(jù)大小超過了服務器愿意或者能夠處理的范圍。此種情況下缝彬,服務器可以關閉連接以免客戶端繼續(xù)發(fā)送此請求萌焰。
如果這個狀況是臨時的,服務器應當返回一個Retry-After的響應頭谷浅,以告知客戶端可以在多少時間以后重新嘗試杆怕。
414 Request-URI Too Long (Request-URI 太長)
請求的URI長度超過了服務器能夠解釋的長度,因此服務器拒絕對該請求提供服務壳贪。這比較少見陵珍,通常的情況包括:
1.本應使用POST方法的表單提交變成了GET方法,導致查詢字符串(Query String)過長违施。
2.重定向URI“黑洞”互纯,例如每次重定向把舊的URI作為新的URI的一部分,導致在若干次重定向后URI超長磕蒲。
3.客戶端正在嘗試利用某些服務器中存在的安全漏洞攻擊服務器留潦。這類服務器使用固定長度的緩沖讀取或操作請求的URI只盹,當GET后的參數(shù)超過某個數(shù)值后,可能會產生緩沖區(qū)溢出兔院,導致任意代碼被執(zhí)行殖卑。沒有此類漏洞的服務器,應當返回414狀態(tài)碼坊萝。
415 Unsupported Media Type 服務器無法處理請求附帶的媒體格式對于當前請求的方法和所請求的資源孵稽,請求中提交的實體并不是服務器中所支持的格式,因此請求被拒絕十偶。
416 Requested Range Not Satisfiable 客戶端請求的范圍無效如果請求中包含了Range請求頭菩鲜,并且Range中指定的任何數(shù)據(jù)范圍都與當前資源的可用范圍不重合,同時請求中又沒有定義If-Range請求頭惦积,那么服務器就應當返回416狀態(tài)碼接校。
假如Range使用的是字節(jié)范圍,那么這種情況就是指請求指定的所有數(shù)據(jù)范圍的首字節(jié)位置都超過了當前資源的長度狮崩。服務器也應當在返回416狀態(tài)碼的同時蛛勉,包含一個Content-Range實體頭,用以指明當前資源的長度睦柴。這個響應也被禁止使用multipart/byteranges作為其Content-Type诽凌。
417 Expectation Failed 服務器無法滿足Expect的請求頭信息在請求頭Expect中指定的預期內容無法被服務器滿足,或者這個服務器是一個代理服務器爱只,它有明顯的證據(jù)證明在當前路由的下一個節(jié)點上,Expect的內容無法被滿足招刹。
418 I'm a teapot
本操作碼是在1998年作為IETF的傳統(tǒng)愚人節(jié)笑話, 在RFC 2324 超文本咖啡壺控制協(xié)議中定義的恬试,并不需要在真實的HTTP服務器中定義。
421 There are too many connections from your internet address
從當前客戶端所在的IP地址到服務器的連接數(shù)超過了服務器許可的最大范圍疯暑。通常训柴,這里的IP地址指的是從服務器上看到的客戶端地址(比如用戶的網(wǎng)關或者代理服務器地址)。在這種情況下妇拯,連接數(shù)的計算可能涉及到不止一個終端用戶幻馁。
422 Unprocessable Entity 語意錯誤請求格式正確,但是由于含有語義錯誤越锈,無法響應仗嗦。(RFC 4918 WebDAV)
423 Locked 資源被鎖定當前資源被鎖定。(RFC 4918 WebDAV)
424 Failed Dependency 連鎖錯誤由于之前的某個請求發(fā)生的錯誤甘凭,導致當前請求失敗稀拐,例如PROPPATCH。(RFC 4918 WebDAV)
425 Unordered Collection
在WebDav Advanced Collections草案中定義丹弱,但是未出現(xiàn)在《WebDAV順序集協(xié)議》(RFC 3658)中德撬。
426 Upgrade Required
客戶端應當切換到TLS/1.0铲咨。(RFC 2817)
449 Retry With 請求完成重試由微軟擴展,代表請求應當在執(zhí)行完適當?shù)牟僮骱筮M行重試蜓洪。
HTTP 5xx 服務器錯誤
這類狀態(tài)碼代表了服務器在處理請求的過程中有錯誤或者異常狀態(tài)發(fā)生纤勒,也有可能是服務器意識到以當前的軟硬件資源無法完成對請求的處理。除非這是一個HEAD請求隆檀,否則服務器應當包含一個解釋當前錯誤狀態(tài)以及這個狀況是臨時的還是永久的解釋信息實體摇天。瀏覽器應當向用戶展示任何在當前響應中被包含的實體。
500 Internal Server Error 服務器的內部錯誤
服務器遇到了一個未曾預料的狀況刚操,導致了它無法完成對請求的處理闸翅。一般來說,這個問題都會在服務器的程序碼出錯時出現(xiàn)菊霜。
Web 服務器不能執(zhí)行此請求坚冀。請稍后重試此請求。 如果問題依然存在鉴逞,請與 Web服務器的管理員聯(lián)系记某。
501 Not Implemented 未實現(xiàn)
服務器不支持當前請求所需要的某個功能。當服務器無法識別請求的方法构捡,并且無法支持其對任何資源的請求液南。
Web 服務器不支持實現(xiàn)此請求所需的功能。請檢查URL 中的錯誤勾徽,如果問題依然存在滑凉,請與 Web服務器的管理員聯(lián)系。
502 Bad Gateway 網(wǎng)關出錯
作為網(wǎng)關或者代理工作的服務器嘗試執(zhí)行請求時喘帚,從上游服務器接收到無效的響應畅姊。
當用作網(wǎng)關或代理時,服務器將從試圖實現(xiàn)此請求時所訪問的upstream 服務器中接收無效的響應吹由。 如果問題依然存在若未,請與 Web服務器的管理員聯(lián)系。
503 Service Unavailable 服務器過載無法處理
由于臨時的服務器維護或者過載倾鲫,服務器當前無法處理請求粗合。這個狀況是臨時的,并且將在一段時間以后恢復乌昔。如果能夠預計延遲時間隙疚,那么響應中可以包含一個Retry-After頭用以標明這個延遲時間。如果沒有給出這個Retry-After信息磕道,那么客戶端應當以處理500響應的方式處理它甚淡。
504 Gateway Timeout 網(wǎng)關超時
作為網(wǎng)關或者代理工作的服務器嘗試執(zhí)行請求時,未能及時從上游服務器(URI標識出的服務器,例如HTTP贯卦、FTP资柔、LDAP)或者輔助服務器(例如DNS)收到響應。
注意:某些代理服務器在DNS查詢超時時會返回400或者500錯誤
505 HTTP Version Not Supported HTTP版本不支持
服務器不支持撵割,或者拒絕支持在請求中使用的HTTP版本贿堰。這暗示著服務器不能或不愿使用與客戶端相同的版本。響應中應當包含一個描述了為何版本不被支持以及服務器支持哪些協(xié)議的實體啡彬。
506 Variant Also Negotiates 服務器內部配置錯誤
由《透明內容協(xié)商協(xié)議》(RFC 2295)擴展羹与,代表服務器存在內部配置錯誤:被請求的協(xié)商變元資源被配置為在透明內容協(xié)商中使用自己,因此在一個協(xié)商處理中不是一個合適的重點庶灿。
507 Insufficient Storage 臨時存儲不足
服務器無法存儲完成請求所必須的內容纵搁。這個狀況被認為是臨時的。WebDAV(RFC 4918)
509 Bandwidth Limit Exceeded 帶寬限制超過
服務器達到帶寬限制往踢。這不是一個官方的狀態(tài)碼腾誉,但是仍被廣泛使用。
510 Not Extended
獲取資源所需要的策略并沒有沒滿足