您的位置:首页 > 理论基础 > 计算机网络

谈谈我对HTTP协议的理解

2017-03-07 21:04 330 查看

一.HTTP协议版本

        HTTP1.0与HTTP1.1的区别主要体现在以下几个方面:

             1. HTTP1.0是短连接、HTTP1.1是长连接。

             2. 增加请求头和响应头。(什么是请求头和响应头?等下我会上图说明)

             3. 客户端不同请求之间是异步的。(个人理解,这里的异步并不是指客户端可以同时处理多个请求,而是当一个请求执行过程中遇等待情况时,可以切到另外一个请求上执 行)

        HTTP2.0相较于HTTP1.x主要在以下几个方面有所提升:

             1. HTTP2.0支持多路复用。

             2. HTTP2.0会根据请求优先级进行传输。(例如在浏览商品的时候突然滑到最下方,那么最下面的商品信息无疑是用户最想看到的,所以这时对最下面商品信息的请求属于优先级高的请求)

             3. HTTP2.0支持header压缩。

             4. HTTP2.0支持server推送。(http1.x只能由客户端发起请求,然后服务器被动的发送response。开启server push之后,server通过X-Associated-Content header告知客户端会有新的内容推送过来。在用户第一次打开网站首页的时候,server将资源主动推送过来可以极大的提升用户体验。)

             5. HTTP2.0支持server暗示。(与server推送不同,server暗示仅仅告知客户端服务器上有这些资源,或是有新内容产生,具体的下载还是要靠客户端发起请求完成,但由于省去了查询server状态这一过程,所以省去了一道询问)

二. HTTP通讯流程

        在HTTP1.0中,通讯流程可以概括为以下几步:

             1. 客户端与服务器建立TCP连接,一般使用80端口。

             2. 客户端向服务器发送请求。

             3. 服务器向客户端发送响应。

             4. TCP连接断开。

             5. 重复上述步骤。

       而在HTTP1.1中,通讯流程可以概括为以下几步:

             1. 客户端与服务器建立TCP连接,一般使用80端口。

             2. 客户端向服务器发送请求。

             3. 服务器向客户端发送响应。

             4. 重复上述步骤。
             5. 通讯完毕,TCP连接断开。

三. HTTP协议——请求与应答

        两张图说明问题。

        请求:



        响应:



再直白点:

        请求:

<request line>
<headers>
<blank line>
<body>


        响应(和请求一样,就是第一行变了):

<request line>
<headers>
<blank line>
<body>


       其中请求方法有8种,分别为:

            GET:请求获取由 Request-URI
所标识的资源。

            POST:在 Request-URI 所标识的资源后附加新的数据。

            HEAD:请求获取由 Request-URI
所标识的资源的响应消息报头。

            OPTIONS:请求查询服务器的性能,或查询与资源相关的选项和需求。

            PUT:请求服务器存储一个资源,并用 Request-URI作为其标识。

            DELETE:请求服务器删除由 Request-URI所标识的资源。

            TRACE:请求服务器回送收到的请求信息,主要用语测试或诊断。

       常见的响应状态码有以下几种,在各种下面分别列几个常见的状态码:         

           1开头(消息)

           2开头(成功)

               200(OK):请求成功

               202(Accepted):已接受请求,尚未处理

               204(No Content):请求成功,且不需返回内容

           3开头(重定向)

               301(Moved Permanently):被请求的资源已永久移动到新位置

               301(Moved Temporarily):被请求的资源已临时移动到新位置

           4开头(请求错误)

               400(Bad Request):请求的语义或是参数有错

               403(Forbidden):服务器拒绝了请求

              404(Not Found):未找到请求的资源

           5开头(服务器错误)

              500(Internal Server Error):服务器遇到错误,无法完成请求

              502(Bad
Getway):网关错误,一般是服务器压力过大导致连接超时         

              503(Service Unavailable):服务器宕机

四. POST和GET究竟有什么区别?

       1. POST将请求数据放在请求的body里,而GET则是将他放在请求行里。

       2. GET请求的数据会体现在URL上,而POST不会。

       3. 由于请求行的长度是有上限的,所以GET提交数据时会有长度上限,而POST不会。

五. 要想深入理解、还是需要截数据包观察

       这里就不带着大家截包了,这个链接里有截好的数据包,推荐一看:http://www.he11oworld.com/front-end/2786.html

        怎么截包?可以用Firebug,比如上面那个POST与GET的问题,就可以看到,POST的内容是在“post”一栏,而GET则是在“参数”

参考文章

1. http://www.jianshu.com/p/a27f91c51a8b
2. http://blog.csdn.net/witsmakemen/article/details/8994963
3. http://www.he11oworld.com/front-end/2786.html
4. http://www.tuicool.com/articles/jMFfIv
5.https://www.zhihu.com/question/34074946
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: