我是初級客戶端之如何判斷響應(yīng)成功or失敗闷沥?

作為客戶端萎战,首先要知道服務(wù)端都有哪些響應(yīng),響應(yīng)報文是什么舆逃,然后才知道響應(yīng)是否成功or失敗蚂维。

1. 服務(wù)端都有哪些響應(yīng)?

http響應(yīng)報文介紹如分割線下面路狮,響應(yīng)報文里狀態(tài)行中有響應(yīng)狀態(tài)碼虫啥,當(dāng)我(客戶端)收到服務(wù)端響應(yīng)時,要先判斷響應(yīng)狀態(tài)碼是什么然后做相應(yīng)處理奄妨。

1) 我收到服務(wù)器的響應(yīng)碼101涂籽,意味著服務(wù)器已按照我的要求切換為HTTP 1.1的協(xié)議,之后的請求和響應(yīng)按照切換后的協(xié)議通信展蒂。

2) 我收到服務(wù)器的響應(yīng)碼202又活,意味著服務(wù)器已接受請求,但尚未處理锰悼;緊接著可能會收到服務(wù)器響應(yīng)碼201柳骄,說明服務(wù)器已經(jīng)按照請求開始創(chuàng)建資源;最終會收到服務(wù)器響應(yīng)碼200箕般,服務(wù)器終于按照請求創(chuàng)建資源全部成功耐薯。有時也會收到響應(yīng)碼204,意味著服務(wù)器成功處理請求但無任何內(nèi)容返回。

當(dāng)收到響應(yīng)碼200后曲初,說明服務(wù)器已經(jīng)成功處理請求体谒,然后再判斷http響應(yīng)報文里響應(yīng)數(shù)據(jù)部分,數(shù)據(jù)中包含了資源創(chuàng)建的詳細(xì)信息臼婆,然后再根據(jù)響應(yīng)的詳細(xì)信息進(jìn)行接下來的處理抒痒。

響應(yīng)的消息體是在接口設(shè)計時考慮的,根據(jù)需求颁褂,可以設(shè)計消息是同步還是異步的故响,異步場景下異步超時時間,異步場景下操作的進(jìn)度颁独,操作的結(jié)果彩届,操作的詳細(xì)內(nèi)容。

收到響應(yīng)碼200后誓酒,解析響應(yīng)數(shù)據(jù):

場景1:消息同步樟蠕,同步情況下操作結(jié)果,操作的詳細(xì)內(nèi)容靠柑。

如果操作結(jié)果返回失敗則一次請求的響應(yīng)失斦纭;如果操作結(jié)果返回成功則一次請求的響應(yīng)成功病往;如果超過同步響應(yīng)時間捣染,則一次請求的響應(yīng)超時。

場景2:消息異步停巷,異步情況下jobid耍攘,異步情況下超時時間,異步情況下操作進(jìn)度畔勤,操作結(jié)果蕾各,操作的詳細(xì)內(nèi)容。

如果操作結(jié)果返回失敗則一次請求的響應(yīng)失敗庆揪,如果操作結(jié)果返回成功則一次請求的響應(yīng)成功式曲。如果超過一次請求和同一次響應(yīng)的時間,則一次請求的響應(yīng)超時缸榛。

在異步請求場景下吝羞,然后根據(jù)jobid進(jìn)行調(diào)用服務(wù)器查詢進(jìn)度,服務(wù)器一直響應(yīng)消息進(jìn)度内颗,直到操作結(jié)果為成功(操作進(jìn)度為100)钧排。如果操作結(jié)果返回失敗,不管進(jìn)度多少則多次請求的響應(yīng)失斁摹恨溜;如果操作結(jié)果返回成功符衔,則判斷進(jìn)度是否為100則多次請求的響應(yīng)成功;如果超過響應(yīng)的異步超時時間糟袁,則多次請求的響應(yīng)超時判族;如果超過一次請求和同一次響應(yīng)的時間,則一次請求的響應(yīng)超時项戴。

如何判斷收到的異步請求和異步調(diào)用進(jìn)度屬于同一個事物的操作形帮?

舉個栗子:A發(fā)起請求給B,B響應(yīng)異步消息肯尺,A發(fā)起請求給C沃缘,C也響應(yīng)異步消息躯枢。那么A通過IP/URL/port则吟,知道是發(fā)給B還是發(fā)給C。

