HTTP深入讲解

2019-05-14  本文已影响0人  vinterx

一、HTTP简介

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于在万维网(WWW:World Wide Web )上服务端和客户端之间传送数据的协议。

二、HTTP历史

HTTP 建立之初,主要是为了将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。也是说对于前端来说,我们所写的HTML页面将要放在我们的 WEB 服务器上,用户端通过浏览器访问url地址来获取网页的显示内容,但是到了 WEB2.0 以来,我们的页面变得复杂,不仅仅单纯的是一些简单的文字和图片,同时我们的 HTML 页面有了 CSS,Javascript,来丰富我们的页面展示,当 ajax 的出现,我们又多了一种向服务器端获取数据的方法,这些其实都是基于 HTTP 协议的,于是前后端逐渐分离。到了移动互联网时代,我们页面可以跑在手机端浏览器里面,但是和 PC 相比,手机端的网络情况更加复杂,这对HTTP请求有了更高的要求,因此在不断的优化与完善。


image.png

HTTP/0.9(1990)

HTTP/0.9 是个相当简单的协议。它只有一个方法(GET),请求和响应没有首部,其设计目标只是获取 HTML格式字符串(没有图片,只有文本)。

HTTP/1.0(1996)

相对于HTTP/0.9增加了大量的内容,建立了现代HTTP的基本架构,如今被大家受熟悉。

相对于 0.9 版本来说,HTTP/1.0 是一个巨大的飞跃,但仍存在很多瑕疵,主要是每次TCP的建立都只能发送一个请求,数据响应完毕就关闭连接,由于客户端和服务端每次连接都要三次握手,所以每次发送一个请求,开始都是比较耗费时间,发送速率比较慢。其次缺少强制的 Host 首部,并且缓存的选择也相当简陋,主要是Expires强缓存、Last-Modified/If-Modified-Since协商缓存这两种。

HTTP/1.1(1999)

HTTP/1.1是当前主流的HTTP协议版本,相比1.0版本主要有以下的特点

Content-Length: 1024

上面代码告诉客户端,本次回应的长度是1024个字节,后面的字节就属于下一个回应了。

不足:1.1版允许复用TCP连接,但是同一个TCP连接里面,所有的数据通信是按次序进行的。服务器只有处理完一个回应,才会进行下一个回应。要是前面的回应特别慢,后面就会有许多请求排队等着。这称为\color{red}{队头堵塞}(Head-of-line blocking)。为了避免这个问题,只有两种方法:一是减少请求数,二是同时多开持久连接。这导致了很多的网页优化技巧,比如合并脚本和样式表、将图片嵌入CSS代码、域名分片(domain sharding)等等。如果HTTP协议设计得更好一些,这些额外的工作是可以避免的。

HTTP/2(2015)

HTTP/1.1 版的头信息肯定是文本(ASCII编码),数据体可以是文本,也可以是二进制。

HTTP/3(暂未发布)

三、参考链接

[HTTP协议入门](http://www.ruanyifeng.com/blog/2016/08/http.html

上一篇下一篇

猜你喜欢

热点阅读