2013-07-30 24 views
1

我的Flex應用程序託管在http://<ip>:8080/MyApp/Login.html,當我去那裏時,有一個請求http://<ip>:8080/crossdomain.xml被創建,並且請求https://<ip>:8080/crossdomain.xml。當我嘗試使用遠程Java對象調用到同一臺服務器並從中獲取資源時,會發生這種情況。我不在8080端口託管HTTPS,因此此HTTPS通話將失敗。Flex - 請求crossdomain.xml正試圖在http端口上使用https並且超時

問題是https呼叫將有時需要很長時間才能失敗(它通過tomcat連接器中的connectionTimeout長度失敗)。其他時候很快就會失敗。但是,在這種情況下,確實需要很長時間才能失敗,因爲我在等待這些資產和遠程對象調用數據,所以頁面並未完成加載。

我試圖建立的crossdomain.xml的有力檢索與它裏面的以下內容:

<?xml version="1.0"?> 
<cross-domain-policy> 
    <allow-access-from domain="*" to-ports="*"/> 
</cross-domain-policy> 

隨着AS3代碼:

Security.loadPolicyFile(browserUrl+"/assets/crossdomain.xml"); 

這是被稱爲應用程序的initialize事件。上述強大的crossdomain.xml文件正在根據chrome和wireshark被正確調用和檢索,但服務器根目錄的默認位置仍在嘗試中,並且https嘗試仍然超時。並且該應用程序在嘗試超時之前未完成其裝入。

+0

如果Flex應用程序由您撥打電話的相同域提供;你根本不需要加載一個crossdomain。你確定你沒有試圖在應用內進行HTTPS調用嗎? – JeffryHouser

+0

據我所知,crossdomain應放在根目錄下,而不是放在子文件夾內(除非你想爲子文件夾指定一些權限,我猜)。 – user1875642

+0

@ Reboog711我也這麼認爲,但我確實從Chrome的開發者工具中看到了它的呼籲。而且肯定要花上10秒左右才能超時。 我已經檢查了所有的代碼,並不相信我正在強有力地打這個電話。 –

回答

0

所以我想我確定了這個問題是什麼。我在通道列表中首先使用了一個安全通道,由於它是不同的域(http而不是通道所在的https),它將執行crossdomain.xml查找。

我將頻道重新排序爲首先使用常規的http頻道,並且我的應用程序不再進行任何跨域搜索,除非強制搜索(我已從中刪除)。

由於第一個頻道已經通過https,Flex正在等待該查找,然後回退到不安全的頻道。

我也認爲這應該繼續工作,如果實際使用https,因爲我相信一個安全連接器的明文請求將立即被拒絕而不是超時。