當Flex(HTTPService
)正在加載XML
到SSL
時,在Internet Explorer (6,7)
中存在已知問題。在這種情況下,Flash Player擲出Error #2032: Stream Error
。在Flex中,我可以發送HTTPService POST請求而不是GET請求嗎?
根據Microsoft和others的建議,應該在服務器端設置「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請求。
您可以自己右here測試。而且,當我試圖解決我的問題時,我看到很多證據表明GET請求不能用自定義標題發送。你可以看看here。
謝謝!
如果它能正常工作,並且您在瀏覽器控制檯中看不到任何錯誤,並且您的Web服務器日誌中沒有錯誤(這可能看不到),但我不擔心它。我不知道你不能在Flex中使用帶有GET的自定義標題,你試過了嗎?基本上,POST/GET之間的區別在於「消息正文」或數據被發現的位置,在這種情況下,您實際上並未發佈任何數據。 GET/POST意味着什麼(可能會影響緩存等)有一些語義上的差異,但我不認爲你在做什麼會有任何實際的傷害。 –