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

HTTP协议简介

2015-08-02 09:48 507 查看

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 请求报文格式
        请求方法有如下几种:
        GET:请求获取Request-URI所标识的资源

        POST:在Request-URI所表示的资源的消息报头附加新的数据

        HEAD:请求获取由 Request-URI所标识的资源的响应消息报头(常用于测试超链接的有效性,是否可用)

        PUT: 请求服务器存储一个资源

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

        TRACE:请求回送收到的请求消息

        CONNECT: 保留

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

        请求的URL为主机名(域名)后的请求资源的URI,如http://host[:port][/abs_path],其中port缺省为80,abs_path为请求的URL,当只请求主域名的话,URL为/

    响应报文

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


图 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.htmlHTTP的长连接和短连接http://www.cnblogs.com/cswuyg/p/3653263.html  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  http协议 网络