鍍金池/ 問(wèn)答/Java  PHP  Python  GO  HTML/ 服務(wù)器接收到expect: 100-continue請(qǐng)求過(guò)程,是幾次http請(qǐng)求

服務(wù)器接收到expect: 100-continue請(qǐng)求過(guò)程,是幾次http請(qǐng)求?

服務(wù)端接收到header 是expect:100-continue,進(jìn)行驗(yàn)證信息,判斷是否可以通過(guò)驗(yàn)證
如果可以通過(guò)驗(yàn)證,返回status 100
如果通過(guò)了是不是客戶端發(fā)送的是第二次http請(qǐng)求?還是繼續(xù)這次http請(qǐng)求?
這種判斷,服務(wù)端程序該怎么寫呀,如果是兩次,http協(xié)議是無(wú)狀態(tài)的,怎么將兩次請(qǐng)求聯(lián)系到一起?

回答
編輯回答
初念

HTTP無(wú)狀態(tài)決定了本質(zhì)上無(wú)法繼續(xù)上次的HTTP請(qǐng)求。

首先,客戶端先發(fā)送了一個(gè)請(qǐng)求,這個(gè)請(qǐng)求的header中包含了一個(gè)屬性expect: 100-continue。這種情況一般出現(xiàn)于上傳大容量body或者是需要驗(yàn)證的時(shí)候。這時(shí)服務(wù)器會(huì)讀取請(qǐng)求的header并返回一個(gè)100 continue的響應(yīng),如果服務(wù)器可以提供這項(xiàng)服務(wù)的話??蛻舳嗽賹ttp請(qǐng)求發(fā)送回去。然后服務(wù)器會(huì)讀取請(qǐng)求的body并且在成功后返回200狀態(tài)碼。

如果出于驗(yàn)證的目的發(fā)出expect:100-continue,那么你只需在認(rèn)證通過(guò)之后的下一次請(qǐng)求中攜帶上你的認(rèn)證信息(authorization等等)即可。

如果是出于詢問(wèn)服務(wù)器是否能夠完成自己的請(qǐng)求,比如是不是能夠向它發(fā)送一個(gè)類型為video/mp4的大文件時(shí),則第二次正常發(fā)送body為這個(gè)文件的http請(qǐng)求即可。這里使用expect:100-continue的原因在于避免大文件傳送失敗帶來(lái)的帶寬浪費(fèi)。第一次發(fā)送的詢問(wèn)請(qǐng)求可以只有一個(gè)header,如果服務(wù)器拒絕提供這個(gè)服務(wù),則無(wú)需繼續(xù)發(fā)送大文件。

2018年3月2日 13:41