Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: X технологии > Ajax, ограничение загрузки только с текущего хоста


Автор: silvek 8.4.2008, 19:46
Добрый день!

Я программирую аякс-приложение. Смысл которого заключается в загрузке информации с удаленных серверов, взаимодействии с пользователем.
Ограничение аякса(или java-script) в том, что оно примет данные только если хост отправителя тот же что и текущий. Т.е. если мы взяли данные с этого же сайта.
Мне требуется проводить обмен данными с другими серверами(которые предоставляют разные службы). 

Итого, вопрос:

как обойти указанное ограничение или как сделать аякс приложение, которое смогло бы взаимодействовать с удаленными узлами в интерактивном режиме(а не только загрузка данных)?


Автор: mishaSL 8.4.2008, 19:56
Думаю такой вариант должен работать безотказно:
Перетранслировать запросы на другие сервера через свой сервер. Т.е. посылаете запрос на свой сервер, а там уже куда нужно обращаетесь.

Автор: silvek 8.4.2008, 20:01
Да, это я прекрасно понимаю =) 

Но это неудобно. Клиенты должны вставить небольшой код на сайт(как статистики счетчик) и работать с приложением.
Указанный вариант я рассматривал, но он доставит клиенту дополнительные затруднения, тем более это по соображениям безопасности не каждый позволит сделать.

Я ищу решение обхода огрничения на JS, без применения обходных путей на том же сервере.
Решение должно быть!

Автор: mishaSL 8.4.2008, 20:12
Цитата(silvek @  8.4.2008,  20:01 Найти цитируемый пост)
Но это неудобно. Клиенты должны вставить небольшой код на сайт(как статистики счетчик) и работать с приложением.
Указанный вариант я рассматривал, но он доставит клиенту дополнительные затруднения, тем более это по соображениям безопасности не каждый позволит сделать.

Не вижу никаких затруднений. Либо я чего-то не понял в вашем вопросе, либо вы чего-то не так делаете. Объясните подробнее, что вам необходимо?
Цитата(silvek @  8.4.2008,  20:01 Найти цитируемый пост)
Я ищу решение обхода огрничения на JS, без применения обходных путей на том же сервере.
Решение должно быть! 

Если вы ищете решение исключительно на JS, то вам наверное надо обратиться с http://forum.vingrad.ru/forum/Javascript.html.

Автор: solenko 8.4.2008, 20:20
Что-то я не могу понять в чем проблемма... Вы хотите предоставлять некий сервис, т.е. пользоватьель, вставляя ваш код, должен получать возможность работы с вашим сайтом. Ну так если js загружен с вашего сайта, то и для системы безопасности он будет "своим". 
Ну а если нужно работать со стороними сайтами, то все зависит от них. У многих сайтов, ориентированных на предоставление сервисов есть JSON интерфейс.

Автор: silvek 9.4.2008, 00:26
Проблема начинается когда я хочу вставить полученный код в див или еще куда. 

Для первой загрузки именно таким образом я и загружаю код.
ЗАтем если я хочу по нажатию на ссылку загрузить еще чегонибудь я использую скрытый фрейм по типу
<a href=PATH target=hidden_frame_name>load something</a>

Вот теперь результат запроса без перезагрузки страницы попадет в скрытый фрейм.
Но нам надо вывести его на страницу из фрейма.
Для этого я использую конструкцию вида
parent.return_data('ЗДЕСЬ ПОЛУЧЕННЫЙ ХТМЛ КОД');

Так вот такая конструкция(опытным путем доказано) работает на страничках того же хоста и не работает на других хостах.

Что же мне делать?

Автор: Fortop 9.4.2008, 00:29
Пусть пользователь разместит скрипт на том хосте где он должен работать.

Автор: silvek 9.4.2008, 00:34
Могу доказать свои слова так:

Вот код для вставки(к примеру):

Код

            <iframe frameborder="0" height="0" width="0" name="meek_db_if" id="meek_db_if"></iframe>
            <div name="meek_db_dv" id="meek_db_dv"></div>
            <script type="text/javascript">
                <!--
                    var cli = 124;
                    function meek_db_return(data)
                    {
                        document.getElementById('meek_db_dv').innerHTML = data;
                    }                    
                -->
            </script>            
            <script type="text/javascript" src="http://k.mytools.su/ajax/init.js"></script>


Вы можете вставить его в любую вашу хтмл страницу даже на локальной машине и он загрузит "первую" страничку.
Далее если нажать "Скачать случайную цитату", он уже не вернет ничего.
Хотя совершенно такой же код, размещенный на том же сервере сработает
http://k.mytools.su/ajax/test/ .

Почему так?
(Зайду с другой стороны вопроса.)

Добавлено через 1 минуту и 9 секунд
Fortop, ну это, я повторюсь, не самое удобное решение.  
Хотя, если я буду в тупике - выбора у меня не будет.

Автор: skyboy 9.4.2008, 00:55
Цитата(silvek @  8.4.2008,  23:34 Найти цитируемый пост)
Почему так?

вопросы безопасности.
установить значение value у input type="file"
прочитать файл на компьютере пользователя
загрузить при помощи XKMHTTPRequest данніе с другого домена
Это все нереализуемо на "обычном" браузерном javascript. не могу заявить, что везде так(вполне вероятно, что некоторые "дырявые" версии браузеров не проверяли на соответствие домен, куда идет запрос, и текущий домен), но думаю, что стоит найти другое решение(означенный вариант с работой через свой сервер, на самом деле, не так уж и "сложен"; я, по крайней мере, сложности не вижу), чем городить непонятные огороды для 1% всех возможных версий всех браузеров.

Автор: Fortop 9.4.2008, 01:08
Цитата(silvek @  9.4.2008,  00:34 Найти цитируемый пост)
ну это, я повторюсь, не самое удобное решение.  
Хотя, если я буду в тупике - выбора у меня не будет. 

У тебя всего 2 варианта, и все их перечислили.
Так что выбирай.

Автор: ksnk 9.4.2008, 07:37
Цитата(silvek @  9.4.2008,  00:26 Найти цитируемый пост)
Для первой загрузки именно таким образом я и загружаю код.
ЗАтем если я хочу по нажатию на ссылку загрузить еще чегонибудь я использую скрытый фрейм по типу
<a href=PATH target=hidden_frame_name>load something</a>

А дело не может быть в кэшировании странички? если посмотреть обмен заголовками с сервером, не станет яснее?

Автор: silvek 9.4.2008, 09:35
Ок, всем спасибо! Буду использовать систему с работой через свой же сервер.


ksnk, нет. Везде посылаются антикеш заголовки.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)