http连接,缓存,cookie,重定向,代理
-
早期的HTTP协议使用短连接,收到响应后就立即关闭连接,效率很低;
-
HTTP/1.1默认启用长连接,在一个连接上收发多个请求响应,提高了传输效率;
-
服务器会发送“Connection: keep-alive”字段表示启用了长连接;
-
报文头里如果有“Connection: close”就意味着长连接即将关闭;
-
过多的长连接会占用服务器资源,所以服务器会用一些策略有选择地关闭长连接;
-
“队头阻塞”问题会导致性能下降,可以用“并发连接”和“域名分片”技术缓解
-
重定向
-
重定向是服务器发起的跳转,要求客户端改用新的URI重新发送请求,通常会自动进行,用户是无感知 的;
-
301/302是最常用的重定向状态码,分别是“永久重定向”和“临时重定向”;
-
响应头字段Location指示了要跳转的URI,可以用绝对或相对的形式;
-
重定向可以把一个URI指向另一个URI,也可以把多个URI指向同一个URI,用途很多;
-
使用重定向时需要当心性能损耗,还要避免出现循环跳转。
-
HTTP的Cookie机制
-
Cookie是服务器委托浏览器存储的一些数据,让服务器有了“记忆能力”;
-
响应报文使用Set-Cookie字段发送“key=value”形式的Cookie值;
-
请求报文里用Cookie字段发送多个Cookie值;
-
为了保护Cookie,还要给它设置有效期、作用域等属性,常用的有Max-Age、Expires、Domain、 HttpOnly等;
-
Cookie最基本的用途是身份识别,实现有状态的会话事务。
-
HTTP的缓存控制
-
缓存是优化系统性能的重要手段,HTTP传输的每一个环节中都可以有缓存;
-
服务器使用“Cache-Control”设置缓存策略,常用的是“max-age”,表示资源的有效期;
-
浏览器收到数据就会存入缓存,如果没过期就可以直接使用,过期就要去服务器验证是否仍然可用;
-
验证资源是否失效需要使用“条件请求”,常用的是“if-Modified-Since”和“If-None-Match”,收到 304就可以复用缓存里的资源;
-
验证资源是否被修改的条件有两个:“Last-modified”和“ETag”,需要服务器预先在响应报文里设 置,搭配条件请求使用;
-
浏览器也可以发送“Cache-Control”字段,使用“max-age=0”或“no_cache”刷新数据。
-
HTTP缓存看上去很复杂,但基本原理说白了就是一句话:“没有消息就是好消息”,“没有请求的请求, 才是最快的请求。
-
http代理
-
HTTP代理就是客户端和服务器通信链路中的一个中间环节,为两端提供“代理服务”;
-
代理处于中间层,为HTTP处理增加了更多的灵活性,可以实现负载均衡、安全防护、数据过滤等功能;
-
代理服务器需要使用字段“Via”标记自己的身份,多个代理会形成一个列表;
-
如果想要知道客户端的真实IP地址,可以使用字段“X-Forwarded-For”和“X-Real-IP”;
-
专门的“代理协议”可以在不改动原始报文的情况下传递客户端的真实IP
-
HTTP的缓存代理
-
计算机领域里最常用的性能优化手段是“时空转换”,也就是“时间换空间”或者“空间换时间”, HTTP缓存属于后者;
-
缓存代理是增加了缓存功能的代理服务,缓存源服务器的数据,分发给下游的客户端;
-
“Cache-Control”字段也可以控制缓存代理,常用的有“private”“s-maxage”“no-transform”等, 同样必须配合“Last-modified”“ETag”等字段才能使用;
-
缓存代理有时候也会带来负面影响,缓存不良数据,需要及时刷新或删除
浪波激泥