HTTP的cookies机制_缓存控制_代理服务
初步概括了HTTP中cookies,缓存和代理的基本要素
HTTP的Cookies缓存机制:
用户第一次浏览服务器时,服务器利用set-Cookis给浏览器标记身份。之后请求服务器时,会自动带上Cookies以便服务器识别身份
Cookies的属性:
- 1.生存周期 Expires称为过期时间,Max-Age称为截止时间,这两个可以同时出现,但是Max-Age的权重会高一些。
- 2.作用域:Domain指的是域名,Path指定所属域名。
- 3.安全:HttpOnly限制浏览器只能HTTP访问,js不能操作。SameSite 限制第三方 Cookie,从而减少安全风险。
- 4.加密:Secure限制HTTPS协议加密传输。
因为Cookie不属于HTTP标准,而是属于扩展协议,所以语法使用的分隔符为";"。
HTTP的缓存控制:
实际上HTTP传输的每一个环节上基本都会有缓存。
- 1. 浏览器发现缓存无数据,于是发送请求,向服务器获取资源;
- 2. 服务器响应请求,返回资源,同时标记资源的有效期,“Cache-Control”:“max-age=30”;
- 3. 浏览器缓存资源,等待下次重用。
ma-age的计算起点是从服务器离开的时刻计算,包含了在链路传输过程中所有节点所停留的时间,例如 上文说到的30s,因为网络质量糟糕,传到浏览器已经过了10s,那就只能在浏览器缓存20s。
Cache-Control的其他属性:
除了max-age,还有其他几个:
- "no_store":不许缓存
- "no_cache":允许缓存,但需要验证过期
- "must-revalidate":缓存不过期则可以使用,过期了需要去服务器验证
浏览器的刷新相当于请求头发送了 max-age=0,强制刷新相当于no-cache。
缓存的条件请求:
- if-Modified-Since:服务器只在所请求的资源在给定的日期时间之后对内容进行过修改的情况下才会将资源返回。如果此时间没有修改则返回304
- If-None-Match:分为强Etag和弱Etag。 弱Etag会在前面有W/字符,可以允许内部标签顺序调整,多了几个空格。
HTTP的代理服务:
指服务本身不生产内容,而是处于中间位置转发上下游的请求和响应,具有双重身份
主要的功能有:
如果有多个代理的存在,会在报文中形成链表,比如有两个或两个以上新增“Via: proxy1, proxy2”,服务端返回的时候会返回 “Via: proxy2, proxy1”。
如果要知道客户端的真实IP地址,可以使用字段“X-Forwarded-For”和“X-Real-IP”,但是这个会因为解析而损耗性能。可以用专门的代理协议,在协议层就将真实IP获取到