zoukankan      html  css  js  c++  java
  • HTTP协议详解

    HTTP 是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统.

    HTTP 协议的主要特点可概括如下:
    1.支持客户/服务器模式。
    2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD
    POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP 协议简单,使得HTTP 服务器的程序规模小,因而通信速度很快。
    3.灵活:HTTP 允许传输任意类型的数据对象。正在传输的类型由Content-Type 加以标记。
    4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的
    应答后,即断开连接。采用这种方式可以节省传输时间。
    5.无状态:HTTP 协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着
    如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

    一、HTTP协议详解之URL

    http(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP 的

    连接方式,HTTP1.1 版本中给出一种持续连接的机制,绝大多数的Web 开发,都是构建在HTTP 协议之

    上的Web 应用。

    HTTP URL (URL 是一种特殊类型的URI,包含了用于查找某个资源的足够的信息)的格式如下:

    http://host[":"port][abs_path]

    http 表示要通过HTTP 协议来定位网络资源;host 表示合法的Internet 主机域名或者IP 地址;

    port 指定一个端口号,为空则使用缺省端口80;abs_path 指定请求资源的URI;如果URL 中没有给

    出abs_path,那么当它作为请求URI 时,必须以“/”的形式给出,通常这个工作浏览器自动帮我们完成。

    eg:

    1、输入:www.guet.edu.cn

    浏览器自动转换成:http://www.guet.edu.cn/

    2、http:192.168.0.116:8080/index.jsp

     

    二、HTTP协议详解之请求篇

    http 请求由三部分组成,分别是:请求行、消息报头、请求正文

    1、请求行以一个方法符号开头,以空格分开,后面跟着请求的URI 和协议的版本,格式如下:Method

    Request-URI HTTP-Version CRLF

    其中Method 表示请求方法;Request-URI 是一个统一资源标识符;HTTP-Version 表示请求的

    HTTP 协议版本;CRLF 表示回车和换行(除了作为结尾的CRLF 外,不允许出现单独的CR 或LF 字符)。

    请求方法(所有方法全为大写)有多种,各个方法的解释如下:

    GET 请求获取Request-URI 所标识的资源

    POST 在Request-URI 所标识的资源后附加新的数据

    HEAD 请求获取由Request-URI 所标识的资源的响应消息报头

    PUT 请求服务器存储一个资源,并用Request-URI 作为其标识

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

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

    CONNECT 保留将来使用

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

    应用举例:

    GET 方法:在浏览器的地址栏中输入网址的方式访问网页时,浏览器采用GET 方法向服务器获取资源,

    eg:GET /form.html HTTP/1.1 (CRLF)

    POST 方法要求被请求服务器接受附在请求后面的数据,常用于提交表单。

    eg:POST /reg.jsp HTTP/ (CRLF)

    Accept:image/gif,image/x-xbit,... (CRLF)

    ...

    HOST:www.guet.edu.cn (CRLF)

    Content-Length:22 (CRLF)

    Connection:Keep-Alive (CRLF)

    Cache-Control:no-cache (CRLF)

    (CRLF) //该CRLF 表示消息报头已经结束,在此之前为消息报头

    user=jeffrey&pwd=1234 //此行以下为提交的数据

    HEAD 方法与GET 方法几乎是一样的,对于HEAD 请求的回应部分来说,它的HTTP 头部中包含的信

    息与通过GET 请求所得到的信息是相同的。利用这个方法,不必传输整个资源内容,就可以得到

    Request-URI 所标识的资源的信息。该方法常用于测试超链接的有效性,是否可以访问,以及最近是否

    更新。

    2、请求报头后述

    3、请求正文(略)

     

    三、HTTP协议详解之响应篇

    在接收和解释请求消息后,服务器返回一个HTTP 响应消息。

    HTTP 响应也是由三个部分组成,分别是:状态行、消息报头、响应正文

    状态行以H T T P版本号开始,后面跟着3位数字表示
    响应代码,最后是易读的响应短语。图1 3 - 4列出了3位数字的响应代码的含义。根据第一位可以把响应分成5类。

    四、HTTP协议详解之首部字段

    H T T P / 1 . 0的请求和响应报文的首部均可包含可变数量的字段。用一个空行将所有首部字

    段与报文主体分隔开来。一个首部字段由字段名(如图1 3 - 3所示)和随后的冒号、一个空格和字

    段值组成,字段名不区分大小写。

    报文头可分为三类:一类应用于请求,一类应用于响应,还有一类描述主体。有一些报

    文头(例如:D a t e)既可用于请求又可用于响应。描述主体的报文头可以出现在P O S T请求和所

    有响应报文中。图1 3 - 3列出了1 7种不同的报文头,在[Berners-Lee, Fielding, and Nielsen 1995]

    中均有详细的描述。未知的报文头字段将被接收者忽略。我们讨论完响应代码后将回过头来

    看几个通用的报文头例子。

    五、利用telnet观察http协议的通讯过程

    下面是我们获取A d d i s o n - We s l e y主页的例子。

    root@A-bus:~ # telnet
    telnet> toggle options
    Will show option processing.
    telnet> open 192.168.6.191
    Trying 192.168.6.191...
    telnet: connect to address 192.168.6.191: Connection refused
    telnet: Unable to connect to remote host
    telnet> open www.sohu.com
    Trying 119.188.36.11...
    telnet: connect to address 119.188.36.11: Operation timed out
    telnet: Unable to connect to remote host
    telnet> open www.aw.com 80
    Trying 165.193.123.218...
    Connected to aw.com.
    Escape character is '^]'.
    GET /
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    
    <html>
    <head>
            <title>AW-BC</title>
            <meta http-equiv="refresh" content="0.5; url=http://home.pearsonhighered.com">
    </head>
    
    <body>
    
    </body>
    </html>
    
    Connection closed by foreign host.

    我们只输入了G E T /,从该We b服务器的根目

    录下取得了它的主页。Te l n e t的客户进程输出的最后一行信息表示服务器进程在输出最后一行

    后关闭了T C P连接。

     

    六、HTTP协议相关技术补充

    1、基础

    高层协议有:文件传输协议FTP、电子邮件传输协议SMTP、域名系统服务DNS、网络新闻传输协议

    NNTP 和HTTP 协议等

    中介由三种:代理(Proxy)、网关(Gateway)和通道(Tunnel),一个代理根据URI 的绝对格式来

    接受请求,重写全部或部分消息,通过URI 的标识把已格式化过的请求发送到服务器。网关是一个接收

    代理,作为一些其它服务器的上层,并且如果必须的话,可以把请求翻译给下层的服务器协议。一个通

    道作为不改变消息的两个连接之间的中继点。当通讯需要通过一个中介(例如:防火墙等)或者是中介不能

    识别消息的内容时,通道经常被使用。

    代理(Proxy):一个中间程序,它可以充当一个服务器,也可以充当一个客户机,为其它客户机建立

    请求。请求是通过可能的翻译在内部或经过传递到其它的服务器中。一个代理在发送请求信息之前,必

    须解释并且如果可能重写它。代理经常作为通过防火墙的客户机端的门户,代理还可以作为一个帮助应用

    来通过协议处理没有被用户代理完成的请求。

    网关(Gateway):一个作为其它服务器中间媒介的服务器。与代理不同的是,网关接受请求就好象

    对被请求的资源来说它就是源服务器;发出请求的客户机并没有意识到它在同网关打交道。

    网关经常作为通过防火墙的服务器端的门户,网关还可以作为一个协议翻译器以便存取那些存储在非

    HTTP 系统中的资源。

    通道(Tunnel):是作为两个连接中继的中介程序。一旦激活,通道便被认为不属于HTTP 通讯,尽

    管通道可能是被一个HTTP 请求初始化的。当被中继的连接两端关闭时,通道便消失。当一个门户(Portal)

    必须存在或中介(Intermediary)不能解释中继的通讯时通道被经常使用。

    2、协议分析的优势—HTTP分析器检测网络攻击

    以模块化的方式对高层协议进行分析处理,将是未来入侵检测的方向。

    HTTP 及其代理的常用端口80、3128 和8080 在network 部分用port 标签进行了规定

    3HTTP协议 Content Lenth限制漏洞导致拒绝服务攻击

    使用POST 方法时, 可以设置ContentLenth 来定义需要传送的数据长度, 例如

    ContentLenth:999999999,在传送完成前,内存不会释放,攻击者可以利用这个缺陷,连续向WEB

    服务器发送垃圾数据直至WEB 服务器内存耗尽。这种攻击方法基本不会留下痕迹。

    http://www.cnpaf.net/Class/HTTP/0532918532667330.html

    4、利用 HTTP协议的特性进行拒绝服务攻击的一些构思

    服务器端忙于处理攻击者伪造的TCP 连接请求而无暇理睬客户的正常请求(毕竟客户端的正常请求比

    率非常之小),此时从正常客户的角度看来,服务器失去响应,这种情况我们称作:服务器端受到了

    SYNFlood 攻击(SYN 洪水攻击)。

    而Smurf、TearDrop 等是利用ICMP 报文来Flood 和IP 碎片攻击的。本文用“正常连接”的方法

    来产生拒绝服务攻击。

    19 端口在早期已经有人用来做Chargen 攻击了,即Chargen_Denial_of_Service,但是!他

    们用的方法是在两台Chargen 服务器之间产生UDP 连接,让服务器处理过多信息而DOWN 掉,那么,干

    掉一台WEB 服务器的条件就必须有2 个:1.有Chargen 服务2.有HTTP 服务

    方法:攻击者伪造源IP 给N 台Chargen 发送连接请求(Connect),Chargen 接收到连接后就会

    返回每秒72 字节的字符流(实际上根据网络实际情况,这个速度更快)给服务器。

    5Http指纹识别技术

    Http 指纹识别的原理大致上也是相同的:记录不同服务器对Http 协议执行中的微小差别进行识

    别.Http 指纹识别比TCP/IP 堆栈指纹识别复杂许多,理由是定制Http 服务器的配置文件、增加插件或

    组件使得更改Http 的响应信息变的很容易,这样使得识别变的困难;然而定制TCP/IP 堆栈的行为需要

    对核心层进行修改,所以就容易识别.

    要让服务器返回不同的Banner 信息的设置是很简单的,象Apache 这样的开放源代码的Http 服务

    器,用户可以在源代码里修改Banner 信息,然后重起Http 服务就生效了;对于没有公开源代码的Http

    服务器比如微软的IIS 或者是Netscape,可以在存放Banner 信息的Dll 文件中修改,相关的文章有

    讨论的,这里不再赘述,当然这样的修改的效果还是不错的.另外一种模糊Banner 信息的方法是使用插

    件。

    常用测试请求:

    1:HEAD/Http/1.0 发送基本的Http 请求

    2:DELETE/Http/1.0 发送那些不被允许的请求,比如Delete 请求

    3:GET/Http/3.0 发送一个非法版本的Http 协议请求

    4:GET/JUNK/1.0 发送一个不正确规格的Http 协议请求

    Http 指纹识别工具Httprint,它通过运用统计学原理,组合模糊的逻辑学技术,能很有效的确定

    Http 服务器的类型.它可以被用来收集和分析不同Http 服务器产生的签名。

    6、其他

    为了提高用户使用浏览器时的性能,现代浏览器还支持并发的访问方式,浏览一个网页时同时建立多

    个连接,以迅速获得一个网页上的多个图标,这样能更快速完成整个网页的传输。

    HTTP1.1 中提供了这种持续连接的方式,而下一代HTTP 协议:HTTP-NG 更增加了有关会话控制、

    丰富的内容协商等方式的支持,来提供

    更高效率的连接。

    本文来自CSDN 博客,转载请标明出处:

    http://blog.csdn.net/gueter/archive/2007/03/08/1524447.asp

     

  • 相关阅读:
    Android:Service的非绑定式的创建和生命周期
    [NHibernate]缓存(NHibernate.Caches)
    [NHibernate]Parent/Child
    [NHibernate]关联映射
    [NHibernate]集合类(Collections)映射
    [NHibernate]O/R Mapping基础
    [NHibernate]持久化类(Persistent Classes)
    [js]uploadify结合jqueryUI弹出框上传,js中的冒出的bug,又被ie坑了
    [NHibernate]ISessionFactory配置
    [Nhibernate]体系结构
  • 原文地址:https://www.cnblogs.com/saryli/p/5353812.html
Copyright © 2011-2022 走看看