但是如果A給B發(fā)了兩次不同類型的操作锄蹂,B都響應(yīng)異步消息氓仲,那么A如何區(qū)分是哪次操作呢?可以在每次的消息請求和響應(yīng)中添加操作類型的名稱得糜。

3)? 我收到服務(wù)器的響應(yīng)碼300(多種選擇)敬扛,意味著服務(wù)器針對發(fā)的請求,有多種操作供請求者選擇朝抖,我收到響應(yīng)后要選擇其中一種操作啥箭。我收到服務(wù)器響應(yīng)碼301(永久移動),則表示請求的網(wǎng)頁已經(jīng)永久移動到新位置并將新位置告知我治宣,以后再訪問就發(fā)請求給新位置急侥。我收到服務(wù)器響應(yīng)碼302(臨時移動),則表示請求的網(wǎng)頁只是臨時移到到新位置侮邀,并將新位置告知我坏怪,但只是臨時訪問以后還繼續(xù)訪問老位置。我收到服務(wù)器響應(yīng)碼304(網(wǎng)頁未變更)绊茧,則表示網(wǎng)頁未發(fā)生變更铝宵,不再返回網(wǎng)頁內(nèi)容。我收到服務(wù)器響應(yīng)碼305(客戶端使用代理訪問)华畏,則表示服務(wù)器允許我請求者使用代理方式訪問網(wǎng)頁鹏秋。我收到服務(wù)器響應(yīng)碼307(臨時重定向),則表示服務(wù)器讓我請求者臨時重定向訪問網(wǎng)頁亡笑,之后還是訪問原來位置侣夷。

響應(yīng)碼302和307是一樣的,那各自解決什么問題况芒?

? ? ? HTTP1.1協(xié)議中新加入307狀態(tài)碼惜纸。 HTTP1.1協(xié)議中的307狀態(tài)碼則相當(dāng)于HTTP1.0協(xié)議中的302狀態(tài)碼叶撒。當(dāng)客戶端的POST請求到收到服務(wù)端307狀態(tài)碼響應(yīng)時,需要跟用戶詢問是否應(yīng)該在新URI上發(fā)起POST方法耐版,也就是說祠够,307是不會把POST轉(zhuǎn)為GET的。

在HTTP1.1中粪牲,302理論上是要被放棄掉的古瓤,它被細(xì)化為303和307,但為了兼容腺阳,它目前還在業(yè)界中大量使用落君,而303和307狀態(tài)碼使用甚少。為什么業(yè)界少使用303和307呢亭引?對于GET和HEAD方法來說绎速,307是沒必要存在的,用302或者303就可以滿足需求了焙蚓,307僅在POST方法的重定向上有用處纹冤。

4)? 最悲催的事情是收到4xx的響應(yīng)碼,意味著請求可能錯誤购公,妨礙服務(wù)器處理萌京。

我收到服務(wù)器的響應(yīng)碼400(錯誤請求),意味著服務(wù)器不理解請求的語法宏浩。我收到服務(wù)器響應(yīng)碼401(未授權(quán))知残,意味著服務(wù)器驗證登錄者的身份失敗。我收到服務(wù)器響應(yīng)碼403(禁止)比庄,意味著服務(wù)器拒絕請求求妹。我收到服務(wù)器響應(yīng)碼404(未找到),意味著服務(wù)器找不到請求的網(wǎng)頁印蔗。我收到服務(wù)器響應(yīng)碼405(請求方法禁用)扒最,表示服務(wù)器禁止使用請求中的方法。我收到服務(wù)器響應(yīng)碼407(需要代理授權(quán))华嘹,表示服務(wù)器給我請求者指定授權(quán)的代理(與401類似但指定代理授權(quán))吧趣。我收到服務(wù)器響應(yīng)碼408(請求超時),意味著服務(wù)器等候請求時發(fā)生超時(服務(wù)器怎么知道超時時間耙厚?二者約定的强挫?)。我收到服務(wù)器響應(yīng)碼409(沖突)薛躬,表示服務(wù)器在完成請求時發(fā)生沖突俯渤,并將沖突信息放在響應(yīng)中。我收到服務(wù)器響應(yīng)碼410(已刪除)型宝,表示請求的資源已經(jīng)永久刪除八匠。我收到服務(wù)器響應(yīng)碼411(有效內(nèi)容長度標(biāo)頭字段)絮爷,表示服務(wù)器不接收不含有效內(nèi)容長度標(biāo)頭字段的請求。

