cookie和session用來跟蹤使用者的整個會話
Cookie
通過在客戶端記錄資訊確定使用者身份,採用的是在客戶端保持狀態的方案
*工作流程:
1. servlet建立cookie,儲存少量資料,傳送瀏覽器。
2. 瀏覽器獲得伺服器傳送的cookie資料,將自動的儲存到瀏覽器端。
3. 下次訪問時,瀏覽器將自動攜帶cookie資料傳送給伺服器。
cookie是由伺服器端建立傳送回瀏覽器端的,並且每次請求伺服器都會將cookie帶過去,以便伺服器知道該使用者是哪一個。其cookie中是使用鍵值對來儲存資訊的,並且一個cookie只能儲存一個鍵值對。所以在獲取cookie時,是會獲取到所有的cookie,然後從其中遍歷。
*cookie特點:
1. 每一個cookie檔案大小:4kb , 如果超過4kb瀏覽器不識別
2. 一個web站點(web專案):傳送20個
3.一個瀏覽器儲存總大小:300個
4.cookie 不安全,可能洩露使用者資訊。瀏覽器支援禁用cookie操作。
5. 預設情況生命週期:與瀏覽器會話一樣,當瀏覽器關閉時cookie銷燬的。---臨時cookie
*cookie案例
會話狀態管理(如使用者登入狀態、購物車)
個性化設定(如使用者自定義設定)
瀏覽器行為跟蹤(如跟蹤分析使用者行為歷史記錄,使用者名稱)
Session
通過在伺服器端記錄資訊確定使用者身份,採用的是在伺服器端保持狀態的方案,儲存一些使用者資訊。
*功能作用:伺服器用於共享資料技術
*建立方式:是由伺服器根據請求頭裡面的Cookies裡面的session資訊,沒有的話就建立出來,繫結一個id,和cookies一起返回到客戶端
*工作原理:依靠cookie來做支撐,第一次使用request.session時session被建立,並且會為該session建立一個獨一無二的sessionid存放到cookie中,然後傳送會瀏覽器端,瀏覽器端每次請求時,都會帶著這個sessionid,伺服器就會認識該sessionid,知道了sessionid就找得到哪個session。以此來達到共享資料的目的。 這裡需要注意的是,session不會隨著瀏覽器的關閉而死亡,而是等待超時時間。
GET把引數包含在URL中,POST通過request body傳遞引數
GET在瀏覽器回退時是無害的,而POST會再次提交請求。
GET產生的URL地址可以被Bookmark,而POST不可以。
GET請求會被瀏覽器主動cache,而POST不會,除非手動設定。
GET請求只能進行url編碼,而POST支援多種編碼方式。
GET請求引數會被完整保留在瀏覽器歷史記錄裡,而POST中的引數不會被保留。
GET請求在URL中傳送的引數是有長度限制的,而POST麼有。
對引數的資料型別,GET只接受ASCII字元,而POST沒有限制。
GET比POST更不安全,因為引數直接暴露在URL上,所以不能用來傳遞敏感資訊。
TCP就像汽車,HTTP給汽車運輸設定了好幾個服務類別,有GET, POST, PUT, DELETE等等:
執行GET請求,要給汽車貼上GET的標籤(置method為GET),而且要求把傳送的資料放在車頂上(url中)以方便記錄。
執行POST請求,就要在車上貼上POST的標籤,並把貨物放在車廂裡。
當然,你也可以在GET的時候往車廂內偷偷藏點貨物,但是這是很不光彩;也可以在POST的時候在車頂上也放一些資料,讓人覺得傻乎乎的。HTTP只是個行為準則,而TCP才是GET和POST怎麼實現的基本。
*簡單來說:GET產生一個TCP資料包;POST產生兩個TCP資料包。
對於GET方式的請求,瀏覽器會把http header和data一併傳送出去,伺服器響應200(返回資料)
對於POST,瀏覽器先傳送header,伺服器響應100 continue,瀏覽器再傳送data,伺服器響應200 ok(返回資料)。
也就是說,GET只需要汽車跑一趟就把貨送到了,而POST得跑兩趟,第一趟,先去和伺服器打個招呼“嗨,我等下要送一批貨來,你們開啟門迎接我”,然後再回頭把貨送過去。
因為POST需要兩步,時間上消耗的要多一點,看起來GET比POST更有效。