HTTP协议简介

HTTP是一个基于请求和响应模式的无状态,应用层的协议,常基于TCP的连接方式,广泛应用于B/S(浏览器/服务器)模式。

http工作流程

1、  首先客户端和服务器建立tcp连接。  

2、  客户端发送请求报文,请求相关URL

3、  服务器接收到请求之后,返回应答,即响应报文

4、  客户端将内容显示在浏览器上,然后断开连接

http报文特点

1、  支持客户/服务器模式   C/S

2、  简单快速:客户像服务器请求服务时,只需要传送请求方法和路径(常用的有GET HEAD POST方式)

3、  灵活:HTTP允许传输任意类型的数据对象,其类型由content-Type加以标志

4、  链接:限制每次连接只处理一个请求,处理完就断开链接。由于HTTP基于TCP协议,因此当客户端连续请求时,这种处理方式导致时间开销较大(需多次建立TCP连接),这种情形下采用长连接会比较有效。

5、  无状态:是指协议对于事务处理没有记忆能力,如果客户端请求同样的资源,需重传需要的数据。

补充:

a)      关于长连接和短连接:

         客户端的长连接不可能无限期持续着,这样会造成服务器的并发量太大,因此需要有一个超时时间timeout(keep-alive表示持续连接),如


    另外还可能指定max =xxx,指示这个长连接最多接收XXX此请求就断开。如果没有指定超时时间,服务端也可以执行四次挥手断开链接。总之,服务端为了控制并发量,需要有相应的解决措施。

b)      关于服务端如何判断传输结束:

    判断传输的数据量是否达到Content-Length大小;没有Content-Length字段的采用chunked编码来判断,在传输的最后会有一个空的chunked块。

    另外,为了控制客户端并发量,有的服务器只支持一个客户端只能有一个连接。常见的情形就是不支持多线程下载。                 

c) 流水线技术

指在一个TCP连接内,多个HTTP请求可以并行(像流水线一样),即在下一个HTTP请求的应答完成之前就发起;现在还有很多技术瓶颈待解决,因此应用的还不广泛。如果使用流水线技术,那么客户端多连接并不能提高效率(都是带宽充分利用),除非需要抢占资源。

 

这里顺便提一下抓包软件wireshark,该软件可以抓取通过网卡的数据包。对于http协议而言,当http报文太大,到传输层就要进行TCP分片传输,然后到目的端再进行组装。在早些时候的wireshark软件中,分析出来的就是tcp包,而不是http报文(过滤选项过滤不出http),在1.12版本中已经可以过滤出来了,对分析而言方便了不少。

 

HTTP报文格式

    HTTP报文分为请求报文和响应报文两种,其报文格式分别如下:

         请求报文包含请求行、首部行、空行及主体,格式如下:


图 1 请求报文格式

 

         响应报文包含状态行、首部行、空行及主体


图 2 响应报文格式

         状态码是一个三位整数,其中第一位定义的响应的类型:

         1xx:信息响应类,表示接收到请求并且继续处理 

         2xx:处理成功响应类,表示动作被成功接收、理解和接受 

         3xx:重定向响应类,为了完成指定的动作,必须接受进一步处理 

         4xx:客户端错误,客户请求包含语法错误或者是不能正确执行 

         5xx:服务端错误,服务器不能正确执行一个正确的请求 

    讲了那么多,现在实际分析一下:

         wireshark抓取请求www.baidu.com的http报文,其请求报文和响应报文如下:


图 3 请求报文


图 4 响应报文

    从请求报文中可以看出请求报文没有主体部分(图中没标出,可以自己实践一下)响应码可以看出资源重定向了。当成功获取请求,响应码为200 ok

 

参考链接:

HTTP协议详解http://www.cnblogs.com/li0803/archive/2008/11/03/1324746.html

HTTP的长连接和短连接http://www.cnblogs.com/cswuyg/p/3653263.html  

posted on 2015-08-02 09:48  chhy2009  阅读(206)  评论(0编辑  收藏  举报

导航