zoukankan      html  css  js  c++  java
  • 结合Wireshark捕获分组深入理解TCP/IP协议栈之HTTP协议

    摘要:

        本文简单介绍了Web应用层协议理论知识,详细讲述了HTTP请求报文和响应报文各个字段含义,并从Wireshark俘获分组中选取HTTP相关报文进行分析。

    一、概述

        Web的应用层协议是超文本传输协议HTTP,HTTP协议由两部分程序实现:客户机程序、服务器程序,协议定义了这些报文的格式以及客户机和服务器如何进行报文交换的。Web服务器用于存储Web对象,每个对象由URL寻址,Web客户机通常指浏览器。浏览器向服务器发出对Web页中所包含对象的HTTP请求报文,服务器接受请求并用包含这些对象的HTTP响应报文进行响应。Web页是由对象组成,对象简单来说就是文件(如图形文件、Java小程序、声音剪辑文件),这些文件通过一个URL地址寻址。Web页通常含有一个基本的HTML文件和几个引用对象。

        HTTP报文有两种:请求报文、响应报文。

    二、HTTP请求报文

    2.1 请求报文

    整个报文段内容是普通ASCII文本,各个字段靠空格或者回车换行符隔开,如下图:

    图1 HTTP请求报文格式

    方法

    表1 HTTP请求报文方法[1]

    方法

    说明

    GET

    请求获取URL所标识的资源

    POST

    在URL所标识的资源后附加新的数据

    HEAD

    请求获取由URL所标识的资源的响应消息报头,常用于故障跟踪

    PUT

    请求服务器存储一个资源,并用URL作为其标识

    DELETE

    请求服务器删除URL所标识的资源

    TRACE

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

    CONNECT

    保留将来使用

    OPTIONS

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

        使用GET方法时实体主体为空。客户机有时候需要提交表单(如搜索关键词),有两种方法可以做到这一点:其一,使用POST方法,实体主体包含表单字段的值;其二,用GET方法,此时表单的字段与原URL形成新的URL。

        注:HTTP/1.0规约仅有三种方法:GET、POST、HEAD。

    URL

        对象由统一资料定位器URL标识,URL由3部分组成(如http://www.baidu.com/index.html):协议(http)、存放对象服务器主机名(www.baidu.com)、对象的路径名(/index.html)。

    版本

        目前有HTTP/1.0、HTTP/1.1,后者兼容前者。HTTP/1.0仅支持非持续连接,即每个TCP连接在服务器返回对象后关闭,HTTP/1.1支持持续连接,即服务器在发送响应后保持该TCP连接。早期,Web页面通常只包含HTML文件,用非持续连接就够了。如今,一个Web页面包含许多对象,用非持续连接开销太大了(TCP建立的三次握手),因此持续连接更合适。

    首部行

        给服务器发送首部行旨在服务器为不同类型的客户机发送相同对象的不同版本,常用的首部行见表2。

    表2 HTTP请求报文常用首部行

    字段名

    User-Agent

    关于浏览器和它的平台信息

    Accept

    客户机能处理的页面类型

    Accept-Charset

    客户机可以接受的字符集

    Aceept-Encoding

    客户机能处理的页面编码方法

    Accept-Language

    客户机能处理的自然语言

    Host

    服务器的DNS名字

    Authorization

    证明客户端有权查看某个资源

    Cookie

    将一个以前设置的cookie送回给服务器

    实体数据

        实体数据是报文的主体,即所请求的对象本身。

    2.2 实例分析

    图2 HTTP请求报文实例

    三、HTTP响应报文

    3.1 报文格式

    图3 HTTP响应报文格式

    版本

        服务器使用的协议版本。

    状态编码、短语

        状态编码码由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值[1]:

    表3 HTTP响应报文响应类别及值

    类别

    1xx

    指示信息--表示请求已接收,继续处理

    2xx

    成功--表示请求已被成功接收、理解、接受

    3xx

    重定向--要完成请求必须进行更进一步的操作

    4xx

    客户端错误--请求有语法错误或请求无法实现

    5xx

    服务器端错误--服务器未能实现合法的请求

    常见状态代码、状态描述、说明:

    表4 HTTP响应报文常用代码

    编码

    短语

    说明

    200

    OK

    客户端请求成功

    400

    Bad Request

    客户端请求有语法错误,不能被服务器所理解

    401

    Unauthorized

    请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用

    403

    Forbidden

    服务器收到请求,但是拒绝提供服务

    404

    Not Found

    请求资源不存在

    500

    Internal Server Error

    服务器发生不可预期的错误

    503

    Server Unavailable

    服务器当前不能处理客户端的请求,一段时间后,可能恢复正常

    首部行

        常用的HTTP响应报文首部行见下表:

    表5 响应报文常用首部行字段

    字段名

    Date

    消息被发送时的日期和时间

    Server

    关于服务器信息

    Content-Encoding

    内容是如何被编码的(如gzip)

    Content-Length

    以字节计算的页面长度

    Content-Type

    页面的MIME类型

    Last-Modified

    页面最后被修改的时间和日期

    Location

    指标客户将请求发送到别处的命令

    Accept-Ranges

    服务器将接受指定请求的字节范围

    Set-Cookie

    服务器希望客户保存一份cookie

    实体数据

        实体数据是报文的主体,即所请求的对象本身。

    3.2 报文实例

    图2 HTTP响应报文实例

    至此,服务器返回用户所请求的文件:-)

     

    参考资料:

    [1] 博文《HTTP协议详解

    [2] Andrew S.Tanenbaum.计算机网络[M].

    [3] 《计算机网络--自顶向下方法与Internet特色》[M].

     HTTP请求报文格式.rar   

    from:http://blog.chinaunix.net/uid-9112803-id-3212057.html

  • 相关阅读:
    接口自动化(三)--读取json文件中的数据
    接口自动化(二)--操作Excel获取需要数据
    接口自动化(一)--概述
    pycharm(2016.3.2版本)导入工程文件执行程序时弹出Edit configuration
    使用Fiddler实现网络限速
    fiddler工具条、状态栏、请求信息栏各按钮的作用
    修改elementUI源码新增组件/修改组件
    DRF框架的基本组件
    django之原生SQL操作封装
    jqtree使用说明
  • 原文地址:https://www.cnblogs.com/lidabo/p/5713583.html
Copyright © 2011-2022 走看看