One Day

323 阅读3分钟

HTTP

http是一个无状态的协议,所谓的无状态协,简单理解就是即使同一个客户端连续发送两次请求给服务器,服务器页识别不出这是同一个客户端发送的请求,这就会导致假如你添加一个商品到购物车中,但因为识别不出是同一个客户端,你刷新下页面就没了

Cookie

为了解决HTTP无状态导致的问题,后来出现了Cookie,但是cookie的存在也不是为了解决通讯协议无状态的问题,只是为了解决客户端与服务端会话状态的问题,这个状态是指后端服务的状态而非通讯协议的状态 cookie作为一段一般不超过4KB的小型文本数据,他由一个名称(Name)、一个值(Value)和其它几个用于控制Cookie有效期、安全性、使用范围的可选属性组成。

Cookie的设置

1.客户端发送HTTP请求到服务器 2.当服务器收到HTTP请求时,在响应头里面添加一个Set-Cookie字段 3.浏览器收到响应后保存下Cookie 4.之后对该服务器每一次请求中都通过Cookie字段将Cookie信息发送给服务器

Cookie的属性

Name/Value

用JavaScript操作Cookie的时候注意对Value进行编码处理

Expires

Expires用于设置Cookie的过期时间。 Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT;

Max-Age

用于设置在Cookie失效之前需要经过的秒数 Set-Cookie: id=a3fWa; Max-Age=604800; Max-Age 可以为正数、负数、甚至是 0。 如果 max-Age 属性为正数时,浏览器会将其持久化,即写到对应的 Cookie 文件中。 当 max-Age 属性为负数,则表示该 Cookie 只是一个会话性 Cookie。 当 max-Age 为 0 时,则会立即删除这个 Cookie。 假如 Expires 和 Max-Age 都存在,Max-Age 优先级更高。

Domain

指定了Cookie可以送达的主机名。假如没有指定,那么默认当前文档访问地址中的主机部分(但不包含子域名),不能跨越设置Cookie,是无效的

Path

指定一个URl路径,这个路径必须出现在请求的资源路径中才可以发送Cookie首部。

Secure属性

标记为Secure的Cookie只应该通过被HTTPS协议加密过的请求发送给服务端。使用HTTPS安全协议,可以保护Cookie在浏览器和Web服务器间的传输过程中不被窃取和篡改。

HTTPOnly

设置HTTPOnly属性可以防止客户端脚本通过document.cookie的方式访问 Cookie,有助于避免XSS攻击。

SameSite作用

SameSite 属性可以让 Cookie 在跨站请求时不会被发送,从而可以阻止跨站请求伪造攻击(CSRF)。 属性值 SameSite 可以有下面三种值: Strict 仅允许一方请求携带 Cookie,即浏览器将只发送相同站点请求的 Cookie,即当前网页 URL 与请求目标 URL 完全一致。 Lax 允许部分第三方请求携带 Cookie None 无论是否跨站都会发送 Cookie 之前默认是 None 的,Chrome80 后默认是 Lax。