Cookie 是什么

RFC6256,HTTP State Management Mechanism
保存在客户端、由浏览器维护、表示应用的HTTP头部
  • 存放在内存或者磁盘中
  • 服务器生成Cookie在响应中通过Set-Cookie头部告知客户端(允许多个Set-Cookie头部传递多个值)
  • 客户端得到Cookie后,后续请求都会自动将Cookie头部携带至请求中
CookieSet-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 路径下才能使用 cookie
  • secure:只用使用 TLS/SSL协议(https)时才能使用cookie
  • httponly:不能使用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
    • 每个域名下至少支持 50Cookie
    • 至少要支持 3000Cookie
  • 代理服务器传递 Cookie 时会有限制
  • Cookie 会被附加在每个 HTTP 请求中,所以无形中增加了流量
  • 由于在 HTTP 请求中的 Cookie 是明文传递的,所以安全性成问题(除非用https)
  • Cookie 的大小不应超过4kb,故对于复杂的存储需求来说是不够用的。

Theday
6 声望0 粉丝