图解http(02)-http基础

1. http协议特性

无状态

http是一种不保存状态的协议,即服务器不对之前的请求和响应进行保存,这样设计是为了确保协议的可伸缩性,它可以快速大量地处理事务。

我们考虑这样一种情况,在购物网站请求数据,往往服务器要验证登录信息,由于http是无状态连接的,服务器不可能知道客户端是否登录了,难道我们请求任何数据时都必须带着身份信息再由服务器验证吗?显然不会,为了解决这个问题http引入了cookie方式。

持久连接

在http的早起版本中,由于当时网络不这么发达,网络请求密度相对比较低,所以当时每做一次网络请求时,必须连接(三次握手)-请求与相应-断开连接(四次挥手),现在网络请求密度非常大,必须满足一次连接多次请求,所以在http1.1版本中默认所有的连接都是持久连接。

管线化

管线化即并发,持久连接使并发成为可能。

内容协商

通俗地来讲就是不同情况不同对待,比如访问同一个URI地址,浏览器语言默认为中文时我们访问到的是中文页面,默认语言是英文时我们访问到英文页面。 内容协商会以语言、字符集、编码方式等作为基准判断响应的资源。

2. http引入cookie

我们来描述一下cookie的原理,当客户端第一次向服务器请求时,客户端仅仅向服务器发送请求,服务器接收到客户端的请求,会生成一个cookie值在服务器端保存下来且记住其对应的客户端。
然后服务器响应客户端请求,把cookie和响应数据一并返回给客户端,客户端接收到cookie后将其保存下来。
客户端再向服务器发送请求时会将本地保存的cookie和请求报文一起发送给服务端,服务端通过本地的cookie和客户端发送过来的cookie进行对比就可以确认客户端身份。

《图解http(02)-http基础》

《图解http(02)-http基础》

3. http方法

Http1.1中的请求方法有这些:

3.1 GET
请求访问已被URI识别的资源,请求不需要实体主体。

3.2 POST
传输实体主体。

3.3 PUT
传输文件,本身无验证机制,存在安全问题。

3.4 DELETE
删除文件,与PUT相反的方法,也无验证机制。

3.5 HEAD
HEAD方法和GET方法一样用于获取资源,只是HEAD方法的请求不返回报文的主体部分。

3.6 OPTIONS
用来查询针对请求URI指定的资源支持的方法(GET?POST?等)。

3.7 TRACE
让web服务器端将之前的请求通信返回给客户端的方法,用于追踪路径,请求在各个代理服务器之间中转最终到达目标服务器,在中转时请求可能会被篡改。

3.8 CONNECT
要求用隧道协议连接代理,主要使用SSL和TLS协议把通信内容加密后经网络隧道传输。

4. http结构

http的报文大致可分为报文首部和报文主体两部分,请求报文的首部包含请求行和各种首部字段,响应报文的首部包含响应行和各种首部字段,以GET方法为示例如下图:

《图解http(02)-http基础》

《图解http(02)-http基础》

  • 请求行,包含请求方法,请求URI和http版本;
  • 响应行,返回状态码,原因短语和http版本;
  • 首部字段,表示请求和响应的各种条件和属性的各类首部,四种首部,通用首部、请求首部、响应首部、实体首部。

5. http如何提高传输速率

报文主体(称报文)和实体主体(称实体)

报文,是http通信中的基本单位,由字节流组成,通过http进行通信传输。
实体,作为请求或响应的有效载荷数据被传输,其内容由实体首部和实体主体组成。
http报文用于传输请求或响应的实体主体,通常报文主体等于实体主体,只有当传输中进行编码操作时,实体主体的内容才发生变化,导致它和报文主体的产生差异。

为了提高http传输的效率,我们有这些方法。

5.1 内容编码
就像我们发送邮件对附件进行zip压缩一样,内容编码指明应用在实体内容上的编码格式,常见的编码格式有:gzip、compress、deflate、identity。

5.2 分块传输编码
将实体主体分成多个部分,每一块都用16进制来标记块的大小,实体主体的最后一块会使用0来标记。

6. http收发数据特性

获取数据

http协议采纳了多部分对象集合来发送数据,发送的一份报文主体内可含有多类型实体。

  • multipart/form-data,在web表单文件上传时使用。
  • multipart/byteranges,状态码206,响应报文包含了多个范围的内容时使用。

发送数据
请求一个资源时,我们可以做到续传,比如其大小为100byte,我们可以一次请求10byte,成功一次就计数count++从1开始。
第1次请求1-10byte,响应返回206,count记为1;
第2次请求11-20byte,响应返回206,count记为2;

第10次请求91-100byte,响应206,count记为10,我们可以根据count为10得知已数据已接收完,如果第n次请求失败了,我们只需要根据技术count的值来判断重新获取第n次请求的值即可而不必重新获取所有的值。根据此特性我们可以实现大文件上传或下载的断点续传功能。

7. http状态码

《图解http(02)-http基础》

2XX·成功

  • 200,客户端请求在服务器端被正常处理了;
  • 204,请求处理成功了,但没有资源可返回;
  • 206,对资源的一部分进行请求成功返回;

4XX·客户端错误

  • 400,请求报文中存在语法错误;
  • 401,用户认证失败;
  • 403,不允许访问资源;
  • 404,找不到资源。

5XX·服务器错误

  • 500,服务器内部处理异常;
  • 503,服务器暂时处于超负荷或者正在进行停机维护,无法处理请求。

8. 与http协作的Web服务器

代理

代理就是接收到客户端请求后转发给其他服务器,不改变URI。每次通过代理服务器转发的请求或响应时,会追加写入到Via首部信息。

《图解http(02)-http基础》

使用代理可以设置缓存代理服务器用来减少源服务器网络带宽的流量。

网关

工作机制和代理相似,但是我们可以利用网关将http请求转化为其它协议通信。

《图解http(02)-http基础》

隧道

隧道可以按照要求建立一条与服务器的通信线路,其目的是确保客户端与服务器进行安全通信。隧道不会去解析http请求,在通信双方断开连接后隧道结束。通过隧道的传输,可以和远距离的服务器安全通信。隧道本身是透明的,客户端不必在意隧道的存在。

《图解http(02)-http基础》

    原文作者:HTTP
    原文地址: https://juejin.im/entry/59c3165951882531b21ef63d
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