曝光臺 注意防騙
網(wǎng)曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費者
一個包含信息的包,這些包被傳送到一個過程或從此返回。頂層是一個包。
下面這個例子是不允許的,因為它打破了這些規(guī)則:
程序清單11 - 8 9
數(shù)組a r r a y-1是錯誤的,因為它應(yīng)該在頂層。而數(shù)組a r r a y-2的錯誤在于,如果它想在其他
地方被引用,那么應(yīng)該使用A r r a y O f語法。
(6) 數(shù)據(jù)處理擴充的小結(jié)
S O A P加入了一些高級的X M L-R P C數(shù)據(jù)處理能力。一些可能成為X M L應(yīng)程程序的標準的
數(shù)據(jù)類型的加入使S O A P有了一個堅實的基礎(chǔ)。同樣,一些技術(shù),例如稀疏數(shù)組和多引用元素,
對于減少消息的傳送量很有幫助。最后,像X M L一樣進行傳送,而不是編碼成為名字/值對,
使數(shù)據(jù)格式變得更加靈活。
既然我們已經(jīng)使數(shù)據(jù)處理能力大為提高,那么就再關(guān)注一下調(diào)用方法。
2. 調(diào)用
S O A P加入了大量的產(chǎn)生調(diào)用的方法。特別是它允許站點管理者很好地控制服務(wù)器什么消息
能處理和什么不能處理。更多的消息在消息包的頭部提供,同樣增加了使用H T T P動詞的靈活
性。
對于遠程過程調(diào)用使于H T T P標準作為傳輸機制存在的一個問題是,對以下兩種請求難以區(qū)
分。即一些請求可能是某些高級通信過程的一部分,而另一請求可能是低級的或是惡意的。像
我們使用X M L-R P C時所看見的, P O S T動詞用于傳送這樣一些消息,即該消息將決定哪個過程
將被執(zhí)行。但是P O S T也被用于填寫一些表格,它甚至被用于文檔的上載。
在某些情況下,對R P C使用P O S T動詞也許并不麻煩。例如;安全可能不成問題,或者——
更可能的情形是—可能有這樣一種情況,開發(fā)商想在一個服務(wù)器上實現(xiàn)R P C功能,但是我們
沒有向該服務(wù)器加入新動詞或報頭消息的能力。因此,我們總是想首先通過P O S T來嘗試和傳送
R P C消息。
第11章服服務(wù)器到服務(wù)器使用473 下載
但是,由于某些原因管理者可能采用防火墻技術(shù)阻止P O S T表單到達到服務(wù)器。他們盡管想
允許R P C調(diào)用通過,但并不想允許任何其他P O S T通過。區(qū)別X M L - R P C請求是一個被提交遠程
過程調(diào)用而不是非RPC POST的唯一方法是通過考查實際被傳送的數(shù)據(jù)。但是這意味著防火墻要
有更多的工作,因它需要防火墻能識別有效負載,并解析X M L。如果對于S O A P使用防火墻,那
么為什么不能使用B i z Ta l k,We b D AV,或者另外別的什么協(xié)議?一方面新的軟件不停地被加入
防火墻,一方面又設(shè)計一些新的標準,這對于維護防火墻是不可能的。在這種狀態(tài)下,我們將
需要一個動詞來區(qū)分P O S T。
X M L - R P C的強大功能在于它使用H T T P作為它的傳送機制。這是非常重要的,因為這就意
味著任何防火墻都將允許我們的過程調(diào)用通過—并不需要像使用Corba 或者D C O M那樣設(shè)置特
別的端口。但是, X M L - R P C的一個問題是對自身的描述不夠精確。它通過“ t e x t/x m l”內(nèi)容形
式來使用動詞P O S T,使對粒度的控制變得比較困難。
(1) HTTP的擴展
向H T T P加入新的動詞是不可能也是不希望的,設(shè)想一下如果每一個人都能簡單地把它們所
喜歡的動詞隨意加入的情況吧!防火墻和服務(wù)器管理者將無法知道特定請求的目的,無法提供
可靠的過濾。如果兩個不同的服務(wù)器都想發(fā)明一個如R E N A M E的新動詞,我們?nèi)绻麉^(qū)分它們?
即使需要,也不能加入新的動詞,應(yīng)該在報頭提供更多的消息。H T T P擴展模式提供一種機
制用于加入附加報頭和對于H T T P請求加入動詞信息,希望能在不分析請求本身的情況下,被傳
送的消息自然狀態(tài)能被推斷出來。
對于HTTP擴展的一個完整描述參見:
http://www.w3.org/Protocols/HTTP/ietf-http-ext/。
在一條消息被處理前,擴展模式允許一個報頭列表被一個服務(wù)器或者代理所理解。同樣的
方法,你能夠指定一個功能調(diào)用所需要的參數(shù)。如果函數(shù)能被運行,它可能需要一個起始參數(shù)
和一個終結(jié)參數(shù),兩者缺一,即為非法調(diào)用。使用擴展模式我們能夠指定一些相似的過程。如
果服務(wù)器不理解任何強制性參數(shù),那么它必須拒絕全部調(diào)用。
那么對于指定的消息又如何呢?首先無論你想使用什么H T T P動詞,必須在它前面加前綴M
—如果出現(xiàn)了任何強制性的報頭。第二個要求是這些強制性的報頭使用同X M L命名空間相同
的機制被編組。下面擴展模式的例子有助于問題的理解:
程序清單11 - 9 0
在我們關(guān)注擴展之前,對于H T T P標準部分的含義應(yīng)加以更新:
• 第一行的結(jié)尾指明我們遵從HTTP 1.1版本的要求。
474使用XML 高級編程
下載
• 主機報頭說明將接收請求的服務(wù)器是w w w. w 3 . o rg。
• 第一行的中間有要求的U R L,格式為/ a - r e s o u r c e。
• 請求的長度是1 203 字節(jié)(C o n t e n t - l e n g t h),請求的M I M E類型是H T M L。
現(xiàn)在讓我們看一下附加的擴展模式部分的信息:
• 因為第一行的動詞有M -前綴,那么這肯定是一個M a n:報頭。
• 一旦M -被刪除,那么請求將使用H T T P動詞P U T。
• Man:報頭用一個U R I來識別一個命名空間和用1 6來命名它(第二行)。
• 16可以用來定義所有必需的用于P U T的報頭。
• 我們有兩個強制性報頭—copyright 和c o n t r i b u t i o n s。
你所看到這里允許任何人使用c o p y r i g h t報頭為他們自己的目的服務(wù),只要一個唯一的命名
空間前綴用來避免混淆另外的c o p y r i g h t報頭和我們在該例中所使用的c o p y r i g h t報頭—它們可
能有許多。
(2) SOAP的強制性報頭
讓我們看一下S O A P所需要的報頭。事實上在最新的規(guī)范里目前僅只有一個,你可能比較喜
歡這種方式。以前的S O A P標準有一個接口名和一個方法名。但是,事實上,方法名前有一個命
名空間前綴—在這個例子里為S o m e - N a m e s p a c e - U R I # G e tLa s t Tr a d e P r i c e—這可能會使S O A P
中國航空網(wǎng) www.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級編程上(147)