网络基本功:http报文及TCP拥塞控制机制( 二 )


具体场景举例:
a.打开新窗口时值为 private、no-cache、must-revalidate  , 那么打开新窗口访问时都会重新访问服务器 。而如果指定了 max-age 和 expire 值(单位为秒) , 那么在此值内的时间里就不会重新访问服务器:
例如:Cache-control: max-age=5(表示当访问此网页后的5秒内再次访问不会去服务器)
b.在地址栏回车.值为 private或must-revalidate则只有第一次访问时会访问服务器 , 以后就不再访问 。
值为 no-cache , 那么每次都会访问 。
值为 max-age 和 expire , 则在过期之前不会重复访问 。
c.按后退按扭
值为private、must-revalidate、max-age , 则不会重访问 , 
值为no-cache , 则每次都重复访问
d.按刷新按钮
无论为何值 , 都会重复访问;
(3) 、Cookie 作用:客户端浏览器用来存储一些用户信息以便让服务器辨别用户身份的(大多数需要登录的网站上面会比较常见) , 比如用户名和密码 , sessionId等 。
(4) 、If-Modify-Since 作用:
把浏览器端缓存页面的最后修改时间(精确到秒)发送到服务器去 , 服务器会把这个时间与服务器上实际文件的最后修改时间进行对比 。如果时间一致 , 那么返回304 , 客户端就直接使用本地缓存文件 。如果时间不一致 , 就会返回200和新的文件内容以及新的修改时间(Last-Modify) 。客户端接到之后 , 会丢弃旧文件 , 把新文件缓存起来 , 并显示在浏览器中 。
(5) 、Etag的使用场景:
1.有些文件需要频繁更新 , 但是文件内容并没有变化 。
聪明的开发者会把 Last-Modified和ETags请求的http报头一起使用 , 提高浏览器性能 。这样可利用客户端(例如浏览器)的缓存 。因为服务器首先产生Last-Modified/Etag标记 , 服务器可在稍后使用它来判断页面是否已经被修改 。本质上 , 客户端通过将该记号传回服务器要求服务器验证其(客户端)缓存 。
过程如下:

  • 1.客户端请求一个页面(A) 。
  • 2.服务器返回页面A , 并在给A加上一个Last-Modified/ETag 。
  • 3.客户端展现该页面 , 并将页面连同Last-Modified/ETag一起缓存 。
  • 4.客户再次请求页面A , 并将上次请求时服务器返回的Last-Modified/ETag一起传递给服务器 。
  • 5.服务器检查该Last-Modified或ETag , 并判断出该页面自上次客户端请求之后还未被修改 , 直接返回响应304和一个空的响应体 。
(6) 、如果服务器又设置了Cache-Control:max-age和Expires呢 , 怎么办?
答案是同时使用 , 也就是说在完全匹配If-Modified-Since和If-None-Match即检查完修改时间和Etag之后 , 服务器才能返回304.(不要陷入到底使用谁的问题怪圈)
(7) 、如果传输的文件很大怎么办?
方案一:通过压缩文件: Accept-Encoding: gzip , deflate ;
方案二:分割传输 , 浏览器逐步显示;
状态码
网络基本功:http报文及TCP拥塞控制机制

文章插图
 
1XX : 接受的请求正在处理
200: 请求正常处理
3xx开头 , 资源文件
301: 资源被永久删除 , 永久重定向到新的网址
302: 旧的资源还在 , 只是暂时性的重定向资源
重定向原因:
(1)网站调整(如改变网页目录结构);
(2)网页被移到一个新地址;
(3)网页扩展名改变(如应用需要把.php改成.Html或.shtml) 。
  • 304: 返回上次请求资源未作改动,验证浏览器的缓存机制 Etag
  • 307: 资源的重定向 , 但是不会把post改为get操作;
  • 4xx开头:客户端
  • 400: 请求参数错误
  • 401: 客户端无权访问,要去输入用户名密码之类的授权信息
  • 403: 禁止访问(读写权限等影响)
  • 404: 请求的资源不存在
  • 5xx开头:服务端
  • 500: 服务内部错误
  • 502: 网关错误
  • 503: 临时过载或者维护,导致服务端无法正常处理请求
拥塞计算机网络中的带宽 , 交换节点中的缓存和处理机制 , 都是网络资源 。在某段时间内 , 若对网络中某一资源的需求超过了该资源所能提供的可用部分 , 网络的性能就会变坏 。


推荐阅读