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
,故对于简单的存储需要来说是不够用的。