• 热门标签

当前位置: 主页 > 航空资料 > 计算机 >

时间:2010-08-09 13:05来源:蓝天飞行翻译 作者:admin
曝光台 注意防骗 网曝天猫店富美金盛家居专营店坑蒙拐骗欺诈消费者

作者认为接口名都是多余的。
一个S O A P请求可能的报头形式如下:
程序清单11 - 9 1
用M -前缀来表明已经提供了强制性报头。这将使一个能够理解H T T P扩展模式的服务器(或
者一个防火墙)来寻找一个称为M a n的报头。一旦找到这个报头,处理软件将发现一个唯一的命
名空间—这个命名空间必须设置为u r n : s c h e m a s - x m l s o a p - o rg : s o a p . v l,如该例所述—这个命
名空间与前缀0 1相连。因此有一个强制性的称为S O A P M e t h o d N a m e的报头,它位于命名空间
u r n : s c h e m a s - x m l s o a p - o rg : s o a p . v l,除非有服务器能识别该报头,否则,服务器将不处理该消息。
现在已经为一个站点管理者提供了一个过滤请求的可能性,如果管理者想阻止任何一个请
求到达服务器(依自身权限),那么可以设置不允许在命名空间里报头为urn:schemas-xmlsoap -
o rg : s o a p . v l的消息通过。如果需要滤出特定的消息,那么可以设置寻找报头u r n : s c h e m a s -
x m l s o a p - o rg : s o a p . v l : S O A P M e t h o d N a m e。没有检查S O A P M e t h o d N a m e的关键在于其他人使用报
头来表明完全不同的其他内容。使用命名空间,混淆就消失了。
(3) XML-PRC简化了什么
如果我们不介意失去那些使X M L - P R C变得如此成功的特点—你需要做的仅是实现或处理
一个P O S T指令来实现远程的服务器控制。那么,能使用传统的P O S T来执行调用,如果还需要
第11章服服务器到服务器使用475 下载
一个等级划分。像以前的调用现在可有如下表述:
程序清单11 - 9 2
其中,同在S O A P报头里用于告诉我们哪种方法被执行的前缀在这里没有了。
S O A P标准说明在这里显示的格式,首先应该被客户的软件试验—那是一种使用某方法的
P O S T,该方法在S O A P M e t h o d N a m e报头里被激活。如果P O S T被服务器所接收,那么我们的调
用与X M L - R P C看起来并无不同,所有改变在于有一个报头来提示何种方法并被执行。
S O A P实际上并不需要报头,因此你可以像使用X M L - R P C一样提交一个简单的P O S T。这
就是为什么防火墙的管理者非常喜欢设置他们的系统使用P O S T动词和X M L的内容类型来
拒绝消息包,如果你所作的全部就是检查S O A P M e t h o d N a m e是否作为一个报头而出现,
那么你将让一个SOAP通过。
如果一个管理员想实施更多的控制,那么他们能够通过检查S O A P M e t h o d N a m e的报头前缀
来拒绝这些P O S T 。当然, 这样做也有可能拒绝一些完全不相关的或者碰巧也使用
S O A P M e t h o d N a m e作为报头名字的非S O A P请求,但这时系统对此什么也不做。拒绝这些请求的
服务器设置应该向客户指明,如果某方法是不允许的那么将以4 0 5做为一个方法不被允许的返回
值。
如果客户接收到这个错误代码,那么并不等于说明S O A P不被支持。我们已说过,可能服务
器在允许该调用通过之前需得到更多的信息。在一个4 0 5事件里,客户将再次提交请求,但这一
次使用M - P O S T格式—包含所有强制性报头。
如果你熟悉S O A P的0 . 9版本,那么将注意到你必须执行P O S T和M - P O S T的顺序已经被颠倒
了。
(4) 方法调用的小结
我希望通过一些有关请求的简单例子能将所有这些阐述清楚。第一个来自于S O A P标准本身,
并使用普通的P O S T对服务器产生一个的调用,就像使用X M L - R P C所做的那样。在下一部分讲
解S O A P服务器的执行时,将解释通过的数据结构,现在仅讲报头消息:
程序清单11 - 9 3
476使用XML 高级编程
下载
S O A P标准里报头并不一定非要包含方法的名字(尽管应该这样)。遗憾的是,对于防火墙
这样做将不能激活方法,因为它并不理解请求的本体。它要么允许所有的方法通过,要么要求
提供报头消息。像我们看到的,在H T T P扩展模式里M - X X X扩展的目标在于提供一种机制来处
理那些对一定报头的要求。该模式提供了所有的H T T P动词的一个版本,这些H T T P动词在正常
情况下没有什么不同,但只有在出现强制性的报头消息时,它们才生效。
现在来看一下如果使用一个强制性P O S T或M - P O S T再次提交,我们的请求将会怎样。如果
一个服务器或者代理被设置或使用X M L的内容类型来忽略P O S T时,M - P O S T将被使用。我们的
第二个请求将如下所示,其中包含了传统的报头消息:
程序清单11 - 9 4
M a n:报头是扩展模式的一部分,指明了一个用于将所有报头编组的前缀,这些报头又是强
制性请求的一部分。在这里,我们说任何以“ 0 1 -”开始的报头均是相同的强制性组的一部分。
像我们从前所说的,“0 1”功能非常像在X M L中的命名空间前缀。事实上,在S O A P有效载荷里,
它必须被设置成S O A P包中的S O A P命名空间U R I相同的值。
现在防火墙高兴了。它能看到我们将怎样处理请求,也能决定是否允许它通过。通过设置
防火墙来拒绝那些有“ t e x t / x m l”内容类型的P O S T,防火墙能迫使S O A P用户使他的所有方法调
用均使用M - P O S T,这些请求保证有对于防火墙来说必需的报头消息,用来作为一个消息是否能
够通过的依据。
S O A P标准并没有完整地描述我在这里所做的每件事情。它只是展示了一个情况,防火墙
拒绝了那些有“t e x t / x m l”内容类型和有S O A P M e t h o d N a m e类型的报头的P O S T。但是,因
为该标准说明S O A P M e t h o d N a m e报头应被提供,而不是必须提供,故而提供它并不是一
件有用的事,因为没有SOAP方法报头的请求也将允许通过。
这意味着,所有的XML POST必须使用M - P O S T。将来这会产生一个问题,因为这种结合
对于S O A P请求来说不是唯一的。例如,一个服务器可能支持B i z Ta l k或者We b D AV,也支持
 
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:XML高级编程上(148)