基础概念篇

1.1 介绍

HTTP的发展是万维网协会(World Wide Web Consortium)和Internet工作小组(Internet Engineering Task Force)合作的结果,(他们)最终发布了一系列的RFC,其中最著名的就是RFC 2616RFC 2616定义了HTTP协议的我们今天普遍使用的一个版本——HTTP 1.1

HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。

1.2 工作流程

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

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

2)建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。

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

4)客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。

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

1.3 使用WiresharkTCPhttp

打开Wireshark,选择工具栏上的“Capture->Options”,界面选择如图1所示:
                            

1 设置Capture选项

一般读者只需要选择最上边的下拉框,选择合适的Device,而后点击“Capture Filter”,此处选择的是“HTTP TCP port80)”,选择后点击上图的“Start”开始抓包。
                                 

2 选择Capture Filter

例如在浏览器中打开http://image.baidu.com/,抓包如图3所示:
    http://image5.360doc.com/DownloadImg/2009/12/1/11192_10133313_3.jpg

3   抓包

在上图中,可清晰的看到客户端浏览器(ip192.168.2.33)与服务器的交互过程:

1No1:浏览器(192.168.2.33)向服务器(220.181.50.118)发出连接请求。此为TCP三次握手第一步,此时从图中可以看出,为SYNseq:X x=0

2No2:服务器(220.181.50.118)回应了浏览器(192.168.2.33)的请求,并要求确认,此时为:SYNACK,此时seqyy0),ACKx+1(为1)。此为三次握手的第二步;

3No3:浏览器(192.168.2.33)回应了服务器(220.181.50.118)的确认,连接成功。为:ACK,此时seqx+1(为1),ACKy+1(为1)。此为三次握手的第三步;

4No4:浏览器(192.168.2.33)发出一个页面HTTP请求;

5No5:服务器(220.181.50.118)确认;

6No6:服务器(220.181.50.118)发送数据;

7No7:客户端浏览器(192.168.2.33)确认;

8No14:客户端(192.168.2.33)发出一个图片HTTP请求;

9No15:服务器(220.181.50.118)发送状态响应码200 OK

……

1.4 头域

每个头域由一个域名,冒号(:)和域值三部分组成。域名是大小写无关的,域值前可以添加任何数量的空格符,头域可以被扩展为多行,在每行开始处,使用至少一个空格或制表符。

在抓包的图中,No14点开可看到如图4所示:
   http://image5.360doc.com/DownloadImg/2009/12/1/11192_10133313_4.jpg

4 http请求消息

       回应的消息如图5所示:
              

5 http状态响应信息

1.3.1 host头域

Host头域指定请求资源的Intenet主机和端口号,必须表示请求url的原始服务器或网关的位置。HTTP/1.1请求必须包含主机头域,否则系统会以400状态码返回。

5host那行为:
   

1.3.2 Referer头域

Referer头域允许客户端指定请求uri的源资源地址,这可以允许服务器生成回退链表,可用来登陆、优化cache等。他也允许废除的或错误的连接由于维护的目的被追踪。如果请求的uri没有自己的uri地址,Referer不能被发送。如果指定的是部分uri地址,则此地址应该是一个相对地址。

在图4中,Referer行的内容为:
   

1.3.3 User-Agent头域

User-Agent头域的内容包含发出请求的用户信息。

在图4中,User-Agent行的内容为:
   http://www.blogjava.net/images/blogjava_net/amigoxie/40799/o_http%e5%8d%8f%e8%ae%ae%e5%ad%a6%e4%b9%a0-%e6%a6%82%e5%bf%b5-8.jpg

1.3.4 Cache-Control头域

Cache-Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置Cache-Control并不会修改另一个消息处理过程中的缓存处理过程。请求时的缓存指令包括no-cacheno-storemax-agemax-stalemin-freshonly-if-cached,响应消息中的指令包括publicprivateno-cacheno-storeno-transformmust-revalidateproxy-revalidatemax-age

在图5中的该头域为:
   

1.3.5 Date头域

Date头域表示消息发送的时间,时间的描述格式由rfc822定义。例如,Date:Mon,31Dec200104:25:57GMTDate描述的时间表示世界标准时,换算成本地时间,需要知道用户所在的时区。

5中,该头域如下图所示:
  

1.4 http的状态响应码

1.4.1 1**:请求收到,继续处理

100——客户必须继续发出请求

101——客户要求服务器根据请求转换HTTP协议版本

1.4.2 2**:操作成功收到,分析、接受

200——交易成功
201——提示知道新文件的URL

