序言
这是HTTP\1扩展的小短文的最后一篇了,HTTP的缓存控制和代理,实际上HTTP的扩展还有很多,这里介绍的都是在工程上的主要使用。
HTTP扩展
HTTP缓存控制
为何说是HTTP缓存控制而不是HTTP缓存,这是因为HTTP本身没有缓存功能,所以只是在HTTP协议中扩充了缓存字段,让浏览器和服务端按照缓存控制字段处理是否需要缓存。
- 服务器端使用Cache-Control, 例如Cache-Control: max-age=30,就是说服务器端发出报文到客户端智能保留30秒。浏览器是怎么处理的呢,浏览器收到缓存条件就把数据缓存起来,如果没有过期就可以直接使用,过期就要去服务器验证是否仍然可用。
- 浏览器怎样验证呢?有两个步骤:
- 在第一次缓存的时候浏览器收到的服务器报文中,有Last-Modified和ETag两个字段。
- 浏览器接下来的处理中,会先下发HEAD请求,报文带上if-Modified-Since和if-None-Match两个字段以及上面Last-Modified和ETag两个字段, 交给服务器验证,服务器验证后如果返回304 Not Modified,就说明缓存依然有效,浏览器就可以继续使用缓存。
代理
代理是HTTP比较常见的应用,最常用的代理应用是负载均衡。通过设置代理,可以做如下事情:
- 代理服务器可以对服务器做管理,建立心跳,如果服务器已经异常,则端口服务器连接,保证服务高可用性。
- 黑名单,可以在代理服务器上设置黑名单,保证服务器高可用。
- 缓存,如ngix,可以用来作为缓存静态数据,如果发现是静态数据,就直接从代理服务器返回。
由于中间存在代理,服务器和客户端之间就不能互相知道IP,而服务器的IP一般按照安全原则是不暴漏给客户端的,但是服务器确有必要知道客户端的IP地址,这时有两个字段 X-Forwarded-Host和X-Real-IP只记录客户端的信息。
小结
关于HTTP/1的主要扩展使用了三篇小短文,分别是承载内容、长连接、cookie、重定向、缓存、代理
网友评论