412(服務(wù)器未滿足請求者在請求中設(shè)置的一個前提條件)梨树,413(請求實體過大坑夯,服務(wù)器無法處理),414(請求的URI過長)抡四。

5) 收到5xx的響應(yīng)碼柜蜈,說明服務(wù)器內(nèi)部出錯,而不是請求出錯指巡。

500是服務(wù)器內(nèi)部出錯淑履,無法完成請求。

503表示服務(wù)器目前無法使用(由于超載或停機(jī)維護(hù))藻雪。

505服務(wù)器不支持請求中所用的HTTP協(xié)議版本秘噪。


2. HTTP響應(yīng)報文

? ? ? 一個http響應(yīng)報文由狀態(tài)行<status-line>、響應(yīng)頭部<headers>阔涉、空行<blank-line>和響應(yīng)數(shù)據(jù)<response-body>4個部分組成缆娃。

1)狀態(tài)行: 由HTTP協(xié)議版本、服務(wù)器返回的響應(yīng)狀態(tài)碼和響應(yīng)狀態(tài)碼的文本描述組成瑰排。

2)響應(yīng)頭部:由關(guān)鍵字/值對組成,每行一對暖侨,關(guān)鍵字和值用英文冒號”:“分隔椭住,典型的響應(yīng)頭有:

? ? ? ? ? Location:用于重定向接受者到一個新的位置。例如:客戶端所請求的頁面已不存在原先的位置字逗,為了讓客戶端重定向到這個頁面新的位置京郑,服務(wù)器端可以發(fā)回Location響應(yīng)報頭后使用重定向語句,讓客戶端去訪問新的域名所對應(yīng)的服務(wù)器上的資源

? ? ? ? ? Server:包含了服務(wù)器用來處理請求的軟件信息及其版本葫掉。它和 User-Agent 請求報頭域是相對應(yīng)的些举,前者發(fā)送服務(wù)器端軟件的信息,后者發(fā)送客戶端軟件(瀏覽器)和操作系統(tǒng)的信息

? ? ? ? ? Vary:指示不可緩存的請求頭列表

? ? ? ? ? Connection:連接方式

對于請求來說:
? ? ? close(告訴 WEB 服務(wù)器或者代理服務(wù)器俭厚,在完成本次請求的響應(yīng)后户魏,斷開連接,不等待本次連接的后續(xù)請求了)挪挤。
? ? ? keepalive(告訴WEB服務(wù)器或者代理服務(wù)器叼丑,在完成本次請求的響應(yīng)后,保持連接扛门,等待本次連接的后續(xù)請求);
對于響應(yīng)來說:
? ? ? ? close(連接已經(jīng)關(guān)閉);
? ? ? ? keepalive(連接保持著鸠信,在等待本次連接的后續(xù)請求);
? ? ? ? Keep-Alive:如果瀏覽器請求保持連接,則該頭部表明希望WEB 服務(wù)器保持連接多長時間(秒);例如:Keep-Alive:300;

  ? WWW-Authenticate:必須被包含在401 (未授權(quán)的)響應(yīng)消息中论寨,這個報頭域和前面講到的Authorization 請求報頭域是相關(guān)的星立,當(dāng)客戶端收到 401 響應(yīng)消息爽茴,就要決定是否請求服務(wù)器對其進(jìn)行驗證。如果要求服務(wù)器對其進(jìn)行驗證绰垂,就可以發(fā)送一個包含了Authorization 報頭域的請求

? ? 3)空行:最后一個響應(yīng)頭部之后是一個空行闹啦,發(fā)送回車符和換行符,通知瀏覽器以下不再有響應(yīng)頭部辕坝。

? ? 4)響應(yīng)數(shù)據(jù):服務(wù)器返回給客戶端的文本信息窍奋。

響應(yīng)報文示例:

HTTP/1.1 301 Moved Permanently

Cache-Control: private, no-store, no-cache, must-revalidate, post-check=0,

pre-check=0

Expires: Sat, 01 Jan 2000 00:00:00 GMT

Location: <a target=_blank >HTTP://www.facebook.com/</a>

P3P: CP=”DSP LAW”

Pragma: no-cache

