這篇文章給大家介紹web無狀態(tài)含義是什么,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
成都創(chuàng)新互聯(lián)公司:自2013年創(chuàng)立以來為各行業(yè)開拓出企業(yè)自己的“網(wǎng)站建設”服務,為上千多家公司企業(yè)提供了專業(yè)的成都網(wǎng)站設計、成都網(wǎng)站建設、網(wǎng)頁設計和網(wǎng)站推廣服務, 定制開發(fā)由設計師親自精心設計,設計的效果完全按照客戶的要求,并適當?shù)奶岢龊侠淼慕ㄗh,擁有的視覺效果,策劃師分析客戶的同行競爭對手,根據(jù)客戶的實際情況給出合理的網(wǎng)站構(gòu)架,制作客戶同行業(yè)具有領先地位的。
REST架構(gòu)設計是目前非?;馃岬母拍?,已經(jīng)成為構(gòu)建web服務時應該遵循的事實標準。REST約束中有一條很重要的規(guī)則是“無狀態(tài)“
"狀態(tài)"的概念是什么
一個Web應用程序協(xié)議的“狀態(tài)”在通常指的是為兩個相互關(guān)聯(lián)的用戶交互操作保留的某種公共信息,它們常常被用來存儲工作流或用戶狀態(tài)信息等數(shù)據(jù)。這些信息可以被指定不同的作用域如page,request,session或全局作用域,而存儲他們的責任也同樣可以由Client端或Server端負責。
服務調(diào)用過程中有兩種“狀態(tài)”:應用狀態(tài)(Application State)和資源狀態(tài)(Resource State)。應用狀態(tài)指的是與某一特定請求相關(guān)的狀態(tài)信息,而資源狀態(tài)則反映了某一存儲在服務器端資源在某一時刻的特定狀態(tài),該狀態(tài)不會因為用戶請求而改變,任何用戶在同一時刻對該資源的請求都會獲得這一狀態(tài)的表現(xiàn)(Representation)。RESTful架構(gòu)要求服務器端不保有任何與特定HTTP請求相關(guān)的資源,所以應用狀態(tài)必須由請求方在請求過程中提供。
例如session ID可以被認為是一個用來標識某一會話狀態(tài)的Key,將其傳遞給服務器端意味著這樣一個請求:“請幫我取出這個狀態(tài)信息”,也就是說這個請求假設響應方保有著狀態(tài)信息。由于與某一特定請求相關(guān)的狀態(tài)屬于應用狀態(tài),而RESTful架構(gòu)要求任何此類狀態(tài)由請求方負責提供,所以傳遞Session ID被認為是unRESTful的做法。而用戶的身份憑證信息作為一種應用狀態(tài),是被期望由請求方提供的,所以在請求中傳遞用戶的身份憑證信息是符合RESTful架構(gòu)規(guī)范的
為什么要使用無狀態(tài)的架構(gòu)
雖然存儲狀態(tài)為企業(yè)軟件開發(fā)帶來了諸多便利,但是它也給分布式系統(tǒng)的其他方面帶來了許多限制,比如在負載均衡方面,在有狀態(tài)的模式下,一個用戶的請求必須被提交到保存有其相關(guān)狀態(tài)信息的服務器上,否則這些請求可能無法被理解,這也就意味著在此模式下服務器端無法對用戶請求進行自由調(diào)度。于此相關(guān)的另一個問題是容錯性,倘若保有用戶信息的服務器宕機,那么該用戶最近的所有交互操作將無法被透明地移送至備用服務器上,除非該服務器時刻與主服務器同步全部用戶的狀態(tài)信息。此外,由于HTTP本身不是一個有狀態(tài)的協(xié)議,開發(fā)人員必須通過模擬實現(xiàn)狀態(tài)的鈍化與激活等。于是為了克服這些不足,無狀態(tài)(Statelessness)架構(gòu)風格屬性受到了廣泛關(guān)注。
無狀態(tài)即各自維護自身的狀態(tài),如會話信息都在客戶端,服務端并不保存狀態(tài)信息,那么我們可以說服務端是無狀態(tài)的,這個的好處是顯而易見的,無狀態(tài)的部分可以很方便的被替換掉(或集群、橫向擴展)而不用狀態(tài)重建(或同步),大大提高了可申縮性(scalability);通常J2EE的session被認是不好的設計,大部份J2EE中間件在集群時都需要進行session同步,而Play!并非基于J2EE體系設計的,則沒有該煩惱!
關(guān)于web無狀態(tài)含義是什么就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。