Http 协议学习

  • 负载均衡
 - 所谓的四层负载,指的是工作在传输层上,基于TCP/IP协议的特性,例如IP地址、端口号等实现对后端服务器的负载均衡
 - 七层负载均衡:工作在应用层,看到是http协议,解析http报文里的URI、主机名。资源类型等数据,再用适当的策略转发给后端服务器
  • 缓存机制
缓存控制机制:

max-age:是生存时间,时间计算点是响应报文的创建时间(即离开服务器的时刻),
即包含链路传输过程中所有节点停留时间,浏览器也可以在请求头里加上Cache-control:max-age=0,
代表直接去服务器请求最新的报文

no-store:不允许浏览器缓存
no-cache:可以缓存,但是使用之前必须要去服务器检验是否过期,是否有更新的版本
must-revalidate:缓存不过期,可以使用,但是过期了就必须去服务器检验


条件请求:
- 条件请求最常用的是 “if-Modified-since”和“if-None-Match”,需要第一次响应报文提供“Last-modified”和“ETag”,然后第二次请求带上原值,验证资源是否变化

- Last-modified 就是文件最后修改时间
- Etag是实体标签的缩写,资源的唯一标识
  • http代理

Via:http中的规定的标准头字段,代理服务器用字段 "Via"标明代理身份,代理服务器会将自身信息追加到字段尾部

为了获取客户端的IP地址
- X-Forwarded-For:为谁而转发,每经过一个代理节点就会在字段里追加一个信息
- X-Real-IP:只记录客户端IP地址,没有代理信息

  • http缓存代理
源服务器缓存控制

缓存代理区分客户端上的缓存和代理上的缓存
1. private 表示缓存只能在客户端上保存,用户私有,不能在代理上与人共享
2. public 缓存是完全公开的,谁都可以用

must-validate 和 proxy-validate
1.must-validate 过期就必须要回源服务器验证
(一旦资源过期(比如已经超过max-age),在成功向原始服务器验证之前,缓存不能用该资源响应后续请求。)


2.proxy-revalidate :代理的缓存过期后必须验证,客户端不用到源服务器,只验证到代理就ok
(与must-revalidate作用相同,但它仅适用于共享缓存(例如代理),并被私有缓存忽略)


s-maxage:缓存的生存时间,限定代理上能够存多久
客户端仍然使用 max-age


客户端缓存控制

max-stale[=<seconds>]
表明客户端愿意接收一个已经过期的资源。可以设置一个可选的秒数,表示响应不能已经过时超过该给定的时间。

min-fresh=<seconds>
表示客户端希望获取一个能在指定的秒数内保持其最新状态的响应。

only-if-cached
表明客户端只接受已缓存的响应,并且不要向原始服务器检查是否有更新的拷贝。
示例

  • 重定向
301:永久重定向
302:临时重定向

Location:字段指示了要跳转的URI
Referer 和 Referrer-Policy :表示浏览器跳转的来源,可用于统计和防盗链
  • http连接管理
http 0.9/1.0  默认是短连接
http 1.1 ,采用keep-alive 使用长连接机制

http的队头阻塞:http规定报文必须一发一收,形成一个队列,排在前面的请求优先被处理,
如果队首请求处理的太慢,队列后面的请求也必须去等待

解决队头阻塞方案:
- 并发连接:浏览器同时对一个域名发起多个长连接,众多浏览器对于一个域名的默认连接数是 6-8个连接数
- 域名分片:一个网站弄多个域名,多个域名指向同一台服务器,提高连接数
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章