202——接受和处理、但处理未完成

203——返回信息不确定或不完整

204——请求收到,但返回信息为空

205——服务器完成了请求,用户代理必须复位当前已经浏览过的文件

206——服务器已经完成了部分用户的GET请求

1.4.3 3**:完成此请求必须进一步处理

300——请求的资源可在多处得到

301——删除请求数据

302——在其他地址发现了请求数据

303——建议客户访问其他URL或访问方式

304——客户端已经执行了GET,但文件未变化

305——请求的资源必须从服务器指定的地址得到

306——前一版本HTTP中使用的代码,现行版本中不再使用

307——申明请求的资源临时性删除

1.4.4 4**:请求包含一个错误语法或不能完成

400——错误请求,如语法错误

401——未授权

HTTP 401.1 – 未授权:登录失败

  HTTP 401.2 – 未授权:服务器配置问题导致登录失败

  HTTP 401.3 – ACL 禁止访问资源

  HTTP 401.4 – 未授权:授权被筛选器拒绝

HTTP 401.5 – 未授权:ISAPI CGI 授权失败

402——保留有效ChargeTo头响应

403——禁止访问

HTTP 403.1 禁止访问:禁止可执行访问

  HTTP 403.2 – 禁止访问:禁止读访问

  HTTP 403.3 – 禁止访问:禁止写访问

  HTTP 403.4 – 禁止访问:要求 SSL

  HTTP 403.5 – 禁止访问:要求 SSL 128

  HTTP 403.6 – 禁止访问:IP 地址被拒绝

  HTTP 403.7 – 禁止访问:要求客户证书

  HTTP 403.8 – 禁止访问:禁止站点访问

  HTTP 403.9 – 禁止访问:连接的用户过多

  HTTP 403.10 – 禁止访问:配置无效

  HTTP 403.11 – 禁止访问:密码更改

  HTTP 403.12 – 禁止访问:映射器拒绝访问

  HTTP 403.13 – 禁止访问:客户证书已被吊销

  HTTP 403.15 – 禁止访问:客户访问许可过多

  HTTP 403.16 – 禁止访问:客户证书不可信或者无效

HTTP 403.17 – 禁止访问:客户证书已经到期或者尚未生效

404——没有发现文件、查询或URl

405——用户在Request-Line字段定义的方法不允许

406——根据用户发送的Accept拖,请求资源不可访问

407——类似401,用户必须首先在代理服务器上得到授权

408——客户端没有在用户指定的饿时间内完成请求

409——对当前资源状态,请求不能完成

410——服务器上不再有此资源且无进一步的参考地址

411——服务器拒绝用户定义的Content-Length属性请求

412——一个或多个请求头字段在当前请求中错误

413——请求的资源大于服务器允许的大小

414——请求的资源URL长于服务器允许的长度

415——请求资源不支持请求项目格式

416——请求中包含Range请求头字段,在当前请求资源范围内没有range指示值,请求也不包含If-Range请求头字段

417——服务器不满足请求Expect头字段指定的期望值,如果是代理服务器,可能是下一级服务器不能满足请求长。

1.4.5 5**:服务器执行一个完全有效请求失败

  HTTP 500 – 内部服务器错误

  HTTP 500.100 – 内部服务器错误 – ASP 错误

  HTTP 500-11 服务器关闭

  HTTP 500-12 应用程序重新启动

  HTTP 500-13 – 服务器太忙

  HTTP 500-14 – 应用程序无效

  HTTP 500-15 – 不允许请求 global.asa

  Error 501 – 未实现

HTTP 502 – 网关错误

    附录:参考资料

http_百度百科》:http://baike.baidu.com/view/9472.htm

《结果编码和http状态响应码》:http://blog.tieniu1980.cn/archives/377

《分析TCP的三次握手》:

http://cache.baidu.com/c?m=9f65cb4a8c8507ed4fece763104c8c711923d030678197027fa3c215cc7905141130a8e5747e0d548d98297a5ae91e03f7f63772315477e3cacdd94cdbbdc42225d82c36734f844315c419d891007a9f34d507a9f916a2e1b065d2f48193864353bb15543897f1fb4d711edd1b86033093b1e94e022e67adec40728e2e605f983431c5508fe4&p=c6769a46c5820efd08e2973b42&user=baidu

《使用Wireshark来检测一次HTTP连接过程》:

http://blog.163.com/wangbo_tester/blog/static/12806792120098174162288/

版权声明:本文为diyunpeng原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/diyunpeng/archive/2012/01/10/2318611.html