Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   crossdomain.xml в разных браузерах: IE, Opera, Mozilla. (http://www.flasher.ru/forum/showthread.php?t=126622)

MasterOfDrama 23.06.2009 20:58

crossdomain.xml в разных браузерах: IE, Opera, Mozilla.
 
Пытаюсь осуществить обращение флешки к стороннему серверу. Все сделал по правилам: создал crossdomain.xml, загрузил в корень.
В Internet Explorer 7 и FireFox Mozilla 3 все работает великолепно!!! Opera 9 - полный провал: флешка не может получить доступ к стороннему серверу.
Изучение оправляемых оперой пакетов снифером показал, что опера вместо того чтобы запрашивать crossdomain.xml шлет всякий бред и получает от xxx.yyy.ru всякие error 404 и т.д.
В чем проблема? Ведь флеш приложения нормально работают в Опере. Почему не работает мое? Как мне быть уверенным в том что и в остальных менее популярных браузерах моя флешка будет работать правильно?!

Моя простейшая флешка на http://vkontakte.ru/appxxxxxxx_xxxxxxx. Грузиться отсюда: http://cs4337.vkontakte.ru/uxxxxxxxxx/blablablabla.zip
Код AS1/AS2:

System.useCodepage=true;
 
info.text="Введите команду и нажмите \"SEND\"";
var sen_obj:LoadVars=new LoadVars(); //Отправитель
var rec_obj:LoadVars=new LoadVars(); //Получатель
but_send.onPress=function():Void{
        vivod.text="";
        sen_obj.com=vvod.text;
        sen_obj.sendAndLoad("http://xxx.yyy.ru/cgi-bin/com.cgi",rec_obj,"POST");
        info.text="Команда отправлена...";
}
rec_obj.onData=function(text:String):Void{
        if (text == undefined){
                info.text="Сервер недоступен";
        }
        else {
        info.text="Сервер ответил: ";
        vivod.text=text;
        }
}

Мой perl скрипт по адресу http://xxx.yyy.ru/cgi-bin/com.cgi
PHP код:

#!/usr/bin/perl

if ($ENV{'REQUEST_METHOD'eq "POST")
{
read(STDIN$bufer$ENV{'CONTENT_LENGTH'});}
else{
$bufer=$ENV{'QUERY_STRING'};}
@
pairs split(/&/, $bufer);
foreach 
$pair (@pairs){
(
$name$value) = split(/=/, $pair);
$name =~ tr/+/ /;
$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C"hex($1))/eg;
$name =~ s/[\n\\<>]/ /g;
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C"hex($1))/eg;

$FORM{$name} = $value;}

print 
"Content-Type: text/html\n\n";
print 
"I have got your command. It was like: $FORM{com}"

crossdomain.xml доступен по адресу http://xxx.yyy.ru/crossdomain.xml
Код:

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
        <site-control permitted-cross-domain-policies="master-only"/>
        <allow-access-from domain="*"/>
        <allow-http-request-headers-from domain="*" headers="*"/>
</cross-domain-policy>

Добавлено через 1 час 43 минуты
Вот запросы браузеров и ответы сервера:

Mozilla запрос:
Код:

GET /crossdomain.xml HTTP/1.1
Host: xxx.yyy.ru
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive

Ответ сервера на запрос Mozilla:
Код:

HTTP/1.1 200 OK
Date: Tue, 23 Jun 2009 17:25:40 GMT
Server: Apache
Last-Modified: Sat, 20 Jun 2009 21:29:38 GMT
ETag: "ea6b6d-13c-4a3d54c2"
Accept-Ranges: bytes
Content-Length: 316
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: application/xml

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">

<cross-domain-policy>
        <site-control permitted-cross-domain-policies="master-only"/>
        <allow-access-from domain="*"/>
        <allow-http-request-headers-from domain="*" headers="*"/>
</cross-domain-policy>

Запрос Opera:
Код:

GET /crossdomain.xml HTTP/1.1
User-Agent: Opera/9.64 (Windows NT 5.1; U; ru) Presto/2.1.1
Host: xxx.yyy.ru
Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1
Accept-Language: ru-RU,ru;q=0.9,en;q=0.8
Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1
Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0
Referer: http://cs4337.vkontakte.ru/uxxxxxxx/blablablabla.zip
Connection: Keep-Alive

Ответ сервера на запрос Opera:
Код:

HTTP/1.1 302 Found
Date: Tue, 23 Jun 2009 17:31:46 GMT
Server: Apache
Location: http://www.yyy.ru/err/error.phtml?err=403
Keep-Alive: timeout=5, max=99
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html; charset=iso-8859-1
X-Pad: avoid browser bug

e0
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD>
<TITLE>302 Found</TITLE>
</HEAD><BODY>
<H1>Found</H1>
The document has moved <A HREF="http://www.yyy.ru/err/error.phtml?err=403">here</A>.<P>
</BODY></HTML>

0

Компетентные товарищи, разьясните пожалуйста этот бред. Почему на вполне нормальный запрос Оперы сервер выдает страницу с ошибкой вместо crossdomain.xml ?!!!

etc 24.06.2009 18:36

Запросите просто crossdomain.xml из Opera, для начала. Есть подозрение, что виноват ваш собственный сервер.

MasterOfDrama 24.06.2009 18:58

Пробовал, все нормально: crossdomain.xml нормально загружается. Это не мой собственный сервер, а бесплатный хостинг. Попросил протестировать друзей. Около 30 человек учавствовало. Не работает у всех у кого Opera.
Пробовал на локальном сервере (SmallHttpServer v3) - такая же история: всем браузерам отправляется crossdomain.xml а Опере страница с ошибкой...

Добавлено через 9 минут
Прихожу к единственному логическому выводу: запрос оперы отличается от запроса мозиллы и от случая когда оперой напрямую запрашивается crossdomain.xml только наличием "Referer" в HTTP заголовке:
[code]Referer: http://cs4337.vkontakte.ru/uxxxxxxx/blablablabla.zip[code]
Может быть попробовать как то заставить в AS запросить crossdomain.xml без оправки реферера? Только как это сделать?..

etc 25.06.2009 09:56

Реферер отправляет не флеш, а браузер.

MasterOfDrama 25.06.2009 14:54

Подскажите пожалуйста хоть в каком направлении искать?? Что еще попробовать? Невижу выхода.

CrazyPHP 27.08.2011 05:41

таже самая беда (( из оперы не могут выполнится запросы к стороннему серверу (((

Merf 31.08.2011 16:51

Попробуйте при публикации флешки на странице указать параметр allowScriptAcces
PHP код:

<param name="allowScriptAccess" value="always"



Часовой пояс GMT +4, время: 19:06.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.