HTTP协议

一、HTTP请求报文与响应报文格式

请求报文包含三部分:

1、请求行:包含请求方法、URI、HTTP版本信息
2、请求首部字段
3、请求内容实体

响应报文包含三部分:

1、状态行:包含HTTP版本、状态码、状态码的原因短语
2、响应首部字段
3、响应内容实体

二、HTTP1.1新特性

1、默认持久连接节省通信量,只要客户端服务端任意一端没有明确提出断开TCP连接,就一直保持连接,可以发送多次HTTP请求

2、管线化,客户端可以同时发出多个HTTP请求,而不用一个个等待响应

3、断点续传原理

三、断点续传

HTTP1.1协议中定义了断点续传相关的HTTP头 Range和Content-Range字段,一个最简单的断点续传实现大概如下: 
1、客户端下载一个1024K的文件,已经下载了其中512K 
2、网络中断,客户端请求续传,因此需要在HTTP头中申明本次需要续传的片段:Range:bytes=512000- 这个头通知服务端从文件的512K位置开始传输文件 
3、服务端收到断点续传请求,从文件的512K位置开始传输,并且在HTTP头中增加:Content-Range:bytes 512000-/1024000,并且此时服务端返回的HTTP状态码应该是206,而不是200。 

现实中,如果在发起续传请求时,URL对应的内容发生了变化,解决方式为:Last-Modified来标识文件的最后修改时间。

四、URI与URL

URI是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源。

URL是uniform resource locator,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。

五、常用的HTTP方法

GET: 用于请求访问已经被URI(统一资源标识符)识别的资源,可以通过URL传参给服务器

POST:用于传输信息给服务器,主要功能与GET方法类似,但一般推荐使用POST方式。

PUT: 传输文件,报文主体中包含文件内容,保存到对应URI位置。

HEAD: 获得报文首部,与GET方法类似,只是不返回报文主体,一般用于验证URI是否有效。

DELETE:删除文件,与PUT方法相反,删除对应URI位置的文件。

OPTIONS:查询相应URI支持的HTTP方法。

六、HTTPS工作原理

1、首先HTTP请求服务端生成证书,客户端对证书的有效期、合法性、域名是否与请求的域名一致、证书的公钥(RSA加密)等进行校验;

2、客户端如果校验通过后,就根据证书的公钥的有效, 生成随机数,随机数使用公钥进行加密(RSA加密);

3、消息体产生的后,对它的摘要进行MD5(或者SHA1)算法加密,此时就得到了RSA签名;

4、发送给服务端,此时只有服务端(RSA私钥)能解密。

5、解密得到的随机数,再用AES加密,作为密钥(此时的密钥只有客户端和服务端知道)。

七、一次完整的HTTP请求过程

1、建立TCP连接

2、浏览器向Web服务器发送请求行

3、浏览器发送请求头

4、服务器应答。HTTP/1.1 200 OK ,应答的第一部分是协议的版本号和应答状态码。

5、服务器发送应答头

6、服务器向浏览器发送数据。发送一个空白行来表示头信息的发送已结束,然后以Content-Type应答头信息所描述的格式发送用户所请求的实际数据。

7、服务器关闭TCP连接

八、常见HTTP状态码

2XX:请求正常处理

3XX:重定向

4XX:请求问题

5XX:服务器问题

九、HTTP优化方案

1、TCP复用

TCP连接复用是将多个客户端的HTTP请求复用到一个服务器端TCP连接上,而HTTP复用则是一个客户端的多个HTTP请求通过一个TCP连接进行处理。前者是负载均衡设备的独特功能;而后者是HTTP 1.1协议所支持的新功能,目前被大多数浏览器所支持。

2、内容缓存

将经常用到的内容进行缓存起来,那么客户端就可以直接在内存中获取相应的数据了。

3、压缩

将文本数据进行压缩,减少带宽

4、SSL加速

使用SSL协议对HTTP协议进行加密,在通道内加密并加速

5、TCP缓冲

通过采用TCP缓冲技术,可以提高服务器端响应时间和处理效率,减少由于通信链路问题给服务器造成的连接负担。

十、HTTP2.0和HTTP1.X相比新特性

1、新的二进制格式

HTTP1.x的解析是基于文本,HTTP2.0的协议采用二进制格式,实现方便且健壮。

2、多路复用

即连接共享,即每一个request都是用作连接共享机制的。一个request对应一个id,这样一个连接上可以有多个request,每个连接的request可以随机的混杂在一起,接收方可以根据request的 id将request再归属到各自不同的服务端请求里面。

3、header压缩

HTTP1.x的header带有大量信息,而且每次都要重复发送,HTTP2.0使用encoder来减少需要传输的header大小,通讯双方各自cache一份header fields表,既避免了重复header的传输,又减小了需要传输的大小。

4、服务端推送

HTTP2.0也具有server push功能。

posted @ 2019-09-25 16:17  尘世中一个迷途小书童  阅读(128)  评论(0编辑  收藏  举报