Может ли SWF-файл (используя URLLoader) обращаться к веб-службе HTTPS?
У меня есть FLA (с помощью ActionScript 3.0), я компилирую во Flash. Я использую URLRequest и URLLoader для доступа к веб-серверу http.
var loader:URLLoader = new URLLoader();
var request:URLRequest = new URLRequest("http:test.webservice.com");
try {
loader.load(request);
} catch (error:Error) {
trace("Unable to load requested document.");
}
Это работает нормально - однако, если я пытаюсь получить доступ к адресу https, я получаю
httpStatusHandler: [HTTPStatusEvent type="httpStatus" bubbles=false cancelable=false eventPhase=2 status=0]
ioErrorHandler: [IOErrorEvent type="ioError" bubbles=false cancelable=false eventPhase=2 text="Error #2032: Stream Error. URL: https://test.webservice.com"]
Как я могу получить данные из веб-службы https? Нужно ли размещать SWF на странице, защищенной SSL?
2 ответа
Если вы установите Flash Debug Player, вы, вероятно, увидите следующее в журнале:
** Security Sandbox Violation ***
Connection to https://www.example.com/service/ halted - not permitted from http://www.example.com/your.swf
Error: Request for resource at https://www.example.com/service/ by requestor from http://www.example.com/your.swf is denied due to lack of policy file permissions.
По умолчанию swf, размещенный в http, не может получить доступ к https - он считается другим доменом.
Вам нужно будет настроить соответствующий файл политики crossdomain.xml, чтобы убедиться, что Content-Type имеет тип text/* или другое значение из белого списка. Кроме того, вам потребуется файл мета-политики с именем "secure=false", который позволит получить доступ к https с http.
<allow-access-from domain="www.example.com" secure="false" />
Дальнейшее чтение:
Проверьте междоменную политику в документации по ActionScript.
http://kb2.adobe.com/cps/142/tn_14213.html
Безопасный сервер, обеспечивающий доступ к фильмам, размещенным по незащищенному протоколу.
Не рекомендуется разрешать HTTP-контенту доступ к HTTPS-контенту. Эта практика может поставить под угрозу безопасность, предлагаемую HTTPS.
Однако могут быть случаи, когда устаревшему Flash-контенту разрешен доступ к данным сайта HTTPS. В Flash Player 7 это больше не разрешено по умолчанию. Чтобы разрешить доступ к данным HTTPS с помощью Flash-фильмов, передаваемых по HTTP, используйте атрибут secure в теге "allow-access-from" и установите для него значение false.
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="www.company.com" secure="false" />
</cross-domain-policy>
Он сохраняется как crossdomain.xml и помещается в корень сайта HTTPS-сервера.