2013-07-29 193 views
1

當Flex(HTTPService)正在加載XMLSSL時,在Internet Explorer (6,7)中存在已知問題。在這種情況下,Flash Player擲出Error #2032: Stream Error在Flex中,我可以發送HTTPService POST請求而不是GET請求嗎?

根據Microsoftothers的建議,應該在服務器端設置「Cache-Control:no-store」來解決問題。

不幸的是,我沒有訪問應用程序的後端,因此我應該通過Flex解​​決它。

我的目標是在運行時加載帶有配置的xml文件。
在Flex中不允許使用GET請求的自定義標頭(如果我錯了,請告訴我)。因此我決定用POST請求完成我的目標,而且令人驚訝的是它工作得很好。

這裏是我帶着代碼:

var httpService:HTTPService = new HTTPService(); 
httpService.url = 'config.xml'; 
httpService.method = 'POST'; 
httpService.requestTimeout = 10; 
httpService.contentType = "application/xml"; 
httpService.headers["Cache-Control"] = "no-store"; 
httpService.resultFormat = "e4x"; 
var localResponder:Responder = new Responder(
    function(event:ResultEvent):void { 
     //event.result returns the required xml configuration 
    }, 
    function(event:FaultEvent):void { 
    }); 
var token:AsyncToken = httpService.send({}); 
token.addResponder(localResponder); 

我的問題是:難道還有任何副作用,當被髮送,而不是GET請求POST要求?



UPDATE:

爲了證明GET-請求被剝去頭,我已經採取了由@ Reboog711提供的代碼並創建了一個小程序。這裏是代碼:

<?xml version="1.0" encoding="utf-8"?> 
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
       xmlns:s="library://ns.adobe.com/flex/spark" 
       xmlns:mx="library://ns.adobe.com/flex/mx"> 

    <fx:Script> 
     <![CDATA[ 
      import mx.rpc.http.HTTPService; 

      protected function sendHTTPRequest(event:MouseEvent):void 
      { 
       var httpService:HTTPService = new HTTPService(); 
       httpService.url = 'xml.xml'; 
       var headerData : Object = new Object(); 
       headerData['Cache-Control'] = 'no-store'; 
       httpService.headers = headerData; 
       httpService.send(); 
      } 
     ]]> 
    </fx:Script> 

    <s:Button label="SEND HTTP REQUEST" 
       horizontalCenter="0" verticalCenter="0" click="sendHTTPRequest(event)"/> 

</s:Application> 

這裏是我在查爾斯應用程序中看到,當我發送HTTP請求。

enter image description here

您可以自己右here測試。而且,當我試圖解決我的問題時,我看到很多證據表明GET請求不能用自定義標題發送。你可以看看here

謝謝!

+2

如果它能正常工作,並且您在瀏覽器控制檯中看不到任何錯誤,並且您的Web服務器日誌中沒有錯誤(這可能看不到),但我不擔心它。我不知道你不能在Flex中使用帶有GET的自定義標題,你試過了嗎?基本上,POST/GET之間的區別在於「消息正文」或數據被發現的位置,在這種情況下,您實際上並未發佈任何數據。 GET/POST意味着什麼(可能會影響緩存等)有一些語義上的差異,但我不認爲你在做什麼會有任何實際的傷害。 –

回答

2

您應該可以在沒有任何問題的情況下將headers添加到HTTPService請求中。在將Flex應用程序與YouTube API集成之前,我已經完成了它。從概念上講,它應該是這樣的:

var httpService:HTTPService = new HTTPService(); 
var headerData : Object = new Object(); 
headerData['Cache-Control'] = 'no-store'; 
http.headers = headerData; 

如果您執行Google Search其他鏈接出現。只要您的服務支持GET和POST請求;我不知道你爲什麼會遇到任何問題。

+0

謝謝@Reboog711!我已經把你的代碼和創建了一個應用程序來測試你的陳述(請看問題的更新)。我想證明是錯誤的,但我確信自定義標頭只能使用'POST'請求​​。 –