曝光臺 注意防騙
網曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費者
作者認為接口名都是多余的。
一個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.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級編程上(148)