HTTP协议-HTTP\1扩展一
2019-09-20 本文已影响0人
Wu杰语
序言
HTTP \1协议是一个可扩展的协议,而在真是的网络世界中,HTTP做了哪些扩展从而达到商用的级别呢?
HTTP扩展
HTTP传输的内容
HTTP传输的内容,使用了MIME 规范的一部分,用来标记 body 的数据类型。常用的有:
- text:即文本格式的可读数据,我们最熟悉的应该就是 text/html 了,表示超文本文档,此外还有纯文本 text/plain、样式表 text/css 等。
- image:即图像文件,有 image/gif、image/jpeg、image/png 等。
- audio/video:音频和视频数据,例如 audio/mpeg、video/mp4 等。
- application:数据格式不固定,可能是文本也可能是二进制,必须由上层应用程序来解释。常见的有 application/json,application/javascript、application/pdf 、 application/octet-stream。
对于浏览器,如果收到HTTP报文,对于不同的类型是做不同的处理的。例如说text/html,就进一步的解析走渲染流程;如果是application,就会进行下载或者执行。
传输过程,特别是对文本,为了传输更有效率,可以选择进行压缩,Encoding type 就少了很多,常用的只有下面三种:
- gzip:GNU zip 压缩格式,也是互联网上最流行的压缩格式;
- deflate:zlib(deflate)压缩格式,流行程度仅次于 gzip;
- br:一种专门为 HTTP 优化的新压缩算法(Brotli)。
对于字符来说,传输有编码,需要定义传输的语言和字符集。
在实际中,以访问简书为例,从chome network面板中查看:
:authority:www.jianshu.com
:method:GET
:path:/p/65f83aa86db8
:scheme:https
accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
accept-encoding:gzip, deflate, sdch, br
accept-language:zh-CN,zh;q=0.8
如上,格式之间用,隔开,其中;用来表示对该项的修饰,例如 zh;q=0.8,表示zh的比重是0.8。在header中accept中有多项,表示客户端可能支持这些类型,发送给服务器做协商。
服务器协商后得到通讯使用的实际类型,如下:
content-encoding:gzip
content-type:text/html; charset=utf-8
HTTP长连接
http的默认是个短连接,连接过程有:
- 三次握手建立TCP连接
- 传送HTTP报文
- 四次回收断开TCP连接
当传送的HTTP报文比较短的时候,基本都消耗在TCP的建链和断开链接了。
因此HTTP扩展出了长连接,在报文头中增加:
Connection: keep-alive
此时,就是保持一个长连接。
虽然长连接有这个好处,但是也带来了问题,如果有些长连接不活跃,以及长连接过多,会带来资源消耗。因此一般服务器都需要设计一定的策略,例如说Ngix,设计了超时时间或者请求最大次数,超过时间或者最大次数就将连接断开。
小结
今天这个小文章总结了HTTP下最基本的两个扩展,承载内容以及长连接。HTTP本身就是个协议,而不是实体,所以需要到实现它的浏览器或者web服务器中,去看到它的实现。学习浏览器和web服务器知识也是相当重要的。