HTTP协议1.1版本个人学习总结

1.  HTTP简介

HTTP协议,即超文本传输协议(Hyper TextTransfer Protocol)的英文缩写,它的发展是万维网协会和Internet工作小组IETF合作的结果,他们最终发布了一系列的RFC,RFC1945定义了HTTP/1.0版本;其中最著名的就是RFC2616。RFC2616定义了今天普遍使用的一个版本——HTTP1.1版本。

简单来讲,HTTP协议就是负责web服务器与web浏览器之间通信的协议。HTTP可以从web客户端(即浏览器)向web服务器发送请求,并从web服务器向web客户端返回内容(一般此内容就是网页)。HTTP可以使浏览器更加高效,使网络传输减少,不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。

2.  HTTP工作原理

HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。所谓无状态,即是指web服务器只有在浏览器发送请求时才给予响应,浏览器的每次请求都是一次独立的存在,此次请求和之前的请求没有对应的关系,并且请求永远是由浏览器发送给web服务器,web服务器不会在没有请求的情况下响应浏览器。HTTP协议对于事务处理没有记忆能力,可以说如果后续处理需要前面的信息,则它必须重传,这样可能导致每次传送的数据量增大。但从另一方面说,web服务器发送响应不需要前面的信息时就会相当快速。

HTTP协议通常承载于TCP协议之上,有时也承载于TLS协议(安全传输层协议,用于提供通信保密性和数据完整性)或SSL协议(安全套接字层协议,用于安全数据传输加密数据)层之上,这个时候,就成了我们常说的HTTPS。默认HTTP的端口号是80,HTTPS的端口号是443。

3.  HTTP工作流程

一次HTTP操作称为一个事务,其工作过程可分为4步:

1)             首先浏览器与web服务器需要建立连接。只要单击某个超级链接,HTTP的工作就开始。

2)             建立连接后,浏览器发送一个请求给web服务器,请求方式的格式为:统一资源标识符(URI,我们最常用到的其实是统一资源定位符,即URL)、协议版本号,后边是MIME信息包括请求修饰符、浏览器信息和可能的内容。

3)              web服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括web服务器信息、实体信息和可能的内容。

4)              浏览器接收到web服务器所返回的信息后则显示在用户的显示屏上,然后浏览器和web服务器断开连接。

 

如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到浏览器并输出。对于用户来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了。

4.  HTTP请求和响应

一般HTTP请求由请求行、消息报头、请求正文三个部分构成。请求行的格式:请求方法、请求URI、HTTP协议版本号。一般HTTP响应则由状态行、消息报头、响应正文三个部分构成。状态行的格式:HTTP协议版本号、响应状态码、相应的状态描述。

其中消息报头包括普通报头、请求报头、响应报头和实体报头:

1)  普通报头:在普通报头中,有少数报头域应用于所有的请求和响应消息,并不用于被传输的实体,这些报头域只用于传输的消息。

2)  请求报头:请求报头允许浏览器向web服务器传递该请求的附加信息以及浏览器自身的信息。

3)  响应报头:响应报头允许web服务器从传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对请求URI所标识的资源进行下一步访问的信息。

4)  实体报头:请求和响应信息都可以传送一个实体。一个实体由实体报头域和实体正文组成,大多数情况下,实体正文就是请求消息中的请求正文或者响应消息中的响应正文。但是在发送时,并不是说实体报头域和实体正文要在一起发送,例如:有些响应可以只包含实体报头域。

 

常见的请求方法:

1)  get方法:请求获取由请求URI所标识的资源。

2)  post方法:在请求URI所标识的资源后附加新的数据。

3)  head方法:请求获取由请求URI所标识的资源的响应消息报头。

4)  put方法:请求web服务器存储一个资源,并用请求URI作为其标识。

5)  delete方法:请求web服务器删除由请求URI所标识的资源。

6)  trace方法:请求web服务器回送收到的请求信息,主要用于测试或诊断。

 

状态码:状态码第一位数字定义了响应类型,这里分为5种:

1)1xx:Informational,请求接收到了,正在进一步的处理中。

2)2xx:Success,表示用户请求被正确接收,这里典型的例子是:200 OK。

3)3xx:Redirection,表示请求没有成功,客户必须采取进一步的操作。

4)4xx:Client Error,表示客户端提交的请求有错误,这里典型的例子是:404 Not Found。

5)5xx:Server Error,表示服务器不能完成对请求的处理,这里典型的例子是:503 Service Unavailable。

5.  长连接和短连接

另外,从HTTP/1.1起,默认采用长连接(长连接是指在一个连接上可以连续发送多个数据包,在连接保持期间,如果没有数据包发送,需要双方发链路检测包),用以保持连接特性,这和HTTP/1.0默认采用短连接不同。使用长连接的HTTP协议,会在响应报头加入这行代码:

Connection:keep-alive

在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接要客户端和服务器都支持长连接。

长连接的优点:可以省去较多的TCP建立和关闭的操作,减少浪费,节约时间。对于频繁请求资源的客户来说,较适用长连接。不过这里存在一个问题,存活功能的探测周期太长,还有就是它只是探测TCP连接的存活,属于比较“斯文”的做法,遇到恶意的连接时,保活功能就不够使了。在长连接的应用场景下,客户端一般不会主动关闭它们之间的连接,客户端和服务器之间的连接如果一直不关闭的话,会存在一个问题,随着客户端连接越来越多,而每个客户端都要占用一个连接,这样服务器可能会过载而崩坏。

短连接的有点:因为服务器不需要保持连接,故节省了资源和开销。但是若是遇到操作频繁的情况,就会出现频繁地连接创建并销毁,造成浪费。

因此长连接适用于连接客户端数量一定,数据操作频繁的情况;而短连接适用于并发量大,数据操作少的情况。具体应用采用具体应对策略。

你可能感兴趣的:(其他)