理解http的無狀態首先要明白什麼是“狀態”,這個很重要。

 

我們知道http是請求應答模式的。請求肯定是客户端發起的,應答是服務端的響應。客户端和服務端交互活動的信息成為狀態信息。如果這個狀態信息被保存維護到了服務器,那麼這個服務器就被叫做有狀態服務器,因為有了這些保存信息就可以通過此信息影響之後的交互,比如用户的登陸轉態,我第一次請求告訴服務端我要登陸了,服務端保存好了登陸信息,下一次請求過來的時候因為服務端知道這是登陸態,所以對這次請求會做出相應的影響。也就是説這次請求依賴於上一次的請求。

 

所謂無狀態指的是,每一次請求都應該是獨立的,即他的執行結果和前面的請求以及後面的請求都應該是沒有關係的,他不會受前面請求應答情況的直接影響,同時也不會影響之後的請求應答。

 

那麼cookie和session是否就是反無狀態呢?我覺着這個要看怎麼用,比如我僅僅把cookie當做一個數據傳過去,而服務端只負責解析cookie而不去設置cookie,當然了下一次請求也不該帶有這個cookie,這樣的一個http也應該是無狀態的,不過話説回來了,如果這樣的話為何設置cookie?直接用一個參數傳過去不就得了。session就肯定是有狀態的,因為session設置的同時,服務器必須會往瀏覽器種一個cookie,瀏覽器的下次請求勢必會帶上這個cookie,這就對下一次的請求應答造成了影響。所以啦,cookie和session的設計就是為了有狀態的,不必糾結了。