LINUX.ORG.RU

opera, xmlhttprequest между серверами внутри одного домена


0

0

Как это реализовать? Для хрома решилось при помощи доп. параметров Access-Control. Опера же, собака, пишет:

Uncaught exception: ReferenceError: Security violation
и хоть ты тресни!

Как сделать универсальный межсайтовый xmlhttprequest, который будет работать во всех браузерах?

☆☆☆☆☆
Ответ на: комментарий от KRoN73

Почему это ССЗБ? В firefox межсайтовые запросы работают, в chromium работают. Если они не работают в опере, значит, к черту эту оперу!

Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: комментарий от iSage

Что-то я не могу найти, чем он отличается от «обычного» XMLHttpRequest.

Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: комментарий от iSage

А в огнелисе и хроме ифреймы не нужны, чтобы что-то при помощи XMLHttpRequest'а загрузить...

Насчет различий: http://www.w3.org/TR/XMLHttpRequest2/#differences

Так у меня по сути и есть XMLHttpRequest2:

function sendRequest(request, CGI_PATH, req_STR, fn_OK){
	var timeout_id, str;
	if(window.XMLHttpRequest){
		request = new XMLHttpRequest();
		if(request.overrideMimeType)
			request.overrideMimeType("text/plain;");
	}else{
		 if(window.ActiveXObject){
				var sign_a = ['MSXML2.XMLHTTP.6.0',
					'MSXML2.XMLHTTP.5.0',
					'MSXML2.XMLHTTP.4.0',
					'MSXML2.XMLHTTP.3.0',
					'MSXML2.XMLHTTP',
					'Microsoft.XMLHTTP'];
					for(var i=0, l=sign_a.length; i<l; i++)
						try{
							request = new ActiveXObject(sign_a[i]);
							i = l;
						}catch(e){}
		 }
	}
	if(!request){
		handleError("Браузер не поддерживает WEB-запросы!");
		return;
	}
	request.onreadystatechange=function(){
		if(request.readyState == 4){
			if(request.status == 200){
				clearTimeout(timeout_id);
				fn_OK(request);
			}
			else{
				clearTimeout(timeout_id);
				if(request.status)
					handleError(request.statusText);
				else handleError("Ошибка передачи данных");
			}
		}
	}
	request.open("POST", CGI_PATH, true);
	request.send(req_STR);
	timeout_id = setTimeout(function(){
		request.onreadystatechange = null;request.abort();handleError("Time over");}, 5000);
}

Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: комментарий от Eddy_Em

У меня наоборот отправка. А комет - вообще отдельная песня.
Хм. Вообще странно, что разработанный оперой же стандарт в ней не работает.

iSage ★★★★
()
Ответ на: комментарий от iSage

Операсты пишут, что это не работает, т.к. «дырища». И Mystra_x64 о том же. А в чем прикол «дырищи» - не пойму.

Мой CGI, я разрешаю делать запросы к нему только с одной определенной странички. И в чем здесь дырища?

Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: комментарий от Eddy_Em

Вот честно, была какая-то то ли статья, то ли пост в блоге с объяснениями, но я его не помню… :| т.к. очень редко пользуюсь вообще JS как таковым.

Deleted
()
Ответ на: комментарий от Eddy_Em

только не IE!! :-D

> Понятно. Значит, теперь еще и оперу, помимо IE, буду блокировать apache'м :)

а зачем блокировать IE? вы чоооооо!

MsIE — хороший броузер!! чутьли не самый лучший в мире! :-) [доля-сарказма-конешноже]

вся суть в том что просто-навсего нужно сделать чтото типа:

пример: http://google-chrome-frame.radiodesant.ru/test_gcf.php (открыть его нужно в IE, можно в 6.0 :))
реализация: http://google-chrome-frame.radiodesant.ru/test_gcf.php?show_src=1 (PHP и XHTML конешно тут не причём , просто в качестве образца того что в IE не работает..)

user_id_68054 ★★★★★
()
Ответ на: комментарий от user_id_68054

Мне проще отсылать пользователей IE на страничку, предлагающую установить нормальный браузер ;)

Кстати, а как там у IE с webGL? Хочу я один сильно тормозящий интерфейс на webGL переписать, чтобы и скорость улучшить, и визуализацию.

Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: проверка SVG от user_id_68054

Не надо его искать - я этот злополучный интерфейс уже проверял: не отображается SVG, да и с запросами проблема какая-то.

Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: комментарий от Eddy_Em

> Не надо его искать - я этот злополучный интерфейс уже проверял: не отображается SVG, да и с запросами проблема какая-то.

а вот я уж нащёл IE-6.0 — проверил

