`
keiite
  • 浏览: 67225 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
最近访客 更多访客>>
社区版块
存档分类
最新评论

XMLHTTP组件相关技术资料

    博客分类:
  • Ajax
阅读更多

AJAX学习

AJAX技术背景介绍
Ajax(Asynchronous JavaScript + XML)不是一种技术。实际上,它由几种蓬勃发展的技术以新的强大方式组合而成。Ajax包含:
1. 基于CSS标准的表示;
2. 使用Document Object Model(DOM对象)进行动态显示和交互;
3. 使用XMLHttpRequest与服务器进行异步通信;
4. 使用JavaScript绑定一切。
Ajax的核心是JavaScript对象XmlHttpRequest。该对象在Internet Explorer 5中首次引入,它是一种支持异步请求的技术。简而言之,XmlHttpRequest使您可以使用JavaScript向服务器提出请求并处理响应,而不阻塞用户。
传统的Web应用模型与应用Ajax技术的界面:


传统Web应用的同步交互过程和Ajax应用的异步交互过程的比较

XMLHttpRequest慨述
在使用XMLHttpRequest对象发送请求和处理响应之前,必须先用JavaScript创建一个XMLHttpRequest对象。由于 XMLHttpRequest不是一个W3C标准,所以可以采用多种方法使用JavaScript来创建XMLHttpRequest的实例。 Internet Explorer把XMLHttpRequest实现为一个ActiveX对象,其他浏览器(如Firefox、Safari和Opera)把它实现为一个本地JavaScript对象。由于存在这些差别,JavaScript代码中必须包含有关的逻辑,从而使用ActiveX技术或者使用本地 JavaScript对象技术来创建XMLHttpRequest的一个实例。
很多人可能还记得从前的那段日子,那时不同浏览器上的JavaScript和DOM实现简直千差万别,听了上面这段话之后,这些人可能又会不寒而栗。幸运的是,在这里为了明确该如何创建XMLHttpRequest对象的实例,并不需要那么详细地编写代码来区别浏览器类型。你要做的只是检查浏览器是否提供对ActiveX对象的支持。如果浏览器支持ActiveX对象,就可以使用ActiveX来创建XMLHttpRequest对象。否则,就要使用本地JavaScript对象技术来创建。下面代码展示了编写跨浏览器的JavaScript代码来创建XMLHttpRequest对象实例是多么简单。
  
创建XMLHttpRequest对象的一个实例
var xmlHttp;
  
function createXMLHttpRequest() {
    if (window.ActiveXObject) {
     xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    else if (window.XMLHttpRequest) {
     xmlHttp = new XMLHttpRequest();
    }
  }
  
    可以看到,创建XMLHttpRequest对象相当容易。首先,要创建一个全局作用域变量xmlHttp来保存这个对象的引用。 createXMLHttpRequest方法完成创建XMLHttpRequest实例的具体工作。这个方法中只有简单的分支逻辑(选择逻辑)来确定如何创建对象。对window.ActiveXObject的调用会返回一个对象,也可能返回null,if语句会把调用返回的结果看作是true或 false(如果返回对象则为true,返回null则为false),以此指示浏览器是否支持ActiveX控件,相应地得知浏览器是不是 Internet Explorer。如果确实是,则通过实例化ActiveXObject的一个新实例来创建XMLHttpRequest对象,并传入一个串指示要创建何种类型的ActiveX对象。在这个例子中,为构造函数提供的字符串是Microsoft.XMLHTTP,这说明你想创建XMLHttpRequest 的一个实例。
  
    如果window.ActiveXObject调用失败(返回null),JavaScript就会转到else语句分支,确定浏览器是否把XMLHttpRequest实现为一个本地JavaScript对象。如果存在window.
  
    XMLHttpRequest,就会创建XMLHttpRequest的一个实例。
  
    由于JavaScript具有动态类型特性,而且XMLHttpRequest在不同浏览器上的实现是兼容的,所以可以用同样的方式访问 XMLHttpRequest实例的属性和方法,而不论这个实例创建的方法是什么。这就大大简化了开发过程,而且在JavaScript中也不必编写特定于浏览器的逻辑。


Ajax核心:XMLHTTP组件相关技术资料
数据库远程管理技术
基于互联网的广域网现代应用中的一个重要环节是数据库远程监控。首先简单回顾一下互联网上的数据库远程管理技术的发展过程和方式:
1、早期通过编写CGI-BIN程序模块进行数据库远程管理。但CGI-BIN的运行速度慢,维护很不方便,现在已经基本被弃用。
2、这几年使用组件对象模型(Component Object Model, COM)的应用非常多,效果也很好。但如果使用的是第三方服务器,服务器方往往因为保密或其它商业原因不允许用户注册自己的组件。
3、近年来由微软公司推出的.NET平台和SUN公司的J2EE平台都是非常高档的数据库远程管理与服务平台。都能提供优质的多层(n- Tier)应用服务。 其中,.NET的简单对象访问协议(Simple Object Access Protocol, SOAP)使用超文本传输协议(Hypertext Transfer Protocol, HTTP)和扩展标记语言(Extensible Markup Language, XML)技术实现跨系统(例如Windows - Linux)的通讯服务方式已经广为开发商接受和使用。许多大型应用,例如企业资源计划(Enterprise resource planning, ERP)等都建立在这样的大型平台之上。 但对于中小型应用,比如一个网站的建设和维护,这种大型应用平台就显得有些尾大不掉,开销也过于庞大。
曾经在互联网技术和Java技术方面一度落后的微软公司在XML应用开发则走在了前头。她的XML解析器(MSXML)中的XMLHTTP协议是一个非常方便实用的客户/服务通讯管道。综合运用XMLHTTP以及ActiveX数据对象(ActiveX Data Objects, ADO/ADOX)可以简单方便地实现数据库远程管理。
数据库远程管理体系
数据库远程管理的任务流程是:
1、客户端向服务端发出数据库结构和数据的查询或修改指令。
2、服务端接受并执行有关指令并向客户端返回结果。
3、客户端接受并显示服务端返回的指令执行结果。
实现数据库远程管理的二个主要关键环节是:
1、客户端与服务端之间的指令上传和结果下传的数据通道,由XMLHTTP协议实现。
2、服务端前沿与数据库之间的指令传送和结果返回,由起着中间层作用的ADO/ADOX接口完成。
XMLHTTP的使用
顾名思义,XMLHTTP是个传送XML格式数据的超文本传输协议。实际上,XMLHTTP的数据传输过程更为灵活一些,它上传的指令可以是 XML格式数据,也可以是字符串,流,或者一个无符号整数数组。还可以是URL的参数。它下达的结果可以是XML格式数据,也可以是字符串,流,或者一个无符号整数数组。 
客户端调用XMLHTTP的过程很简单,只有5个步骤:
1、创建XMLHTTP对象
2、打开与服务端的连接,同时定义指令发送方式,服务网页(URL)和请求权限等。
客户端通过Open命令打开与服务端的服务网页的连接。与普通HTTP指令传送一样,可以用"GET"方法或"POST"方法指向服务端的服务网页。
3、发送指令。
4、等待并接收服务端返回的处理结果。
5、释放XMLHTTP对象
一、XMLHTTP方法
Open(bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword )
bstrMethod:数据传送方式,即GET或POST。
bstrUrl:服务网页的URL。
varAsync:是否同步执行。缺省为True,即同步执行,但只能在DOM中实施同步执行。应用中一般将其置为False,即异步执行。
bstrUser:用户名,可省略。
bstrPassword:用户口令,可省略。
Send( varBody )
varBody:指令集。可以是XML格式数据,也可以是字符串,流,或者一个无符号整数数组。也可以省略(null),让指令通过Open方法的URL参数代入。
setRequestHeader ( bstrHeader, bstrValue )
bstrHeader:HTTP 头(header)
bstrValue:HTTP 头(header)的值
如果Open方法定义为POST,可以定义表单方式上传xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
二、XMLHTTP属性
onreadystatechange:在同步执行方式下获得返回结果的事件句柄。只能在DOM中调用。
responseBody:结果返回为无符号整数数组。
responseStream:结果返回为IStream流。
responseText :结果返回为字符串。
responseXML:结果返回为XML格式数据。

三、HTTP 就绪状态
前面提到,服务器在完成请求之后会在 XMLHttpRequest 的 onreadystatechange 属性中查找要调用的方法。这是真的,但还不完整。事实上,每当 HTTP 就绪状态改变时它都会调用该方法。首先必须理解 HTTP 就绪状态。HTTP 就绪状态表示请求的状态或情形。它用于确定该请求是否已经开始、是否得到了响应或者请求/响应模型是否已经完成。它还可以帮助确定读取服务器提供的响应文本或数据是否安全。在 Ajax 应用程序中需要了解五种就绪状态:
• 0:请求没有发出(在调用 open() 之前)。
• 1:请求已经建立但还没有发出(调用 send() 之前)。
• 2:请求已经发出正在处理之中(这里通常可以从响应得到内容头部)。
• 3:请求已经处理,响应中通常有部分数据可用,但是服务器还没有完成响应。
• 4:响应已完成,可以访问服务器响应并使用它。
演示代码:
function updatePage() {
     if (request.readyState == 4)
       alert("Server is done!");
   }

四、HTTP 状态码

因此除了就绪状态外,还需要检查 HTTP 状态。我们期望的状态码是 200,它表示一切顺利。如果就绪状态是 4 而且状态码是 200,就可以处理服务器的数据了,而且这些数据应该就是要求的数据(而不是错误或者其他有问题的信息)。因此还要在回调方法中增加状态检查

演示代码:
function updatePage() {
     if (request.readyState == 4)
       if (request.status == 200)
         alert("Server is done!");
       else if (request.status == 404)
         alert("Request URL does not exist");
       else
         alert("Error: status code is " + request.status);
   }
AJAX的问题
半数以上的AJAX安全风险来自隐含在服务器中的漏洞。显然,使用安全编码技术的好的设计,对于更安全的AJAX大有帮助,我们需要感谢Max熟悉开放万维网应用安全计划(the Open Web Application Security Project - OWASP)排名前十的最严重web应用程序安全漏洞列表。不幸的是,当Max实现AJAX的时候,他仍然需要面对许多额外的因素:
  1.新的技术:如果想把站点连接到一个SQL数据库,在Google查到了数百万的例子。AJAX技术,不管这种技术有多年轻,它仍然是出现在采购循环中相对较早的,尽管它只有很少一部分好的例子出现在网络上。为了解决一些难处理的和不必要的复杂问题,这就要求开发者去自主开发。不得不编写服务器端和客户端的代码,创建他自己不太确定的协议(特别是对服务器响应来讲)。不管这些协议有多好,都将会及时表现在页面上。
  2.非传统方式的设计:AJAX有一点点不同于传统设计方式,因为这样的应用程序是半客户端半服务端的。所以开发者为服务端和客户端都能够进行编码。在同一时间使用两种不同的语言(特别是在早期阶段)进行开发将会产生一些初级的编码错误,因为开发者要在两端来回跳跃,对一端来讲非常好,但可能在另一端不能够胜任。即使开发者有一个大的开发团队,安全编码责任也可能在服务端和客户端开发小组之间代码移交的时候发生问题。
  3.太多的脚本语言:开发者凭借他自己的聪明才智决定建立世界上最优秀的旅行登记工具。你从输入你现在的位置(通过邮政编码、电话区号或者GPS等等)开始登记,这时候一个AJAX请求就会被立即发送来确定你确切的位置。从那时候开始,屏幕上就会填入你所有可以利用的旅行方式,这一切甚至都是在你决定你想要去什么地方、你打算什么时候动身和你打算和谁一同去之前就完成的。
  这个屏幕上的单元格和控件都充满了AJAX驱动,服务器端和客户端的脚本可能需要超过20个不同的服务器调用。你可以想像一个很小的个体服务器程序,比如findairportsbylocation.aspx 或者 determinemaxbaggageallowancebyairline.php.
  显而易见,如果没有开发者的仔细计划(比如创建多功能的“重载”JavaScript函数和服务器脚本),每一次设计他都需要创建超过 40个独立的部分。更多的编程意味着会产生更多的错误和bug,意味着需要更多的时间去编写、管理、测试和更新代码。不仅如此,因为在客户端的 JavaScript代码中应用了大量的这种脚本,他们在正式的程序测试中也容易变得很健忘。
  4.确定小部分的AJAX不会引起危害:这个站点是一个计划出行的站点,但是Max考虑的是它将立刻为你提供一个显示精确位置的卫星视图,并且把你所要到达目的地的天气情况也提供给你。AJAX最大的诱惑之一看起来好像是直到最后一刻它还在进行其它的操作,就像一个讲解员在那里解说一样,为了AJAX使用了AJAX。当Max开始尝试他的新想法时,他会逐渐尝试增加更多新的功能,完全忽视测试的需要。
  5.不安全的通讯:每一个AJAX调用可能只回传很少数量的数据给客户端,但那些数据是私有的、保密的。开发者可以编写一个便利的工具来对你的信用卡号码进行数字校验,但是如果使用纯文本代替over SSL进行发送数据会怎样呢?这是一个显而易见的问题,但是当有许多例行程序需要考虑,特别是屏幕上其它99%的数据不是真正的机密数据时,很容易就会忽视掉SSL的。
  6.服务器端访问控制:使用JavaScript程序来触发AJAX经常会掩饰一些显而易见的编码错误,服务器端访问控制就是一个例子。假设开发者想参考你上次游览的一个详细目的地来为你提供你中意的旅馆,他可能会是像下面这样:
showprevioushotels.aspx?userid=12345&destination=UK
  这当然是非常好的,但是如果一个恶意用户把URL改成了如下所示该怎么办呢:
    showprevioushotels.aspx?userid=12346&destination=%
  他们会得到其他人最喜爱的旅馆吗?(注意:%在SQL语句中是通配符)。无疑,这是一个没有什么危害的例子,但是开发者应该使用 session、cookie或者其它符号形式来确保数据能并且只能发送到正确的用户那里。它们可能仅仅是数据的一小部分,但它们可能就是最重要的一小部分。
  7.服务器端验证:实际上这里有两个问题。第一,AJAX控制经常被用来在用户最后提交到服务器之前的输入验证。因为这是一个服务器端的检查,当这个页面最后被提交的时候他不必再次为在服务器上做检查而烦恼,这里我们假定不会有恶意的用户暗中破坏从 alloweddestinations.php的响应或者破坏对服务器最后的请求。
  AJAX控制可以比用户自己更仔细验证用户的输入,但是他们还是经常在服务器上最后做一次验证。
  AJAX验证的第二个问题就是控制本身会受到验证漏洞的影响。这里再次强调一下,URL通常是隐藏着的,所以也会经常忘掉它。举例说明一下,也许我可以使用SQL Injection来对刚才的脚本进行攻击,如下所示:
  showprevioushostels.aspx?userid='; update users set type='admin' where userid=12345;--
  就会让我登录后具有系统管理员的权限。当然,如何取得那些表名(table)和字段名已经超出了本文讨论的范围,但是你已经了解这种情况了,不是吗?
  8.客户端验证:我们已经知道在刚才的Google Suggest例子中,通过简单评测服务端的响应后动态创建和执行JavaScript函数是可行的。如果没有任何形式的验证(如果这样的话在客户端很难保证可靠性和流畅性),客户端将仅仅简单执行服务器需要它完成的事情。
  
AJAX安全提示
  1、为了取得成功,你必须从好的计划开始。必须集中你的才智减少和简化AJAX调用,创建一个标准的响应格式,在任何地方都要遵循这个协定(理想的XML)。
  2、遵循来自像开放万维网应用安全计划那样的站点的最优方法。这里面特别包含了访问控制和输入校验漏洞检查,同时确保敏感信息使用over SSL胜过使用普通文本。
  3、永远不要假设服务器端AJAX对于访问控制或者用户输入校验检查能够代替在服务器上的最终再检查。增加AJAX控制永远不会减少你的验证工作量,它们只能增加你的工作量。
  4、永远不要假设客户端的混淆技术(obfuscation,在这里指使JavaScript难于阅读和解码)能够保护你非常重要的商业秘密。使用JavaScript是隐藏程序设计最没用的一种手段,还能够为你的对手提供好处。
  5、最后,你必须非常好的领导你的开发团队。

分享到:
评论

相关推荐

    测试空间是否支持XMLHTTP组件.docx

    XMLHTTP组件是Web开发中的一个关键工具,尤其在ASP(Active Server Pages)环境中,它允许开发者在客户端与服务器端之间进行异步数据交换,而无需刷新整个页面。这个组件是AJAX(Asynchronous JavaScript and XML)...

    Microsoft.XMLHttp组件的属性方法

    ### Microsoft.XMLHttp组件的属性与方法详解 #### 组件简介 `Microsoft.XMLHttp`组件是Microsoft为实现异步数据交互而开发的一个ActiveX组件,它主要用于客户端与服务器之间的非阻塞通信,支持发送HTTP请求并接收...

    xmlhttp.rar_XMLHTTP delphi_delphi xmlHt_delphi xmlhttp_xmlhttp

    首先,XMLHTTP组件是Windows操作系统内置的MSXML库的一部分,它提供了与HTTP服务器通信的能力,可以发送HTTP请求并接收响应,常用于AJAX(Asynchronous JavaScript and XML)技术中。在Delphi中,可以通过创建...

    vb6用的xmlhttp模块,get和post方式提交数据,异步获取,不卡死,十分好用

    这个标题提到的"vb6用的xmlhttp模块"实际上是指使用VB6(Visual Basic 6)编程时,通过XMLHTTP组件进行GET和POST请求,以实现异步的数据提交和获取,避免程序卡死的情况。这种技术对于创建网络投票程序、信息采集...

    Ajax核心XMLHTTP组件资料第1/2页

    ### Ajax核心XMLHTTP组件知识点整理 #### 数据库远程管理技术 数据库远程管理是现代基于互联网的广域网应用中的一个关键环节。早期数据库远程管理主要是通过编写CGI-BIN程序模块实现,但这一方法运行速度慢且维护...

    易语言xmlhttp简单应用

    易语言XMLHTTP简单应用主要涉及的是使用易语言编程来实现...以上就是关于易语言XMLHTTP简单应用的基本介绍,通过学习和实践,你可以掌握利用易语言进行网络通信的技术,从而实现更复杂的应用,如网页抓取、数据交换等。

    VFP xmlHTTP应用实例

    xmlHTTP对象是XMLHttpRequest的简称,它是浏览器中的一个组件,允许客户端通过JavaScript或其他语言与服务器进行异步数据交换,实现AJAX(Asynchronous JavaScript and XML)技术的核心。在VFP中,我们可以通过创建...

    易语言源码易语言xmlhttp各版本速度比较源码.rar

    在本压缩包“易语言源码易语言xmlhttp各版本速度比较源码.rar”中,包含的是关于易语言使用XMLHTTP组件进行不同版本性能对比的源代码。 XMLHTTP是微软开发的一个用于异步处理HTTP请求的组件,广泛应用于Web服务和...

    vb6组件指南(Vb高级精华)

    《VB6组件指南(VB高级精华)》是一本专注于Visual Basic 6 (VB6)编程技术的书籍,特别强调了VB6中的组件使用和高级特性。VB6是Microsoft开发的一款强大的可视化编程工具,广泛用于创建Windows应用程序。这本书的目的...

    XMLHTTP类模块.rar

    XMLHTTP类模块是用于在后台执行HTTP请求的组件,它主要应用于异步数据通信,特别是在Web开发中实现AJAX(Asynchronous JavaScript and XML)技术。这个RAR压缩包包含的资源很可能是易语言(E Language)编写的一个...

    在VC中使用XMLHTTP

    ### 在VC中使用XMLHTTP详解 #### 一、引言 在.NET框架中,通过C#语言使用XMLHTTP进行HTTP请求十分...通过本文介绍的方法,希望能够帮助读者更好地理解和掌握在传统Windows应用程序开发环境下使用XMLHTTP的技术要点。

    xmlhttp和xml组件,不需要刷新页面,便可以交互数据

    ### XMLHTTP和XML组件在网页数据交互中的应用 #### 一、引言 随着互联网技术的发展,用户对网络平台的交互性和实时性提出了更高的要求。传统的网页数据交互方式往往依赖于用户手动刷新页面来获取最新信息,这不仅...

    易语言测试XMLHTTP版本

    在"易语言测试XMLHTTP版本"这个主题中,我们主要探讨的是如何使用易语言来操作XMLHTTP组件进行网络通信。 XMLHTTP是微软提出的一种异步HTTP通信技术,它被广泛应用于网页应用程序,如AJAX(Asynchronous JavaScript...

    XMLHTTP参考(HTML格式)

    XMLHTTP是 AJAX(异步JavaScript和XML)技术中的核心组件,它允许Web应用程序在不刷新整个页面的情况下与服务器进行通信,实现数据的动态更新。这个参考手册,以HTML格式呈现,详细介绍了XMLHTTP对象的使用方法,...

    易语言XMLHTTP方式访问网页

    在易语言中,这通常通过调用特定的API函数或使用内置的网络组件来实现。 2. **设置请求参数**:在发送请求之前,可能需要设置一些参数,如HTTP方法(GET或POST)、URL、请求头等。例如,你可以设置User-Agent字段以...

    XMLHTTP.rar_xmlhttp

    XMLHTTP,全称为“XMLHttpRequest”,是Web开发中一个关键的技术组件,特别是在JavaScript异步通信中扮演着核心角色。这个技术允许网页在不刷新整个页面的情况下与服务器进行数据交互,从而实现了动态更新内容,极大...

    VB XMLHTTP 支持大文件分段与断点下载函数.rar

    在VB6环境中,XMLHTTP组件通常...总之,VB6结合XMLHTTP组件的分段下载和断点续传功能,能有效解决大文件下载的问题,提高效率并提供更好的用户体验。通过理解并应用这些技术,你可以创建更健壮和用户友好的应用程序。

    xmlhttp.rar_xmlhttp

    XMLHTTP对象是微软ActiveX组件的一部分,主要用于在后台与服务器进行异步数据交换,它是XMLHttpRequest(XHR)的前身,广泛应用于JavaScript和VBScript中,实现了网页的无刷新更新,即Ajax(Asynchronous JavaScript...

    易语言xmlhttp各版本速度比较

    XMLHTTP组件是微软ActiveX技术的一部分,它允许程序通过HTTP协议发送请求并接收响应,而无需打开浏览器。在易语言中,我们可以找到多个版本的XMLHTTP组件,如XMLHTTP 3.0、4.0和6.0等。每个新版本通常会带来性能提升...

    VB使用Microsoft.XMLHTTP判断程序是否联入互联网

    1. **Microsoft.XMLHTTP**:这是一个内置的COM组件,用于处理HTTP请求和响应。它允许开发者通过脚本语言(如VBScript或JScript)来发送HTTP请求并获取服务器响应,非常适用于创建Web服务客户端应用程序。 2. **...

Global site tag (gtag.js) - Google Analytics