您好,登錄后才能下訂單哦!
這篇文章給大家介紹web無(wú)狀態(tài)含義是什么,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。
REST架構(gòu)設(shè)計(jì)是目前非?;馃岬母拍?,已經(jīng)成為構(gòu)建web服務(wù)時(shí)應(yīng)該遵循的事實(shí)標(biāo)準(zhǔn)。REST約束中有一條很重要的規(guī)則是“無(wú)狀態(tài)“
"狀態(tài)"的概念是什么
一個(gè)Web應(yīng)用程序協(xié)議的“狀態(tài)”在通常指的是為兩個(gè)相互關(guān)聯(lián)的用戶交互操作保留的某種公共信息,它們常常被用來(lái)存儲(chǔ)工作流或用戶狀態(tài)信息等數(shù)據(jù)。這些信息可以被指定不同的作用域如page,request,session或全局作用域,而存儲(chǔ)他們的責(zé)任也同樣可以由Client端或Server端負(fù)責(zé)。
服務(wù)調(diào)用過(guò)程中有兩種“狀態(tài)”:應(yīng)用狀態(tài)(Application State)和資源狀態(tài)(Resource State)。應(yīng)用狀態(tài)指的是與某一特定請(qǐng)求相關(guān)的狀態(tài)信息,而資源狀態(tài)則反映了某一存儲(chǔ)在服務(wù)器端資源在某一時(shí)刻的特定狀態(tài),該狀態(tài)不會(huì)因?yàn)橛脩粽?qǐng)求而改變,任何用戶在同一時(shí)刻對(duì)該資源的請(qǐng)求都會(huì)獲得這一狀態(tài)的表現(xiàn)(Representation)。RESTful架構(gòu)要求服務(wù)器端不保有任何與特定HTTP請(qǐng)求相關(guān)的資源,所以應(yīng)用狀態(tài)必須由請(qǐng)求方在請(qǐng)求過(guò)程中提供。
例如session ID可以被認(rèn)為是一個(gè)用來(lái)標(biāo)識(shí)某一會(huì)話狀態(tài)的Key,將其傳遞給服務(wù)器端意味著這樣一個(gè)請(qǐng)求:“請(qǐng)幫我取出這個(gè)狀態(tài)信息”,也就是說(shuō)這個(gè)請(qǐng)求假設(shè)響應(yīng)方保有著狀態(tài)信息。由于與某一特定請(qǐng)求相關(guān)的狀態(tài)屬于應(yīng)用狀態(tài),而RESTful架構(gòu)要求任何此類狀態(tài)由請(qǐng)求方負(fù)責(zé)提供,所以傳遞Session ID被認(rèn)為是unRESTful的做法。而用戶的身份憑證信息作為一種應(yīng)用狀態(tài),是被期望由請(qǐng)求方提供的,所以在請(qǐng)求中傳遞用戶的身份憑證信息是符合RESTful架構(gòu)規(guī)范的
為什么要使用無(wú)狀態(tài)的架構(gòu)
雖然存儲(chǔ)狀態(tài)為企業(yè)軟件開(kāi)發(fā)帶來(lái)了諸多便利,但是它也給分布式系統(tǒng)的其他方面帶來(lái)了許多限制,比如在負(fù)載均衡方面,在有狀態(tài)的模式下,一個(gè)用戶的請(qǐng)求必須被提交到保存有其相關(guān)狀態(tài)信息的服務(wù)器上,否則這些請(qǐng)求可能無(wú)法被理解,這也就意味著在此模式下服務(wù)器端無(wú)法對(duì)用戶請(qǐng)求進(jìn)行自由調(diào)度。于此相關(guān)的另一個(gè)問(wèn)題是容錯(cuò)性,倘若保有用戶信息的服務(wù)器宕機(jī),那么該用戶最近的所有交互操作將無(wú)法被透明地移送至備用服務(wù)器上,除非該服務(wù)器時(shí)刻與主服務(wù)器同步全部用戶的狀態(tài)信息。此外,由于HTTP本身不是一個(gè)有狀態(tài)的協(xié)議,開(kāi)發(fā)人員必須通過(guò)模擬實(shí)現(xiàn)狀態(tài)的鈍化與激活等。于是為了克服這些不足,無(wú)狀態(tài)(Statelessness)架構(gòu)風(fēng)格屬性受到了廣泛關(guān)注。
無(wú)狀態(tài)即各自維護(hù)自身的狀態(tài),如會(huì)話信息都在客戶端,服務(wù)端并不保存狀態(tài)信息,那么我們可以說(shuō)服務(wù)端是無(wú)狀態(tài)的,這個(gè)的好處是顯而易見(jiàn)的,無(wú)狀態(tài)的部分可以很方便的被替換掉(或集群、橫向擴(kuò)展)而不用狀態(tài)重建(或同步),大大提高了可申縮性(scalability);通常J2EE的session被認(rèn)是不好的設(shè)計(jì),大部份J2EE中間件在集群時(shí)都需要進(jìn)行session同步,而Play!并非基于J2EE體系設(shè)計(jì)的,則沒(méi)有該煩惱!
關(guān)于web無(wú)狀態(tài)含義是什么就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。