SVG работает... (ну через этот костыль http://google-chrome-frame.radiodesant.ru/test_svg.php .. ясное дело что в обычном случае IE ничо не умеет)

но зато обнаружил какуюто странность в «ненормальном» отображение SVG в Chromium :-D

user_id_68054 ★★★★★
()
Ответ на: комментарий от user_id_68054

У меня хром нормально SVG показывал (если они идут как статичные img), а вот динамику (квази-3D) не захотел - начал на ecmascript материться...

Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: комментарий от Eddy_Em

> Мне проще отсылать пользователей IE на страничку, предлагающую установить нормальный браузер ;)

это для пользователя — в действительности будет только лучше!

...вот только пользователь может непонять зачем его послали кудато, .. и обидится :-) [онже не понимает что мы для него специально стараемся как ему лучше :)]

user_id_68054 ★★★★★
()

В опере вообще какие-то параноики работают, у меня даже из букмарклета не получается со стороннего сайта js-ку подгрузить, а во всяких FF-Chrome-IE - без проблем.

SOmni ★★
()
Ответ на: комментарий от Eddy_Em

>Мой CGI, я разрешаю делать запросы к нему только с одной определенной странички. И в чем здесь дырища?

CSRF через аяксовые запросы разве не вылезет?

anonymous
()
Ответ на: комментарий от Eddy_Em

>А по-русски?

Я, если честно, не до конца понял суть изначального вопроса? Внутри одного домена - это типа домены 3-го уровня на одном домене второго?

Ну вот есть у тебя сайт, на котором хостятся другие сайты, например site1.mysite.com и site2.mysite.com. У них разные владельцы (такое бывает).

На site1 стоит веб-приложение, которое сейчас очень модно писать «как на десктопе» - всё делается через js запросы, формочки генерятся js-ом и так далее. Через формочку, например, можно удалить какой-нибудь объект, посылая POST-запрос на нужный урл с id объекта.

Люди разлогиниваться не любят. И вот на site2 хитрый хакир ставит скрипт, который шлёт на site1 тот самый запрос с каким-то id. Скрытно. Пользователь заходит на site2, запрос шлётся, пользователь залогинен (сессия есть, кукисы, все дела). Объект удаляется, пользователь даже не в курсе. Никаких подтверждений нет.

Если даже генерить анти-csrf-токены, то с site2 можно так же залезть на site1 и забрать этот токен, так что проблема не решается.

Кросс-сайтовый скриптинг такое должен предотвращать.

anonymous
()
Ответ на: комментарий от anonymous

Внутри одного домена - это типа домены 3-го уровня на одном домене второго?

Да. Точнее говоря - компьютеры из общей локалки.

Кросс-сайтовый скриптинг такое должен предотвращать.

Для этого и существуют всякие Access-Control'ы. А [...] опере на них начхать!

Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: комментарий от Deleted

Если пользователь всё же хочет отстрелить себе ногу, то по нажатию на кнопочку остальные браузеры предоставляют небольшой арсенал, в то время как опера ограничивает их свободу!

SOmni ★★
()
Ответ на: комментарий от Eddy_Em

думал, это поможет их подружить.. :(

я в своей поделке еще не начал в опере тестировать (использую jsonp)

здесь чел пишет что тоже не получилось (да Вы наверно уже видели это)

ZuBB ★★★★★
()
Ответ на: комментарий от ZuBB

туплю

jsonp должен работать везде, а xmlhttprequest между серверами - нет

ZuBB ★★★★★
()
Ответ на: комментарий от Deleted

Нет, я против садомазо. На самом деле Опера вместо хотя бы пистолета выдаёт мухобойку, и бедные пользователи и разработчики после того, как исхлещут ногу вкровь и получат мазоли на руках, выясняют, что нога так и не может быть прострелена. Ну и кто они после этого?

SOmni ★★
()
Ответ на: комментарий от SOmni

>вместо хотя бы пистолета выдаёт мухобойку

Аналогии такие аналогии.

Ну и кто они после этого?


Сознательные товарищи.

Deleted
()
Ответ на: комментарий от Deleted

Сознательные товарищи могли хотя бы какое-то сообщение выдать, мол нарушение безопасности. Опера же просто ничего не делает, в итоге ты эту мухобойку и так и эдак, а она не стреляет. Вот такие аналогии.

SOmni ★★
()
Ответ на: комментарий от Deleted

Это у ТС-а, мне в моей задаче повезло меньше.

SOmni ★★
()
23 июня 2011 г.
1 сентября 2011 г.
Ответ на: комментарий от badov5

очень юзер-френдли - заставлять пользователя менять настройки браузера, чтобы просмотреть сайт.

maloi ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.