Set-Cookie: made_write_conn=deleted; expires=Thu, 12-Feb-2009 05:09:50 GMT;

path=/; domain=.facebook.com; httponly

Content-Type: text/html; charset=utf-8

X-Cnection: close

Date: Fri, 12 Feb 2010 05:09:51 GMT

Content-Length: 0


3.一次請求的響應(yīng)是否成功

要想知道一次請求的響應(yīng)是否成功,要分析下響應(yīng)的報文(消息體)酱畅。

1) 首先響應(yīng)報文里狀態(tài)行中有響應(yīng)狀態(tài)碼琳袄,當(dāng)我(客戶端)收到服務(wù)端響應(yīng)時,要先判斷響應(yīng)狀態(tài)碼是什么然后做相應(yīng)處理纺酸。

收到狀態(tài)響應(yīng)碼200窖逗,說明服務(wù)器已經(jīng)成功處理請求;

2) 然后再判斷http響應(yīng)報文里響應(yīng)數(shù)據(jù)部分餐蔬,數(shù)據(jù)中包含了資源創(chuàng)建的詳細(xì)信息碎紊,然后再根據(jù)響應(yīng)的詳細(xì)信息進(jìn)行接下來的處理。

響應(yīng)的消息體是在接口設(shè)計時考慮的樊诺,根據(jù)需求仗考,可以設(shè)計消息是同步還是異步的,異步場景下異步超時時間词爬,異步場景下操作的進(jìn)度秃嗜,操作的結(jié)果,操作的詳細(xì)內(nèi)容顿膨。

收到響應(yīng)碼200后锅锨,解析響應(yīng)數(shù)據(jù):

場景1:消息同步,同步情況下操作結(jié)果恋沃,操作的詳細(xì)內(nèi)容必搞。

操作結(jié)果返回成功則一次請求的響應(yīng)成功。

場景2:消息異步囊咏,異步情況下jobid恕洲,異步情況下超時時間,異步情況下操作進(jìn)度匆笤,操作結(jié)果研侣,操作的詳細(xì)內(nèi)容。

操作結(jié)果返回成功則一次請求的響應(yīng)成功炮捧。在異步請求場景下庶诡,然后根據(jù)jobid進(jìn)行調(diào)用服務(wù)器查詢進(jìn)度,服務(wù)器一直響應(yīng)消息進(jìn)度咆课,直到操作結(jié)果為成功(操作進(jìn)度為100)末誓。


4 . 一次請求的響應(yīng)是否失敗

分析略扯俱,詳見第一部分內(nèi)容。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末喇澡,一起剝皮案震驚了整個濱河市迅栅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌晴玖,老刑警劉巖读存,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異呕屎,居然都是意外死亡让簿,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進(jìn)店門秀睛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來尔当,“玉大人,你說我怎么就攤上這事蹂安⊥钟” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵田盈,是天一觀的道長畜号。 經(jīng)常有香客問我,道長缠黍,這世上最難降的妖魔是什么弄兜? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮瓷式,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘语泽。我一直安慰自己贸典,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布踱卵。 她就那樣靜靜地躺著廊驼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪惋砂。 梳的紋絲不亂的頭發(fā)上妒挎,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天,我揣著相機(jī)與錄音西饵,去河邊找鬼酝掩。 笑死,一個胖子當(dāng)著我的面吹牛眷柔,可吹牛的內(nèi)容都是我干的期虾。 我是一名探鬼主播原朝,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼镶苞!你這毒婦竟也來了喳坠?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤茂蚓,失蹤者是張志新(化名)和其女友劉穎壕鹉,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體聋涨,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡晾浴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了牛郑。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片怠肋。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖淹朋,靈堂內(nèi)的尸體忽然破棺而出笙各,到底是詐尸還是另有隱情,我是刑警寧澤础芍,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布杈抢,位于F島的核電站,受9級特大地震影響仑性,放射性物質(zhì)發(fā)生泄漏惶楼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一诊杆、第九天 我趴在偏房一處隱蔽的房頂上張望歼捐。 院中可真熱鬧,春花似錦晨汹、人聲如沸豹储。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽剥扣。三九已至,卻和暖如春铝穷,著一層夾襖步出監(jiān)牢的瞬間钠怯,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工曙聂, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留晦炊,地道東北人。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像刽锤,于是被迫代替她去往敵國和親镊尺。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容