Cookie 是什么
RFC6256,HTTP State Management Mechanism
保存在客户端、由浏览器维护、表示应用的HTTP
头部
- 存放在内存或者磁盘中
- 服务器生成
Cookie
在响应中通过Set-Cookie
头部告知客户端(允许多个Set-Cookie
头部传递多个值) - 客户端得到
Cookie
后,后续请求都会自动将Cookie
头部携带至请求中
Cookie
与 Set-Cookie
头部的定义
Cookie头部中可以存放多个 name/value 名值对
Cookie:cookie-name=cookie-value;cookie-name=cookie-value;
Set-Cookie
头部一次只能传递1个name/value
名值对,但是响应中可以含多个头部Set-Cookie
Set-Cookie:cooke-name=cookie-value;cookie-av
Set-Cookie:cooke-name=cookie-value;cookie-av;cookie-av
Set-Cookie:cooke-name=cookie-value;cookie-av;cookie-av
cookie-av
,cookie 描述的可选属性,比如到期时间、所属域名,所在路径等
Cookie 描述属性
expires
:cookie 到期时间max-age
:cookie存活秒数。(比expires
优先级更高)domain
:cookie可用于哪些域名。默认可以访问当前域名path
:指定 path 路径下才能使用 cookiesecure
:只用使用TLS/SSL
协议(https
)时才能使用cookiehttponly
:不能使用JavaScript (Document.cookie、XMLHttpRequest、Request APIs)访问到cookie
获取百度返回的cookie
import requests
url = "https://www.baidu.com/"
headers = {
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36",
'Host': "www.baidu.com",
}
response = requests.get(url, headers=headers)
cookies_jar = response.cookies
cookies = dict(cookies_jar)
print(cookies_jar)
print(cookies)
# 得到结果
# <RequestsCookieJar[<Cookie BAIDUID=77BB8AC6AD49976703A431DD42C26C9E:FG=1 for .baidu.com/>, <Cookie BAIDUID_BFESS=77BB8AC6AD49976707A3990E04310903:FG=1 for .baidu.com/>, <Cookie BIDUPSID=77BB8AC6AD49976707A3990E04310903 for .baidu.com/>, <Cookie H_PS_PSSID=1440_33046_33059_31253_33099_33101_32958_26350 for .baidu.com/>, <Cookie PSTM=1606203000 for .baidu.com/>, <Cookie BDSVRTM=0 for www.baidu.com/>, <Cookie BD_HOME=1 for www.baidu.com/>]>
# {'BAIDUID': '77BB8AC6AD49976703A431DD42C26C9E:FG=1', 'BAIDUID_BFESS': '77BB8AC6AD49976707A3990E04310903:FG=1', 'BIDUPSID': '77BB8AC6AD49976707A3990E04310903', 'H_PS_PSSID': '1440_33046_33059_31253_33099_33101_32958_26350', 'PSTM': '1606203000', 'BDSVRTM': '0', 'BD_HOME': '1'}
Cookie 使用的限制
RFC 规范对浏览器使用
Cookie
的要求- 每条
Cookie
的长度(包括name、value以及描述的属性等总长度)至少能支持4kb
- 每个域名下至少支持
50
个Cookie
- 至少要支持
3000
个Cookie
- 每条
- 代理服务器传递
Cookie
时会有限制 Cookie
会被附加在每个 HTTP 请求中,所以无形中增加了流量- 由于在 HTTP 请求中的
Cookie
是明文传递的,所以安全性成问题(除非用https) Cookie
的大小不应超过4kb
,故对于复杂的存储需求来说是不够用的。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。