1.网络5层模型
1.1)http 1.1的特点
1.持久链接
持久连接的特点是:只要任意一端没有明确提出断开连接,则保持TCP连接状态。在HTTP1.0中,没有默认支持持久连接,而在HTTP1.1中所有连接默认都是持久连接
2.pipeline
HTTP管线化是将多个HTTP要求(request)整批提交的技术,而在传送过程中不需先等待服务端的回应。管线化机制须通过永久连接(persistent connection)完成,仅HTTP/1.1支持此技术(HTTP/1.0不支持),并且只有GET和HEAD要求可以进行管线化,而POST则有所限制。此外,初次创建连接时也不应启动管线机制.
http管线化是一项实现了多个http请求但不需要等待响应就能够写进同一个socket的技术,仅有http1.1规范支持http管线化,1.0并不支持;
1.2) http 2.0
1.数据以二进制传输 (将通信的基本单位缩小为帧)
即应用层(HTTP)和传输层(TCP or UDP)之间增加一个二进制分帧层,因此在多向请求和响应时,客户端和服务器可以把HTTP消息分解为互不依赖的帧,然后乱序发送,最后再在另一端把它们重新组合起来,解决了http 1.*的对手阻塞问题
2.同一个连接发送多个请求,不按照顺序来接收(支持多路复用)
多路复用允许同时通过单一的 HTTP 2.0 连接发起多重的请求-响应消息,即所有HTTP 2.0 连接都是持久化的,而且客户端与服务器之间也只需要一个连接即可,所有数据流共用同一个连接 ,减少了因http链接多而引起的网络拥塞(在 HTTP1.1 协议中,同一时间,浏览器会针对同一域名下的请求有一定数量限制),解决了慢启动针对突发性和短时性的http链接低效的问题
3.头信息压缩(首部压缩)
http 2.0支持DEFLATE和HPACK 算法的压缩。
4.推送等提高效率功能(服务端推送)
指客户端请求之前发送数据的机制,在 HTTP 2.0 中,服务器可以对客户端的一个请求发送多个响应。
5.请求优先级
HTTP 2.0 使用一个31比特的优先值,0表示最高优先级, 2(31)-1表示最低优先级,服务器端就可以根据优先级,控制资源分配,优先处理和返回最高优先级的请求帧给客户端。
1.3) 缓存工作原理
https://segmentfault.com/a/1190000004486640
缓存工作流程可缓存性:谁可以缓存
public都可以缓存
private只有发起请求的浏览器可以 ,nginx缓存 不能用
no-cache可以缓存 但是要服务器验证 :Last-Modified和Etag
no-store 就是不可缓存
no-transform 代理服务器不可改动缓存内容
到期:
max-age= 浏览器用这个
s-maxage= 专门为代理缓存设置, 如nginx缓存
max-stale= 这个时间内 即使超过max-age 也不去服务器取 就用过期缓存,在请求设置中有效
重新验证:
must-revalidate
proxy-revalidate
Cache-Control:private, max-age=0, must-revalidate
验证:ETag/Last-Modified
ETag
ETag是用来计算文件的内容是否发生变化,比如,你在文件中删除一个空格,这样都算文件内容发生变化。 通常做法是用md5或者SHA1算法,计算出文件的唯一值。 在前端其实都可以完成, 找到一个文件文件解析的md5算法,然后将文件传入,就可以得到ETag的值。 不过这里,我们着重点并不是让你生成Etag,而是看看ETag在缓存中的重要作用。
ETag是HTTP/1.1A的一种办法,由Web服务器生成,并写入响应头中。
//response HeadersETag:"751F63A30AB5F98F855D1D90D217B356"
接着,到了浏览器之后,便缓存在本地。 当下次打开同样的文章时,会在请求头中发送If-None-Match, 给服务器检查文件是否发生变化。如果没有,则告诉浏览器使用本地的,否则返回新文件
//request HeadersIf-None-Match:"751F63A30AB5F98F855D1D90D217B356"
Nginx配置:
打开ngnix.conf文件,检查是否有以下语句:
etag off;
more_set_headers -s 404 -t 'ETag';
more_clear_headers 'Etag';
Last-Modified
这和文档内容信息验证不同,这里采用的是日期验证办法。 即,服务器上会对文件打上一个文件改动的日期,然后客户端接受该日期,下次请求时,返回该日期,服务器验证,如果日期未变,则告诉浏览器使用本地缓存即可。
即,在服务器的相应头中,可以设置Last-Modified,来启用这一缓存协议.
//Response HeaderLast-Modified:Tue,03Mar201501:38:18GMT
接受到这一响应头之后,浏览器会对该文件做一个缓存,并保存该日期。当下次请求的时候,会通过If-Modified-Since将日期传入并验证:
If-Modified-Since:Tue, 03 Mar 2015 01:38:18 GMT
如果日期未变,则告诉浏览器使用缓存。
1.4)https加密
https证书生成
nginx中https配置
浏览器http跳转https
1.5)http 2.0优势
1.信道复用 2.分帧传输 3.Server Push
nginx中http2 配置
客户端接受服务器推送
Chrome查看统计请求详情
网友评论