精华内容
下载资源
问答
  • 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

    展开全文
  • 要理解什么是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最初的目的为了提供一种发布和接收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

    展开全文
  • 什么是http协议

    2019-03-24 13:48:58
    1.什么是http协议 1. HTTP协议简介 HTTP协议就是超文本传输...HTTP协议是基于TCP协议的,发送数据之前需要建立好连接 2. 网络传输-TCP/IP四层模型 TCP/IP模型又称为TCP/IP协议族,是一系列网络协议的总称。TCP/I...

    1.什么是http协议

    1. HTTP协议简介

    HTTP协议就是超文本传输协议(HyperText Transfer Protocol),通俗理解是浏览器和web服务器传输数据格式的协议,HTTP协议是一个应用层协议。

    HTTP协议是基于TCP协议的,发送数据之前需要建立好连接

    2. 网络传输-TCP/IP四层模型

    TCP/IP模型又称为TCP/IP协议族,是一系列网络协议的总称。TCP/IP模型一共包括几百种协议,制作协议的目的,就是保证计算机之间可以进行按照一定格式进行数据通信。

    1. 链路层(数据链路层/网络接口层):包括操作系统中的设备驱动程序、计算机中对应的网络接口卡.
    2. 网络层:处理分组在网络中的活动,比如分组的选路.
    3. 运输层:主要为两台主机上的应用提供端到端的通信.
    4. 应用层:负责处理特定的应用程序细节.

    在这里插入图片描述

    3.浏览器请求一个网站的通信过程

    1. 用户输入网址.
    2. 浏览器请求DNS服务器, 获取域名对应的IP地址.
    3. 请求连接该IP地址服务器.
    4. 发送资源请求. (HTTP协议)
    5. web服务器接收到请求, 并解析请求, 判断用户意图.
    6. 获取用户想要的资源.
    7. 将资源返回给web服务器程序.
    8. web服务器程序将资源数据通过网络发送给浏览器.
    9. 浏览器解析请求的数据并且完成网页数据的显示.

    网址是什么呢?

    网址有称为URL,URL的英文全拼是(Uniform Resoure Locator),表达的意思是统一资源定位符,通俗理解就是网络资源地址。

    URL的组成部分大概分为三部分:

    • 协议部分
    • 域名部分
    • 资源路径部分

    比如: http://news.china.com.cn/2018-06/12/content_52060465.htm URL的格式为: http://: 协议部分,news.china.com.cn: 域名部分,/2018-06/12/content_52060465.htm:资源路径部分

    2.请求报文的内容

    HTTP请求报文可以分为GET请求和POST请求报文,要注意的是GET请求没有请求体,POST请求有请求体信息

    在浏览器的调试模式中, Request Headers 中就是请求的报文数据内容. 下面就是我们要请求的报文示例数据:

    GET / HTTP/1.1
    Host: localhost:10000
    Connection: keep-alive
    User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
    Accept-Encoding: gzip, deflate, br
    Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7
    
    1. GET / HTTP/1.1 叫做请求行. 里面包含3个信息, 以空格隔开,
      • 第一个叫做请求方法, 除了 GET 方法之外, 还有 POST 方法, 除此之外还有其他方法, 这两种最常用. GET 主要用于从服务器获得数据, POST 主要用于从浏览器提交数据到服务器. 比如像百度首页提供的上传图片的功能, 就是用POST方式.
      • 第二个表示请求的资源路径. 当请求的URL是<https://www.baidu.com/>, 那么我们会发现 路径会显示 ‘/’, 那么如果请求的URL是<https://www.baidu.com/index.html>, 我们会发现路径显示是 ‘/index.html’.
      • 第三个表示 HTTP 协议的版本, 那么既然有 1.1版本, 前置版本肯定是1.0了,那么两个版本有什么区别呢? 1.1版本比1.0的版本主要多个一些请求方法等扩充协议的内容.

    问题: 如果用户请求路径是https://www.baidu.com/abc.png, 那么资源路径会显示为什么呢?

    1. 请求头. 除了第一行之外, 剩下的所有数据的格式都是类似的.
      • Host 表示浏览器要请求的主机地址. 这是我们查看下 baidu.com itcastcpp.cn, 请求不同的网站, 会有不同的主机地址.
      • Connection 表示浏览器和服务器之间的连接方式, 浏览器和服务器连接是长连接还是短连接, 稍后会讲解.
      • User-Agent 用户代理, 我们使用谷歌浏览器和火狐浏览器分别请求百度, 那么会发现 User-Agent 的值是不一样的, 它主要是用于浏览器告诉服务器自己的身份, 比如浏览器端使用的操作系统是什么版本, 浏览器是什么版本等等. 服务器端为什么需要知道这个信息呢? 我们后面会讲到爬虫,爬虫程序主要是从服务器端获取数据, 那么服务器端就会有反爬机制, 服务器不希望爬虫来获取数据, 所以通过该项可以知道客户端是否是爬虫程序. 如果爬虫程序想伪装成一个浏览器的请求, 就必须设置此项.
      • Accept 表示浏览器告诉服务器, 自己能够接收并识别的文件类型.
      • Accept-Encoding 表示浏览器能够处理的压缩方式. 为什么需要压缩呢? 当网页数据量大的时候, 压缩之后可以提高传输速率, 提高用户体验.
      • Accept-Language 浏览器可以接收的文本语言, 如果非中文编码可能会出现乱码

    在这里插入图片描述

    3.HTTP 响应报文协议分析

    如何使用开发者工具查看请求报文, 以请求 Baidu.com 为例:

    HTTP/1.1 200 OK
    Connection: Keep-Alive
    Content-Encoding: gzip
    Content-Type: text/html; charset=utf-8
    Date: Wed, 14 Mar 2018 09:52:48 GMT
    Server: BWS/1.1
    
    • 第一行 HTTP/1.1 200 OK 叫做响应行, 共分成3部分, 第一部分 HTTP/1.1 表示 HTTP协议的版本, 第二部分是一个数字, 这个数字表示响应状态码, 用户向服务器发出了请求, 如果服务器正常返回响应报文, 那么状态码一般都是200, 第三部分的 “OK” 表示原因短语, 表示对前面状态码的简单描述. 这里需要说的是, 响应的状态码除了 200 之外, 还有其他的状态码, 下面是常见的状态码:

      • 302 redirect, 我们通过 302 状态码可以指示浏览器跳转到某一个 URL.
      • 404 NOT FOUND, 当我们访问一个不存在的 URL 时, 一般会返回404状态码, 告诉浏览器, 你访问的 URL 是不存在的.
      • 500 Internal Server Error, 服务器遇到了一个未曾预料的状况, 导致了它无法完成对请求的处理. 一般来说, 这个问题都会在服务器端的源代码出现错误时出现.
    • 第二行下面的所有内容, 我们叫做响应头. Content-Type 表示响应内容的文本格式和编码方式.

    小结

    在这里插入图片描述

    HTTP协议响应报文分为4部分,每部分之间使用\r\n进行分割

    • 响应行
    • 响应头
    • 空行(\r\n)
    • 响应体

    4.长连接和短连接

    HTTP/1.0中, 默认使用的是短连接.也就是说, 浏览器和服务器每进行一次HTTP操作, 就建立一次连接, 但任务结束就中断连接.如果客户端浏览器访问的某个HTML或其他类型的 Web 页中包含有其他的Web资源,如js文件、图像文件、CSS文件等;当浏览器每遇到这样一个Web资源,就会建立一个HTTP会话。

    但从 HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头有加入这行代码:

    Connection:keep-alive
    

    在真正的读写操作之前,server与client之间必须建立一个连接,

    当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,

    连接的建立通过三次握手,释放则需要四次握手,

    所以说每个连接的建立都是需要资源消耗和时间消耗的。

    1. TCP短连接

    模拟一种TCP短连接的情况:

    1. client 向 server 发起连接请求
    2. server 接到请求,双方建立连接
    3. client 向 server 发送消息
    4. server 回应 client
    5. 一次读写完成,此时双方任何一个都可以发起 close 操作

    在步骤5中,一般都是 client 先发起 close 操作。当然也不排除有特殊的情况。

    从上面的描述看,短连接一般只会在 client/server 间传递一次读写操作!

    2. TCP长连接通信过程

    1. client 向 server 发起连接
    2. server 接到请求,双方建立连接
    3. client 向 server 发送消息
    4. server 回应 client
    5. 一次读写完成,连接不关闭
    6. 后续读写操作…
    7. 长时间操作之后client发起关闭请求

    3. TCP长/短连接的优点和缺点

    • 长连接可以省去较多的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协议是基于TCP/IP协议的,版本号有Http1.0和Http1.1两种,现在主要使用Http1.1版本。  HTTP协议包含大量的消息头信息,用户告诉浏览器或者服务器,该消息体想做什么...而消息体是告诉浏览器或者服务器,它也是...
  • ONVIF标准使用SOAP方式实现的Web Services,本专栏上一篇文章已经介绍了什么是Web Services,涉及很多概念,包括SOAP、HTTP、XML,RPC等等。辣么多东东,全部要自己码代码实现吗?当然不用,我们不必自己造轮子,...
  • 什么是web开发?

    2021-01-06 03:26:23
    1、都是基于http协议的程序开发; 2、b/s就是web开发; 3、c/s就是客户端开发; 4、b/s:主要是由浏览器和服务器构成; 5、c/s:主要是由客户端和服务器构成; 6、都是基于http通信协议进行通信的; 优缺点: 1、b/s...
  • 什么是Http协议

    2017-07-01 16:17:06
    什么是Http协议  HTTP全称HyperText Transfer Protocal,即:超文本传输协议,从1990年开始就在WWW上广泛应用,现今在WWW上应用最多的协议, Http应用层协议,当你上网浏览网页的时候,浏览器和Web服务器...
  • 什么是HTTP协议

    2019-12-04 14:34:59
    都说 HTTP 是基于应用层的协议,而且是基于 TCP / IP 协议的。 如果你接触过socket网络编程,就应该明白TCP和UDP这两种使用广泛的通信协议如图: 既然TCP/UDP是广泛使用的网络通信协议,那为啥有多出个http协议来呢...
  • web http协议

    2015-05-09 23:10:00
    http协议是IOS七层协议的应用层,是基于TCP/IP协议的,为什么还要多一个协议了,其实利用TCP协议也是可以的,但是TCP三次握手后是一直保持连接的,如果单单是c/s设计的话是可以TCP就可以了,因为这种设置的话如...
  • 什么是web

    2021-01-14 19:01:17
    这可以认为 Web 的先驱,因为它基于分组交换(packet switching)进行工作,并且首次实现了TCP/IP协议族(TCP/IP protocol suite) 。这两种技术构成了互联网基础设施的基础。 1980 年,Tim Berners-Lee (通常称之...
  • 1、web应用 1.1 web应用程序 ...Web应用程序首先应用程序,和用标准的程序语言,如Java,PHP,Python等编写出来的程序没有什么本质上的不同。 这里,基于socket实现一个最简单的web应用程序! import socket s
  • 自定义web框架二、HTTP超文本传输协议1.http协议的简介什么是http协议http发展2.http协议概述HTTP协议概述HTTP实现前提HTTP实现过程3.HTTP协议工作原理HTTP请求/响应的步骤**例如:浏览器中输入url回车后会经历的...
  • HTTP协议什么 HTTP是应用层协议,同其他应用层协议一样,是为了实现某一...HTTP协议是基于C/S架构进行通信的,而HTTP协议的服务器端实现程序有httpd、nginx等,其客户端的实现程序主要是Web浏览器,例如Firefox、...
  • 他是一种协议,万变不离其宗,也是基于TCP协议的;和HTTP协议是并存的两种协议。WebSocket是HTML5中的协议。HTML5 Web Sockets规范定义了Web Sockets API,支持页面使用Web Socket协议与远程主机进行全双工的通信。...
  • 什么是Hessian协议呢?

    2015-06-24 18:44:00
    它所基于的XML已经Internet上交换数据的实际标准,基于通用的进程间通信协议和网络传输协议屏蔽平台的差异,可以将各种异构环境下的通信及调用请求均统一为标准的Web服务格式,但是由于SOAP协议的结构问题会使封装...
  • 1、HTTP协议是什么 HTTP 协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写 一个基于 请求与响应,无状态的应用层的协议基于TCP/IP通信协议来传输数据(HTML文件、图片文件、查询解脱等)。 2...
  • Web Service是什么

    2010-01-14 15:37:00
    ★ 分布式应用程序和浏览器 研究一下当前的应用程序开发,你会发现一个绝对的倾向:人们开始偏爱基于浏览器的瘦客户应用程序。... ★ 关于客户端与服务器的通信问题,一个完美的解决方法使用HTTP协议来通
  • LoadRunner对不同协议的选择 以前使用Loadrunner只选择过web(Http/Html),... LoadRunner首先一个测试工具,其次一个性能测试工具,然后该工具一个基于协议,也就是说LoadRunner测试的对象都需要使用通信...
  • 什么是跨终端web开发

    千次阅读 2019-03-30 20:14:01
    任何基于TCP/IP模型应用层协议Web应用的请求方,都可视为“Web终端”,与此相对的就是Web Service。终端的核心价值是Web Service的表现形式与交互形式。 来讨论终端,就暂且不说Web Service的事情了。所以这里就...
  • 什么是WEB服务器?

    2014-04-27 12:09:00
     web服务器是基于网站架设的服务器,我们平时可以浏览的网页都是在别人的服务器上面保存的文件.现在的服务器后台还包括数据库,用来更新前台的页面。 Web服务器可以解析HTTP协议。当Web服务器接收到一个HTTP请求,...
  • 什么是web service

    2012-11-09 14:09:14
    web service 顾名思义就是一个运行在web上的服务。...我们的程序就可以从这个服务上获取到当前最新的天气信息 说的简单点就是远程信息访问,专业点就是基于XML并利用SOAP协议实现跨平台信息传递的一种技术
  • Web Service 简单的说就是把以前的整程序分布式处理,然后后使用接口联合起来。...可以使用HTTP-GET 和 HTTP-POST ,SOAP(简单对象访问协议基于XML)访问Web Service 。WSDL(Web Service Description Lang...
  • 原文:C# .net基于Http实现web server(web服务)什么是 web server?  百度百科这么解释的: Web Server中文名称叫网页服务器或web服务器。WEB服务器也称为WWW(WORLD WIDE WEB)服务器,主要功能提供网上信息浏览...
  • Web Service就是为了使原来各孤立的站点之间的信息能够相互通信、共享而提出的一种接口。 Web service 就是一个应用程序,它向外界暴露出一个能够通过...简单对象访问协议(SOAP)一种轻量的、简单的、基于 XML 的协

空空如也

空空如也

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

web是基于什么协议