zoukankan      html  css  js  c++  java
  • HTTP 规格严格

    基础概念篇

    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/

  • 相关阅读:
    Qt 利用XML文档,写一个程序集合 二
    Qt 利用XML文档,写一个程序集合 一
    Qt QpushButton 实现长按下功能
    Qt 将字符串转成16进制显示
    Qt-QML-Canvas-雷达扫描仪表简单
    Qt-QML-电子罗盘
    Qt-QML-Canvas写个小小的闹钟
    Qt-Qt5最新增加程序图标方式
    Qt-QMl-自定义自己想要的TabView
    设置position:fixed后元素脱离标准流的解决方法
  • 原文地址:https://www.cnblogs.com/diyunpeng/p/2318611.html
Copyright © 2011-2022 走看看