当前位置: 首页 > 后端技术 > Python

Web协议中的Cookie

时间:2023-03-26 13:54:44 Python

Cookie是什么?RFC6256,HTTPStateManagementMechanism存储在客户端,由浏览器维护,表示应用的HTTP头存储在内存或磁盘中。服务端生成Cookie并在响应中传递Set-Cookie头通知客户端(多个Set-Cookie头允许传递多个值)客户端获取到Cookie后,后续请求会自动携带Cookie头到定义的请求中的Cookie和Set-Cookie头,Cookie头中可以存储多个name/value名值对Cookie:cookie-name=cookie-value;cookie-名称=cookie-值;Set-Cookieheader一次只能传递一个name/valuename-value对,但是响应可以包含多个AheaderSet-CookieSet-Cookie:cooke-name=cookie-value;cookie-avSet-Cookie:cooke-name=cookie-value;cookie-av;cookie-avSet-Cookie:cooke-name=cookie-value;cookie-av;cookie-avcookie-av,cookie描述的可选属性,如过期时间、域名、路径、等等cookie描述属性expires:cookie过期时间max-age:cookie存活秒数。(优先级高于expires)domain:cookie可以用于哪些域名。默认可以访问当前域名路径:指定路径只能使用cookiessecure:只能使用TLS/SSL协议(https)使用cookieshttponly:不能使用JavaScript(Document.cookie,XMLHttpRequest,RequestAPIs)来访问cookie获取百度返回的cookieimportrequestsurl="https://www.baidu.com/"headers={'User-Agent':"Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/86.0.4240.198Safari/537.36",'主机':"www.baidu.com",}response=requests.get(url,headers=headers)cookies_jar=response.cookiescookies=dict(cookies_jar)print(cookies_jar)print(cookie)#得到#77BB8AC6AD49976707A3990E04310903for.baidu.com/>,,,,]>#{'BAIDUID':'77BB8AC6AD49976703A431DD42C26C9E:FG=1','BAIDUID_BFESS':'77BB8AC6AD49976707A3990E04310903:FG=1','BIDUPS'77BB8AC6AD49976707A3990E04310903','H_PS_PSSID':'1440_33046_33059_31253_33099_333101_32958_26350','pstm':'1606203000','1606203000','bdsvrtm':'bdsvrtm':'0','0',''','bd_home''''''''''''''''''1'1'1'}cooke。一个cookie的长度(包括name、value、description属性的总长度)至少可以支持4kb,每个域名至少可以支持50个cookie。至少可以支持3,000个cookie。代理服务器传递cookies时,会有限制。每个HTTP请求都会附加Cookies,无形中增加了流量。由于HTTP请求中的Cookie是明文传递的,所以安全性是个问题(除非使用https)。cookie的大小最好不要超过4kb,适合不够复杂的存储需求