Http協議中Cookie詳細介紹
Cookie總是儲存在客戶端中,按在客戶端中的儲存位置,可分為記憶體Cookie和硬碟Cookie。記憶體Cookie由瀏覽器維護,儲存在記憶體中,瀏覽器關閉後就消失了,其存在時間是短暫的。硬碟Cookie儲存在硬碟裡,有一個過期時間,除非使用者手工清理或到了過期時間,硬碟Cookie不會被刪除,其存在時間是長期的。所以,按存在時間,可分為非持久Cookie和持久Cookie。
1.cookie的屬性
一般cookie所具有的屬性,包括:
Domain:域,表示當前cookie所屬於哪個域或子域下面。
此處需要額外注意的是,在C#中,如果一個cookie不設定對應的Domain,那麼在CookieContainer.Add(cookies)的時候,會死掉。對於伺服器返回的Set-Cookie中,如果沒有指定Domain的值,那麼其Domain的值是預設為當前所提交的http的請求所對應的主域名的。比如訪問 http://www.example.com,返回一個cookie,沒有指名domain值,那麼其為值為預設的www.example.com。
Path:表示cookie的所屬路徑。
Expire time/Max-age:表示了cookie的有效期。expire的值,是一個時間,過了這個時間,該cookie就失效了。或者是用max-age指定當前cookie是在多長時間之後而失效。如果伺服器返回的一個cookie,沒有指定其expire time,那麼表明此cookie有效期只是當前的session,即是session cookie,當前session會話結束後,就過期了。對應的,當關閉(瀏覽器中)該頁面的時候,此cookie就應該被瀏覽器所刪除了。
secure:表示該cookie只能用https傳輸。一般用於包含認證資訊的cookie,要求傳輸此cookie的時候,必須用https傳輸。
httponly:表示此cookie必須用於http或https傳輸。這意味著,瀏覽器指令碼,比如javascript中,是不允許訪問操作此cookie的。
2.伺服器傳送cookie給客戶端
從伺服器端,傳送cookie給客戶端,是對應的Set-Cookie。包括了對應的cookie的名稱,值,以及各個屬性。
例如:
Set-Cookie: lu=Rg3vHJZnehYLjVg7qi3bZjzg; Expires=Tue, 15 Jan 2013 21:47:38 GMT; Path=/; Domain=.169it.com; HttpOnly
Set-Cookie: made_write_conn=1295214458; Path=/; Domain=.169it.com
Set-Cookie: reg_fb_gate=deleted; Expires=Thu, 01 Jan 1970 00:00:01 GMT; Path=/; Domain=.169it.com; HttpOnly
3.從客戶端把cookie傳送到伺服器
從客戶端傳送cookie給伺服器的時候,是不傳送cookie的各個屬性的,而只是傳送對應的名稱和值。
例如:
GET /spec.html HTTP/1.1
Host: www.example.org
Cookie: name=value; name2=value2
Accept: */*
4.關於修改,設定cookie
除了伺服器傳送給客戶端(瀏覽器)的時候,通過Set-Cookie,建立或更新對應的cookie之外,還可以通過瀏覽器內建的一些指令碼,比如javascript,去設定對應的cookie,對應實現是操作js中的document.cookie。
5.Cookie的缺陷
(1)cookie會被附加在每個HTTP請求中,所以無形中增加了流量。
(2)由於在HTTP請求中的cookie是明文傳遞的,所以安全性成問題。(除非用HTTPS)
(3)Cookie的大小限制在4KB左右。對於複雜的儲存需求來說是不夠用的。
Cookie的作用:
Cookie是用於維持服務端會話狀態的,通常由服務端寫入,在後續請求中,供服務端讀取。
1、server通過HTTP Response中的"Set-Cookie: header"把cookie傳送給client
2、client把cookie通過HTTP Request 中的“Cookie: header”傳送給server
3、每次HTTP請求,Cookie都會被髮送。
http請求傳送cookies的條件:
1、本地已經快取有cookies
2、根據請求的URL來匹配cookies的domain、path屬性,如果都符合才會傳送。
舉個例子:訪問www.baidu.com時,就不傳送www.qq.com的cookies.
=================================
我的觀察發現是:
在載入html頁面後,第一次向伺服器傳送資料請求時(指的是.do請求,而不是檔案請求),
伺服器響應報文會帶上“Set-Cookie”
之後這個頁面再向伺服器傳送資料請求,請求報文會自動帶上“Cookie”
相關文章
- http協議/cookie詳解/session詳解HTTP協議CookieSession
- Http Module 的詳細介紹HTTP
- 前端基礎之HTTP協議介紹前端HTTP協議
- HTTP 協議簡介HTTP協議
- Http協議簡介HTTP協議
- 『動善時』JMeter基礎 — 20、JMeter配置元件【HTTP Cookie管理器】詳細介紹JMeter元件HTTPCookie
- 基礎篇-http協議《http 簡介、url詳解、request》HTTP協議
- HTTP協議詳解HTTP協議
- HTTP 3協議詳解HTTP協議
- Kafka詳細介紹Kafka
- javascript this詳細介紹JavaScript
- ApplicationContext 詳細介紹APPContext
- JDBC 詳細介紹JDBC
- Ifconfig詳細介紹
- Git詳細介紹Git
- 網路通訊協議-HTTP協議詳解!協議HTTP
- 06、HSMS協議介紹協議
- HTTP協議是如何執行的?海外代理IP原理介紹HTTP協議
- java中cookie操作詳細JavaCookie
- HTTP協議Cookie和Session有什麼區別HTTP協議CookieSession
- Asp.Net Core 中的HTTP協議詳解ASP.NETHTTP協議
- Spring bean詳細介紹SpringBean
- python字典詳細介紹Python
- Nacos 介面詳細介紹
- SOLIDWORKS API詳細介紹SolidAPI
- Go Channel 詳細介紹Go
- 19_MQTT協議介紹MQQT協議
- WebSocket協議入門介紹Web協議
- 超詳細 DNS 協議解析DNS協議
- 詳解Tomcat核心配置、http協議TomcatHTTP協議
- HTTP協議狀態碼詳解(HTTP Status Code)HTTP協議
- ARP協議介紹與ARP協議的攻擊手法協議
- 檔案傳輸協議介紹協議
- 註解的詳細介紹
- Flutter系列(一)——詳細介紹Flutter
- Nginx服務詳細介紹Nginx
- LVM詳細介紹及建立LVM
- Webpack 打包 Javascript 詳細介紹WebJavaScript
- 【SCN】Oracle SCN 詳細介紹Oracle