精华内容
下载资源
问答
  • 要理解什么是ONVIF,就必须先知道什么Web Services 。Web Services初学者,往往会被诸如WSDL、SOAP、HTTP、XML等概念搞得晕头转向。往往也会发出这样的疑问:要胜任ONVIF协议网络摄像机(IPC)客户端程序开发

    原文链接点击打开链接


    1. 适合读者


    ONVIF规范中设备管理和控制部分所定义的接口均以Web Services的形式提供。要理解什么是ONVIF,就必须先知道什么是Web Services 。Web Services初学者,往往会被诸如WSDL、SOAP、HTTP、XML等概念搞得晕头转向。往往也会发出这样的疑问:要胜任ONVIF协议网络摄像机(IPC)客户端程序开发,对Web Services的掌握要到什么程度?我现在就消除你的疑惑,你只要知道皮毛就够了,这得益于诸如gSOAP这样现成的工具,避免了我们「自己造轮子」。

    2. 远程调用

    函数接口调用方式分为:

    • 本地调用(Local Procedure Call,简称LPC)。
    • 远程调用(Remote Procedure Call,简称RPC)。


    图2

    • 本地调用:通常,在我们的代码中调用一个函数,这个函数要么是系统API,要么是我们自己实现的本地代码,一起编译,一起发布,也在同一个进程中一起执行,这就是本地调用!

    • 远程调用:被调用方法的具体实现不在同一个进程,而是在别进程,甚至别的电脑上。RPC一个重要思想就是,使远程调用看起来像本地调用一样,调用者无需知道被调用接口具体在哪台机器上执行。

    3. 远程调用原理

    比如 A (client) 调用 B (server) 提供的remoteAdd方法:

    1. 首先A与B之间建立连接(通常是TCP,但还有其他的,如HTTP、管道等);
    2. 然后A把需要调用的方法名(这里是remoteAdd)以及方法参数(10, 20)序列化成字节流发送出去;
    3. B接受A发送过来的字节流,然后反序列化得到方法名,方法参数,接着执行相应的方法调用并把结果30返回;
    4. A接受远程调用结果,输出30。


    图3

    通过上面的简单阐述,远程调用与socket通讯好像啊,都是远程通讯,都是C/S模式。他两者到底有啥区别?

    1. RPC在提供强大的远程调用能力的同时,不损失本地调用的语义简洁性。RPC一个重要思想就是:使远程调用看起来像本地调用一样。

    2. socket是RPC经常采用的通信手段之一,除了Socket,RPC还有其他的通信方法,比如:http、操作系统自带的管道等。

    用HTTP协议实现的远程调用,熟悉的人一下子就想到了Web Service。

    4. Web Services的简单理解


    图4 

    我们可以这样来理解什么是Web Services,它即是一种网络服务。当你的系统完成一个通用的功能以后,如果你想让别人使用你的功能的话,那么你就可以发布成为Web Services服务,别人就可以通过网络远程调用到你的服务接口。Web Services能够让各个系统之间的对接变得:快捷、方便、廉价。

    5. Web Services常用的几种框架


    图7

    实现Web Services的几种方式

    实现Web Services常用的框架有:REST、SOAP、JavaScript、XML-PRC等。这些看不懂,没关系,大家知道一个事情即可:实现Web Services的方式有好几种,

    我们的主角ONVIF标准中的Web Service采用的是SOAP方式,接下来我们来了解下SOAP。

    6. SOAP简介

    6.1. 在TCP/IP四层模型中展示SOAP

    SOAP(Simple Object Access Protoco,简单对象访问协议),是TCP/IP协议体系中的一个应用层协议,它是在HTTP基础之上实现的。


    图8 

    6.2. 如此理解SOAP

    浅谈 SOAP:http://www.ibm.com/developerworks/cn/xml/x-sisoap/

    这篇IBM的文章「浅谈 SOAP」写的很好,值得参考。

    以下这张图是我对SOAP的理解:


    图9 

    SOAP协议 = RPC机制 + HTTP传输协议 + XML数据格式

    SOAP的两个主要设计目标是「简单性」和「可扩展性」,SOAP的设计正是围绕这两点展开的。

    SOAP使用RPC机制,体现了「简单性」。让客户端调用Web Service的接口看起来像本地调用一样,确实很简单。

    SOAP 使用 HTTP 传送 XML,体现了「可扩展性」。尽管HTTP 不是有效率的通讯协议,而且 XML 还需要额外的文件解析(parse),两者使得交易的速度大大低于其它方案。但是XML 是一个开放、健全、有语义的讯息机制,而 HTTP 成熟、稳定、又能避免许多关于防火墙的问题,从而使SOAP得到了广泛的应用。

    6.3. SOAP的局限性

    SOAP也有一些局限性,以下场景就不适合 SOAP:


    图10

    1. 实时数据推送 
      HTTP是短连接的,都是客户端请求,服务端应答,这种模式导致服务端无法实时推送数据给客户端,只有像Socket那样的长连接才能保证实时通讯。

    2. 省流量、高传输效率的应用 
      HTTP有包头,而且XML全部用文本文件来传输数据,效率会比较低,如果你对流量、传输效率要求极高,那么你应该多考虑其它的方式,而不要用 SOAP。

    6.4. SOAP协议看起来长这样


    图11 

    这个一个股票Web Services服务系统,其中GetStockPrice接口适用于查询股票当前价格,图中查询了IBM的股票价格,Web Services返回股票价格为34.5

    6.5. WSDL文档

    对于一个Web Services,我们如何知道它对外提供了多少个接口,以及每个接口是如何调用的,这就涉及到WSDL(Web Services Description Language,网络服务描述语言)。

    注意:只有SOAP方式实现的Web Services才有WSDL文档,其他方式实现的Web Services并没有WSDL文档。

    我们可以这么理解WSDL:WSDL是一个使用XML语言书写的文档,这个文档描述了Web Services对外提供了哪些接口,就像动态库的.h文件一样。每个Web Services都有对应的WSDL文档。


    图12 

    什么是WSDL

    如果将WSDL语言转化成C语言,它看起来应该是这样子:


    图13 

    WSDL语言转化成C语言

    我们可以看看完整的WSDL文档长什么样子的:

    1. 天气预报WEB服务的接口说明(WSDL文档)

    2. 手机号归属地查询WEB服务的接口说明(WSDL文档)

    3. ONVIF标准的WEB服务的接口说明(WSDL文档)

    如果你是第一次接触WSDL文档,前两个的WSDL文档估计你是看不懂(排版乱糟糟),而ONVIF的WSDL文档兴许你还能看懂(ONVIF官网的WSDL之所以这么工整,是因为插入排版的语句)。

    7. 总结

    回顾下本文的重点:

    1. Web Services是一种网络服务,它对外提供了一系列远程调用接口(RPC),你可以像本地调用一样去调用这些远程调用接口。列举了几个免费的WEB服务供大家体验。

    2. Web Services常用的框架有多种,ONVIF标准中的Web Service采用的是SOAP方式。

    3. WSDL文档是采用SOAP方式实现的Web Services的接口描述文档,就像动态库的.h文件一样。同时也展示了WSDL语言转化为C语言的对比效果。

    看完这些,你或许有疑问,Web Services包含了SOAP、HTTP、XML,RPC、WSDL,辣么多东东,全部要自己码代码实现吗?当然不用,我们不必自己造轮子,有现成的工具会帮我们自动生产大部分的代码框架,如gSOAP工具,这将是下一篇文章要介绍的内容。


    展开全文
  • HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传输协议。...HTTP协议功能HTTP是客户端浏览器或其他程序与Web服务器之间的应用层通信协议。在Internet上的...
    HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传输协议。
    它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。
    HTTP协议功能
    HTTP是客户端浏览器或其他程序与Web服务器之间的应用层通信协议。在Internet上的Web服务器上存放的都是超文本信息,客户机需要通过HTTP协议传输所要访问的超文本信息
    HTTP包含命令和传输信息,不仅可用于Web访问,也可以用于其他因特网/内联网应用系统之间的通信,从而实现各类应用资源超媒体访问的集成。
    我们在浏览器的地址栏里输入的网站地址叫做URL (Uniform Resource Locator,统一资源定位符)。就像每家每户都有一个门牌地址一样,每个网页也都有一个Internet地址。
    当你在浏览器的地址框中输入一个URL或是单击一个超级链接时,URL就确定了要浏览的地址。浏览器通过超文本传输协议(HTTP),将Web服务器上站点的网页代码提取出来,并翻译成漂亮的网页。
    Request For Comments (RFC),是一系列以编号排定的文件。文件收集了有关因特网相关资讯,以及UNIX和因特网社群的软件文件。目前RFC文件是由Internet Society(ISOC)所赞助发行。
    基本的因特网通讯协定都有在RFC文件内详细说明。RFC文件还在标准内额外加入了许多的论题,例如对于因特网新开发的协定及发展中所有的记录。因此几乎所有的因特网标准都收录在RFC文件之中
     
    下面是一些重要的RFC文档:
     
    1 ) 赋值RFC(Assigned Numbers RFC)列出了所有Internet协议中使用的数字和常数。至
    本书出版时为止,最新 RFC的编号是 1340 [Reynolds 和Postel 1992] 。所有著名的
    Internet端口号都列在这里。
    当这个RFC被更新时(通常每年至少更新一次),索引清单会列出RFC 1340被替换的时间。
     
    2) Internet正式协议标准,目前是RFC 1600[Postel 1994]。这个RFC描述了各种Internet协
    议的标准化现状。每种协议都处于下面几种标准化状态之一:标准、草案标准、提议
    标准、实验标准、信息标准和历史标准。另外,对每种协议都有一个要求的层次、必
    需的、建议的、可选择的、限制使用的或者不推荐的。
    与赋值RFC一样,这个RFC也定期更新。请随时查看最新版本。
     
    3 ) 主机需求RFC,1122和1123[Braden 1989a, 1989b]。RFC 11 2 2针对链路层、网络层和运
    输层;RFC 1123针对应用层。这两个RFC对早期重要的RFC文档作了大量的纠正和解
    释。如果要查看有关协议更详细的细节内容,它们通常是一个入口点。它们列出了协
    议中关于“必须”、“应该”、“可以”、“不应该”或者“不能”等特性及其实现细节。
    文献[Borman 1993b]提供了有关这两个RFC的实用内容。RFC 1127[Braden 1989c]对工
    作小组开发主机需求RFC过程中的讨论内容和结论进行了非正式的总结。
     
    4) 路由器需求RFC,目前正式版是RFC 1009[Braden and Postel 1987],但一个新版已接近
    完成[Almquist 1993]。它与主机需求RFC类似,但是只单独描述了路由器的需求
    HTTP协议描述的是发送方与接收方的通信协议,通过两方的自觉遵守而存在,当然有不少的浏览器并没有百分百遵守这份协议。HTTP是运行于应用层的协议,基于TCP协议而运作。基本上是客户/服务器对答模式,其中也包括在传输过程中的代理,网关,通道,缓存等都需要遵守这份协议。
    阅读完RFC之后,较为难以理解的部分是关于连接机制与缓存机制,其他都基本上是字段与头部格式的定义
    HTTP所表达的控制以及描述性相关的信息都包含在了HTTP的起始行和首部之中。BNF的使用使得自己能够清晰的梳理出起始行和首部中所有类别的元信息。对于每一类的元信息具体包含哪些内容也能够有所了解。这一抽象的方法不仅HTTP协议定义的时候比较严谨之外,在实现HTTP解析器(浏览器)的时候参照BNF写代码是非常容易实现的。这也提醒了我们在编写相关的系统设计方案的时候是可以借鉴类似的方法的。毕竟使用文字表述的设计方案存在这问题遗漏,表述不够清晰,不同人理解有所差异等方面的问题。(我们会看到在FTP之中也有类似的方法,状态图)。HTTP被设计成为一种非常容易扩展的协议,因此协议时松散的。头域可以加入需要的头部名和指定的值,尽管有的头部没有加入RFC标准,但是可能成为约定成俗的标准(虽然这会给HTTP的安全性带来了挑战),由此可以看出良好的设计方案在一开始的时候就考虑到其以扩展性,这也是HTTP能够长期存在,不断发展的原因
    HTTP所表达的控制以及描述性相关的信息都包含在了HTTP的起始行和首部之中。BNF的使用使得自己能够清晰的梳理出起始行和首部中所有类别的元信息。对于每一类的元信息具体包含哪些内容也能够有所了解。这一抽象的方法不仅HTTP协议定义的时候比较严谨之外,在实现HTTP解析器(浏览器)的时候参照BNF写代码是非常容易实现的。这也提醒了我们在编写相关的系统设计方案的时候是可以借鉴类似的方法的。毕竟使用文字表述的设计方案存在这问题遗漏,表述不够清晰,不同人理解有所差异等方面的问题。(我们会看到在FTP之中也有类似的方法,状态图)。HTTP被设计成为一种非常容易扩展的协议,因此协议时松散的。头域可以加入需要的头部名和指定的值,尽管有的头部没有加入RFC标准,但是可能成为约定成俗的标准(虽然这会给HTTP的安全性带来了挑战),由此可以看出良好的设计方案在一开始的时候就考虑到其以扩展性,这也是HTTP能够长期存在,不断发展的原因
    HTTP概述
             超文本传输协议-HTTP(HTTP,HyperText Transfer Protocol)是因特网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。
              HTTP的发展是万维网协会(World Wide Web Consortium)和Internet工作小组(Internet Engineering Task Force)合作的结果,(他们)最终发布了一系列的RFC,其中最著名的就是RFC 2616。RFC 2616定义了HTTP协议的我们今天普遍使用的一个版本——HTTP 1.1。
             HTTP是一个客户端和服务器端请求和应答的标准(TCP)。客户端是终端用户,服务器端是网站。通过使用Web浏览器、网络爬虫或者其它的工具,客户端发起一个到服务器上指定端口(默认端口为80)的HTTP请求。(我们称这个客户端)叫用户代理(user agent)。应答的服务器上存储着(一些)资源,比如HTML文件和图像。(我们称)这个应答服务器为源服务器(origin server)。在用户代理和源服务器中间可能存在多个中间层,比如代理,网关,或者隧道(tunnels)。尽管TCP/IP协议是互联网上最流行的应用,HTTP协议并没有规定必须使用它和(基于)它支持的层。 事实上,HTTP可以在任何其他互联网协议上,或者在其他网络上实现。HTTP只假定(其下层协议提供)可靠的传输,任何能够提供这种保证的协议都可以被其使用。
             通常,由HTTP客户端发起一个请求,建立一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端发送过来的请求。一旦收到请求,服务器(向客户端)发回一个状态行,比如"HTTP/1.1 200 OK",和(响应的)消息,消息的消息体可能是请求的文件、错误消息、或者其它一些信息。
    HTTP使用TCP而不是UDP的原因在于(打开一个)一个网页必须传送很多数据,而TCP协议提供传输控制,按顺序组织数据,和错误纠正。具体细节请参考‘TCP和UDP的不同’通过HTTP或者HTTPS协议请求的资源由统一资源定位器(Uniform Resource Identifiers)(或者,更准确一些,URLs)来标识。
     
    HTTP请求信息(Request Message)
             发出的请求信息包括以下几个 :
             HTTP请求行,例如GET /images/logo.gif HTTP/1.1,表示从/images 目录下请求logo.gif 这个文件。
             (请求)头,例如Accept-Language: en
              空行
             可选的消息体
             请求行和标题必须以<CR><LF> 作为结尾(也就是,回车然后换行)。空行内必须只有<CR><LF>而无其他空格。在HTTP/1.1 协议中,所有的请求头,除Host外,都是可选的。
    HTTP请求方法(Request Methods)
             HTTP协议中定义了八种方法(有时也叫“动作”)来表示对指定数据的操作。
    HEAD
            (Head方法)要求响应与相应的GET请求的响应一样,但是没有的响应体(response body)。这用来获得响应头(response header)中的
    元数据信息(meta-infomation)有(很)帮助,(因为)它不需要传输所有的内容。
    GET
           (Get方法用来)请求指定的资源。它是目前网上最常用的方法。它不应该用于一些会造成副作用的操作中
           (在网络应用中用它来提交动作是一种常见的错误用法)。(细节请)参考后面的“安全方法”(这一节)。
    POST
           (POST方法用来)向指定的资源提交需要处理的数据。这些数据写在请求的内容里。(POST请求)可以导致新资源的产生和已有资源的更新。
    PUT
            上传指定资源
    DELETE
            删除指定资源
    TRACE
           (Trace方法告诉服务器端)返回收到的请求。客户端可以(通过此方法)察看在请求过程中中间服务器添加或者改变哪些内容。
    OPTIONS
            返回服务器(在指定URL上)支持的HTTP方法。通过请求“*”而不是指定的资源,这个方法可以用来检查网络服务器的功能。
    CONNECT
            将请求的连接转换成透明的TCP/IP通道,通常用来简化通过非加密的HTTP代理的SSL-加密通讯(HTTPS)。
            HTTP服务器至少应该实现Get和Head方法,可能的话,也实现OPTIONS方法。
    HTTP安全方法
      有些方法(比如HEAD, GET, OPTIONS, and TRACE) 被定义为安全方法,这些方法针对的只是信息的返回,并不会改变服务器的状态(换句话说就是这些方法不会产生副作用)。不安全的方法(例如POST, PUT and DELETE) 应该用特殊的方式向用户展示,通常是按钮而不是链接,这样就可以使用户意识到可能要负的责任(例如一个按钮带来的资金交易。)
    HTTP协议版本号
      超文本传输协议已经演化出了很多版本,它们中的大部分都是向下兼容的。客户端在请求的开始告诉服务器它采用的协议版本号,而后者则在响应中采用相同或者更早的协议版本。

    HTTP/0.9
      已过时。只接受 GET 一种请求方法,没有在通讯中指定版本号,且不支持请求头。由于该版本不支持 POST 方法,所以客户端无法向服务器传递太多信息。

    HTTP/1.0
      这是第一个在通讯中指定版本号的 HTTP 协议版本,至今仍被广泛采用,特别是在代理服务器中。

    HTTP/1.1
      当前版本。持久连接被默认采用,并能很好地配合代理服务器工作。还支持以管道方式在同时发送多个请求,以便降低线路负载,提高传输速度。
    此版相较于 HTTP/1.0 协议的区别主要体现在:
    HTTP缓存处理
            带宽及网络连接的管理
            安全性及完整性
    HTTP状态行
            参见:HTTP状态码
            所有 HTTP 响应的第一行都是状态行, 依次是当前 HTTP 版本号,3位数字组成的状态代码,以及描述状态的短语,彼此由空格分隔。
           状态代码的第一个数字代表当前响应的类型:
           1xx 消息——请求已被服务器接收,继续处理
           2xx 成功——请求已成功被服务器接收、理解、并接受
           3xx 重定向——需要后续操作才能完成这一请求
           4xx 请求错误——请求含有词法错误或者无法被执行
           5xx 服务器错误——服务器在处理某个正确请求时发生错误
           虽然 RFC 2616 中已经推荐了描述状态的短语,例如"200 OK","404 Not Found",但是 WEB 开发者仍然能够自行决定采用何种短语,用以显示本地化的状态描述或者自定义信息。
    HTTP 请求/响应的步骤
           1、客户端连接到Web服务器
           一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。例如,http://www.oakcms.cn。
           2、发送HTTP请求
           通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。
           3、服务器接受请求并返回HTTP响应
           Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。
           4、释放连接TCP连接
           若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;
           5、客户端浏览器解析HTML内容
           客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。
    web(World Wide Web)即全球广域网,也称为万维网,它是一种基于超文本和HTTP的、全球性的、动态交互的、跨平台的分布式图形信息系统。是建立在Internet上的一种网络服务,为浏览者在Internet上查找和浏览信息提供了图形化的、易于访问的直观界面,其中的文档及超级链接将Internet上的信息节点组织成一个互为关联的网状结构。
    一般的web是只互联网相关的东西,web页面就是指我们的普通的网页,web开发是只基于物联网的开发,你所看到的东西都是存在互联网的服务器上面,当你用的时候开始下载或者上传相关的信息。相对应的就是客户端开发,我们平时用的一下软件是需要你下载安装的才能正常使用。比如web游戏就是网页游戏,用个浏览器就可以玩。大型的游戏则需要你下载相应的客户端。

    转载于:https://www.cnblogs.com/wdyaoyao/p/10442960.html

    展开全文
  • 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。1960年美国人Ted ...

    0x01 前言

            在讲本课的内容之前我们先来了解互联网中的HTTP是什么?
            超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。1960年美国人Ted Nelson构思了一种通过计算机处理文本信息的方法,并称之为超文本(hypertext),这成为了HTTP超文本传输协议标准架构的发展根基。Ted Nelson组织协调万维网协会(World Wide Web Consortium)和互联网工程工作小组(Internet Engineering Task Force )共同合作研究,最终发布了一系列的RFC,其中著名的RFC 2616定义了HTTP 1.1。(百度的)
            HTTP协议的主要特点
            1.支持客户/服务器模式。
            2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
            3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
            4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
            5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

    0x02 HTTP协议基础讲解

            http请求由三部分组成,分别是:请求行、消息报头、请求正文
            请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本,格式如下:Method Request-URI HTTP-Version CRLF其中 Method表示请求方法;Request-URI是一个统一资源标识符;HTTP-Version表示请求的HTTP协议版本;CRLF表示回车和换行(除了作为结尾的CRLF外,不允许出现单独的CR或LF字符)。

    0x03 HTTP请求方法

    GET    请求指定的页面信息,并返回实体主体。
    HEAD     类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
    POST     向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
    PUT     从客户端向服务器传送的数据取代指定的文档的内容。
    DELETE      请求服务器删除指定的页面。
    CONNECT     HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
    OPTIONS     允许客户端查看服务器的性能。TRACE     回显服务器收到的请求,主要用于测试或诊断。

    0x04 HTTP请求行区别

    Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。
    对应HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作。
    现在用的比较多的是post和get方式,一般情况下,如果不说明请求方式,例如地址栏输入网址请求、
    超链接请求等都是get请求,只有在form表单请求时可以设置method方式为post。
    get请求方式请求数据显示在url后面,post方式显示在请求体中,空白行下面。
    get方式请求数据有限制,最大为1k,而post方式理论上没有限制。
    在绕WAF中 GET包 与  POST包在处理上是有区别的,先看GET与POST的区别


     

     

    Content-Type: 实体报头域用语指明发送给接收者的实体正文的媒体类型
    现在市场上大部分的WAF会解析这行 Content-Type 去识别是否是POST注入,因为要防止方法污染。所以我们就可以根据这个特性来设置不同的Content-Type利用尝试绕过WAF

    0x05 协议未覆盖绕过WAF

    POST 请求常用有2种参数提交方式:
    Content-Type: application/x-www-form-urlencoded;
    Content-Type: multipart/form-data;
    Waf未能覆盖Content-Type: multipart/form-data从而导致被绕过。或者WAF会认为它是文件上传请求,从而只检测文件上传,导致被绕过。如图,下面的WAF就存在被绕过的情况,是典型的协议未覆盖。

    0x06 例子一:实战绕过云锁win_3.1.6版注入(针对POST请求)


     

     

     

     


    给拦截了,先来看看这个包的请求

    这是我们发送过去的包

    我们前面说了大部分的WAF现在会去检测Content-Type 来判断当前执行的操作是什么那么如果我们修改他使用的是其他的报头一定程度上就可能可以绕过WAF


    我们可以看到丝毫没有拦截就绕过去了,可见云锁没有对 Content-Type 的检测做好导致了绕过,我们来看看两个包的区别

     

    成功绕过注入出数据了

     

    0x07 例子二:实战绕过360主机卫士2.0.4.6apache版进行注入(针对GET请求)


     

     

     

     

     

     

     

     

    至于为什么可以绕过我这里猜想了一下:

    云锁:        
            我这里猜想的想是因为 云锁在检测的时候判断问题,因为我们知道Content-Type:multipart/form-data; 是用于POST文件上传的,所以云锁检测到这个报文是上传表单的请求,就调用了上传 表单相对应的规则来检测,而忽略了我们在上传表单中一样可以传输POST数组写入恶意代码,所以我们才能注入。

    360主机卫士
            360卫士的话,就比较简单了,估计程序猿是使用了惯性思维,在写代码的时候判断我们是POST请求就将重点放在POST数组中进行检测,忘记了我们有可能在传输POST数据的时候,在URL写入恶意代码,导致防护失效

    0x08 总结

            绕waf一定要思路骚,http协议也一定要了解,了解了http协议在了解WAF 的工作原理,我们必须正视的是,绕waf就是在绕正则,所以正则表达式一定要入门,只有这样你绕waf的时候才能脑补规则,干起活来也才能事半功倍。

            哦对了,可能会有人想要我上面的那个工具,我会上传到百度云  : )     
            下载地址:http://pan.baidu.com/s/1c1Fpfhu

            转载请获取作者同意在进行转载谢谢  :  )



    作者:PHPoop
    链接:http://www.jianshu.com/p/06eeb2ed4c9d
    來源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    转载于:https://www.cnblogs.com/WindSwaysGrass/p/7398482.html

    展开全文
  • 什么80%的码农都做不了架构师?>>> ...

    基于HTTP协议之WEB消息实时推送技术原理及实现技术

    maybe yes 发表于2014-11-22 18:41

    原文链接 : http://blog.lmlphp.com/archives/18  来自 : LMLPHP后院

    很 早就想写一些关于网页消息实时推送技术方面的文章,但是由于最近实在忙,没有时间去写文章。本文主要讲解基于HTTP1.1协议的WEB推送的技术原理及 实现。本人曾经在工作的时候也有做过一些用到网页消息实时推送的项目,但是当时实现的都不是很完美,甚至有时候是通过Ajax轮训的方式实现。在网上也找 过不少的资料,真正说到点子上的几乎没有,很多文章大都是长篇大论,说了一些新有名字,什么“HTTP长连接”,“实时推送”,“Comet长连接推送技 术”等。但真正提到如何实现实时推送的文章倒是没有看到过。

    我的一个开源项目WebChat,是一个基于网页的聊天室系统,这个系统是本人 毕业前做的,代码一直没放到GITHUB上。因为本人毕业论文设计是一款基于安卓平台的实时推送的应用,开发完安卓推送系统后让我对推送有了更深认识,到 后来毕业论文结束后就想着要将聊天室项目公开,最近放到了GITHUB上,取了个名字叫WebChat,一开始还想叫WeChat,后来感觉很俗,当时也 想不出好名字,感觉只要是像样的英文单词都被占有了。WebChat的git地址是 git@github.com:leiminglin/WebChat.git,服务端使用PHP实现,前端使用了JavaScript,JQuery。 这里谈到这个项目主要是因为WebChat用到了推送技术,想学习的朋友可以下载看看,该项目可以运行在几乎所有浏览器上,本人测试IE6都没问题。

    说 到网页推送,不得不说Flash的WebSocket,这个应该比HTTP实现的要好,但是现在HTML5出来了,Flash慢慢的也将淡出历史舞台。其 实有很多的网页消息推送应用,在HTML5之前,用的比较多的还是Flash,比如百度商桥吖,新浪微博吖等等。但这些出名的应用也不全都使用Flash 实现,之前发现WebQQ的推送是使用HTTP实现的,但是也不排除有部分模块不是使用的是Flash。

    关于如何实现消息实时推送,能想到 的前提一定是长连接,如果没有一个连接在保持着,如何知道消息已经到了呢。所以要实时也是需要花费代价的,服务器需要保持客户端的链接。在使用HTTP实 现实时推送之前,我们需要了解HTTP协议,HTTP1.1是支持长连接的,但是HTTP是没有状态的,一次请求,服务器给予响应,这个请求就结束了,不 久之后就会断开连接,不可以在这个连接基础上再回应,然后再接收,要真是这样就成了Socket通信了。要在这个基础上实现消息实时推送,必须要有一个连 接发出请求然后在等待消息,就让它一直在等待,一旦接收到了消息回应立即发出下一个请求。剩下的事情就是服务端的事情了,服务端需要有个Socket服务 在侦听客户端的长连接请求和发消息的指令,这样就可以实现实时消息推送了,这种方式实现的推送比Ajax轮训要好的多,在实时要求比较高的情况下,比如聊 天,订单支付等情况下比轮训的方式更加节省资源,在时间上也让用户感觉不到消息有的任何延迟。

    推送原理图如下:

    基于HTTP1.1的消息实时推送技术原理-LMLPHP后院

    关于开源聊天室应用WebChat,请查看我的另一篇文章《开源网页聊天室应用WebChat发布》


    转载于:https://my.oschina.net/hosser/blog/371543

    展开全文
  • ONVIF标准是使用SOAP方式实现的Web Services,本专栏上一篇文章已经介绍了什么Web Services,涉及很多概念,包括SOAP、HTTP、XML,RPC等等。辣么多东东,全部要自己码代码实现吗?当然不用,我们不必自己造轮子,...
  • web http协议

    2015-05-09 23:10:00
    http协议是IOS七层协议的应用层,是基于TCP/IP协议的,为什么还要多一个协议了,其实利用TCP协议也是可以的,但是TCP三次握手后是一直保持连接的,如果单单是c/s设计的话是可以TCP就可以了,因为这种设置的话如...
  • web架构 # web应用 架构# C/S 架构 | B/S 架构# client server: 客户端服务器架构,C++# ...# HTTP(HyperText Transport Protocol)是超文本传输协议# 基于TCP/IP协议基础上的应用层协议,底层实现仍为socke...
  • web中的HTTP协议

    2015-07-26 10:14:00
    HTTP协议(HyperText Transfer Protocol 超文本传输协议),是浏览器接收web页面和发送web页面请求的标准协议。HTTP协议基于TCP/IP协议的,版本号有Http1.0和Http1.1两种,现在主要使用Http1.1版本。  HTTP协议...
  • SPDY - Web网络协议

    2013-04-25 09:10:58
    [核心提示] 当老迈的 HTTP 协议逐渐不能满足人们需求的时候,Google 的 SPDY 协议出现在面前,那么这个长期以来一直被认为是 HTTP 2.0 唯一可行选择的 SPDY 是什么呢?...SPDY 是 Google 开发的基于传输控制协议
  • 问题1:soap协议是有什么作用? 答:soap提供了一种标准的方法,使得运行在不同的操作系统并使用不同的技术和编程语言的应用程序可以互相进行通信。 用一个简单的例子来说明soap使用过程,一个soap消息可以发送到...
  • 上一节中我们通过http协议,采用HttpClient向服务器端action请求数据。当然调用服务器端方法获取数据并不止这一种。WebService也可以为我们提供所需数据, ...,它是一种基于SAOP协议的远程调用标准,通过web...
  • 1、web应用 1.1 web应用程序 Web应用程序指供浏览器访问的程序,通常也简称为Web应用。应用程序有两种模式C/S、B/S。 C/S是客户端/服务器端程序,也...这里,基于socket实现一个最简单的web应用程序! import socket s
  • 原文:C# .net基于Http实现web server(web服务)什么web server?  百度百科是这么解释的: Web Server中文名称叫网页服务器或web服务器。WEB服务器也称为WWW(WORLD WIDE WEB)服务器,主要功能是提供网上信息浏览...
  • 本书是介绍怎么编写一个Web服务器,而Web服务器是基于HTTP(HyperTextTransferProtocol)协议实现的,所以要实现一个Web服务器就必须了解HTTP协议,本章主要介绍HTTP协议的相关知识,让我们对HTTP协议有个理性的认识...
  • 什么是http协议

    2019-03-24 13:48:58
    1.什么是http协议 1. HTTP协议简介 HTTP协议就是超文本传输协议(HyperText Transfer Protocol),通俗理解是浏览器和web服务器传输数据格式的协议,HTTP协议是一个应用层协议。 HTTP协议基于TCP协议的,发送数据之前...
  • HTTP协议web开发知识点

    2019-05-16 21:01:00
    1.什么是HTTP 超文本传输协议,是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据,互联网上应用最 为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。设计HTTP的初衷是为了提供一种...
  • WEB API的概念和http协议什么是接口?应用程序可能有很多接口web 服务接口REST架构API测试的特点 什么是接口? 接口是某个对象和外界交互的部分 应用程序可能有很多接口 1用户界面UI(user interfa) 2消息交互...
  • 要访问一个IPC摄像头,或者说要调用IPC摄像头提供的WEB服务接口,就要先知道其IP地址,这就是「设备发现」的过程,或者叫「设备搜索」的过程。ONVIF规范并没有自己定义服务发现框架,而是复用了已经很成熟的WS-...
  • 说明:本文没有讨论什么技术问题,仅仅是自己在使用SVN进行版本控制时的创建过程,或许有人对此不太熟悉,希望对这个感兴趣的有帮助。 虽说现在好多人都已经使用Git作为版本控制,Git在分支管理和性能上着实不错,...
  • 自定义web框架二、HTTP超文本传输协议1.http协议的简介什么是http协议http发展2.http协议概述HTTP协议概述HTTP实现前提HTTP实现过程3.HTTP协议工作原理HTTP请求/响应的步骤**例如:浏览器中输入url回车后会经历的...
  • 现在web技术蓬勃发展,办公应用特别是excel都搬到了线上,比较流行的有腾讯文档,金山文档,石墨文档,google doc,属于企业服务。但是小型企业或者团队,如果想自己搭建一套在线表格系统呢?有没有开源的方案? 经...
  • 什么web开发?

    2021-01-06 03:26:23
    基于web和http的程序开发; b/s和c/s结构的区别 1、都是基于http协议的程序开发; 2、b/s就是web开发; 3、c/s就是客户端开发; 4、b/s:主要是由浏览器和服务器构成; 5、c/s:主要是由客户端和服务器构成; 6、都...
  • 基于 http 协议web 应用程序是请求——应答模式是无状态的,我们可以这样理解:每次的请求都是独立的,它的执行情况和结果与前面的请求和之后的请求是无直接关系的,它不会受前面的请求应答情况直接影响,也...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,457
精华内容 982
关键字:

web基于什么协议