HTTP-HTTP协议特性和使用方法(三)

HTTP-HTTP协议特性和使用方法(三)

一、HTTP的长连接和短连接
  • HTTP协议是基于请求/响应模式的,因为只要服务端给了响应,本次HTTP请求就结束了
  • HTTP的长连接和短连接本质上是TCP长连接和短连接
1. 不同版本协议的差异
  • HTTP1.0中,默认使用的是短连接,也就是说,浏览器和服务器每进行一次HTTP操作,就建立一次连接,结束就中断
  • HTTP1.1中,默认使用长连接,用以保持连接特性
二、HTTP缓存

​ 一般对于服务器响应的css静态文件和js、图片等不太换的文件会缓存在浏览器本地,就不需要重复的去请求,增大效率

1.HTTP缓存头部字段
  • Cache-Control:请求/响应头,缓存控制字段
字段值含义
no-store所有内容都不缓存
no-cache缓存,但是浏览器使用缓存前,都会请求服务器判断缓存资源是否是最新
max-age=x(单位:秒)请求缓存后的X秒不再发起请求
s-maxage=x(单位:秒)代理服务器请求源站资源缓存后的X秒不再发起请求,只对CDN缓存有效
public客户端和代理服务器(CDN)都可缓存
private只有客户端可以缓存
  • Expires:响应头,代表资源过期时间,由服务器返回提供,是http1.0的属性,在与max-age共存的情况下,优先级要低
  • Last-Modified:响应头,资源最新修改时间,由服务器告诉浏览器
  • if-Modified-Since:请求头,资源最新修改时间,由浏览器告诉服务器,和Last-Modified是一对,他两会进行对比
  • Etag:响应头,资源标识,由服务器告诉浏览器
  • if-None-Match:请求头,缓存资源标识,由浏览器告诉服务器(其实就是上次服务器给的Etag),和Etag是一对,他两会进行对比
2.HTTP缓存工作方式

场景一:让服务器与浏览器约定一个文件过期时间-Expires

  1. 浏览器向服务器请求资源,服务器响应资源并设置过期时间
  2. 浏览器下次还请求这个资源时,会判断过期时间是否已过期
  3. 若未过期,则直接使用本地缓存的资源
  4. 若已过期,则去访问服务器资源

场景二:让服务器与浏览器在约定文件过期时间的基础上,再加一个文件最新修改时间的对比——Last-Modified与if-Modified-Since

​ 在场景一中,服务器最开始响应了资源并且设置了时间,当过期时间过了之后,浏览器再次向服务器请求资源,而此资源并未修改,则又会造成资源浪费,那么就加了Last-Modified和if-Modified-Since一对字段,工作原理如下:

  1. 浏览器向服务器请求资源,服务器相应资源并设置过期时间,而且给了一个资源修改时间
  2. 浏览器下次还请求这个资源时,会判断过期时间是否已过期
  3. 若未过期,则直接使用本地缓存的资源
  4. 若已过期,则访问服务器,并且带上请求头中的if-Modified-Since(这个其实就是上次服务器发给浏览器的Last-Modified),服务器会将自己的Last-Modified和浏览器的if-Modified-Since进行对比
  5. 若服务器的Last-Modified和浏览器的if-Modified-Since不同,则服务器会查找最新的资源并返回(回到了第一步)
  6. 若服务器的Last-Modified和浏览器的if-Modified-Since相同,服务器就会响应304,文件未修改过,浏览器就会继续用本地缓存
三、缓存改进方案
1.md5/hash缓存

​ 通过不缓存html,为静态文件添加MD5或者hash标识,解决浏览器无法跳过缓存过期时间主动感知文件变化的问题

2.CDN缓存

​ CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度鞥功能模块,使用户就近索取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。

​ 通俗来讲,当某一个主服务器只有一台,用户所在地区离主服务器所在地区太远,访问速度太慢,那么就会让用户去访问离其较近的一个节点服务器,从而加快访问速率。

3.CDN缓存工作方式
  1. 浏览器第一次访问主服务器,服务器会将资源返回给浏览器,并且通知浏览器以后访问此资源直接访问节点服务器就好
  2. 后续浏览器访问此资源,就不会去找主服务器,而是直接访问节点服务器
四、内容协商机制

​ 内容协商机制就是指客户端和服务器端就响应的资源内容进行交涉,然后提供给客户端最为适合的资源。内容协商会以响应资源的语言、字符集、编码方式等作为判断的基准

1.内容协商方式
  • 客户端驱动:客户端发起请求,服务器发送可选项列表,客户端作出选择后在发送第二次请求
  • 服务器驱动:服务器检查客户端的请求头部集并决定提供哪个版本的页面
  • 透明协商:某个中间设备(通常是缓存代理)代理客户端进行协商
2.服务器驱动-请求首部集

客户端发送的请求头

  • Accept:告知服务器发送何种媒体类型
  • Accept-Language:告知服务器发送何种语言
  • Accept-Charset:告知服务器发送何种字符集
  • Accept-Encoding:告知服务器采用何种编码

服务器响应的响应头

  • Content-Type:内容类型
  • Content-Language:内容语言
  • Content-Encoding:内容编码格式
3.断点续传和多线程下载

​ HTTP是通过在Header里两个参数实现的,客户端发请求时对应的是Range,服务器响应时对应的是Content-range

3.1 Range

​ 用于请求头中,指定第一个字节的位置和最后一个字节的位置,一般格式:

Range:(unit=first byte pos)-[last byte pos]
例如:
Range:bytes=0-499	表示0-499字节的数据
Range:bytes=500-999	表示50-999字节的数据
Range:bytes=-500	表示最后500字节的数据
Range:bytes=500-	表示从500字节开始,到最后一个字节的数据
Range:bytes=500-600,601-999	表示分成两块下载,500-600和601-999部分数据
3.2 Content-Range

​ 用于响应头中,在发出带Range的请求后,服务器会在Content-Range头部返回当前接受的范围和文件总大小,一般格式:

Content-Range:bytes(unit first byte pos)-[last byte pos]/[entity length]

​ 在响应完成后,返回的响应内容也不相同:

  • 不使用断点续传:HTTP/1.1 200 OK
  • 使用断点续传:HTTP/1.1 206 Partial Content
3.3 断点续传过程
  1. 客户端下载一个1024K的文件,已经下载了其中512K
  2. 网络中断,客户端请求续传,因此需要在HTTP头中申明本次需要续传的片段:Range:bytes=512000-,这个头通知服务器从文件的512K位置开始传输文件
  3. 服务端收到断点续传请求,从文件的512K位置开始传输,并且在HTTP头中增加:Content-Range:bytes 512000/1024000,并且此时服务端返回的HTTP状态码应该是206,而不是200
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值