Показать сообщение отдельно
Старый 23.06.2009, 20:58
MasterOfDrama вне форума Посмотреть профиль Отправить личное сообщение для MasterOfDrama Найти все сообщения от MasterOfDrama
  № 1  
Ответить с цитированием
MasterOfDrama

Регистрация: Jun 2009
Сообщений: 8
По умолчанию 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 ?!!!