XMLHttpRequest.Open
От: Аноним  
Дата: 06.07.09 18:30
Оценка:
Здравствуйте господа !

Пробуя нарисовать чтонибудь Ajax-о видное выяснил не очень понятную подробность, может быть ктонибудь прокоментирует сее или расскажет откуда ноги ростут ?

А дело вот как было :
Нарисовал я для пробы примерчик в Jscript
xr = new XMLHttpRequest();
xr.open('POST', 'http://www.google.ru', false);
xr.setRequestHeader("Content-Type", "text/xml");
xr.send(null);
return xr.responseText;
метод OPEN проходит нормально без ошибок только в том случае если в URL нет HTTP либо HTTPS но в этом случае возвращается страница в HTML на которой говорится что этот урл не найден .
Но как только я подставляю HTTP в УРЛ метод OPEN на отладке выдает сообщение:
"Ошибка выполнения Microsoft JScript: Разрешение отклонено"

Как тогда сформировать и отослать запрос со своей страницы на другой урл чтобы воспользоваться другим контентом?
Re: XMLHttpRequest.Open
От: Диспетчер Россия  
Дата: 07.07.09 05:21
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте господа !


А> Пробуя нарисовать чтонибудь Ajax-о видное выяснил не очень понятную подробность, может быть ктонибудь прокоментирует сее или расскажет откуда ноги ростут ?


А> А дело вот как было :

А> Нарисовал я для пробы примерчик в Jscript
А> xr = new XMLHttpRequest();
А> xr.open('POST', 'http://www.google.ru', false);
А> xr.setRequestHeader("Content-Type", "text/xml");
А> xr.send(null);
А> return xr.responseText;
А> метод OPEN проходит нормально без ошибок только в том случае если в URL нет HTTP либо HTTPS но в этом случае возвращается страница в HTML на которой говорится что этот урл не найден .
А> Но как только я подставляю HTTP в УРЛ метод OPEN на отладке выдает сообщение:
А> "Ошибка выполнения Microsoft JScript: Разрешение отклонено"

А> Как тогда сформировать и отослать запрос со своей страницы на другой урл чтобы воспользоваться другим контентом?


Насколько я понимаю принцип действия AJAX, и, в частности, метода open(), url должен быть в пределах видимости одного приложения, то есть, не url, а относительный адрес запрашиваемой страницы. Иначе, это уже не AJAX, а зачатки сервиса, а там уже другие правила и принципы работы.

function retrieveURL(action, page){
    if (window.XMLHttpRequest) { // Non-IE browsers
        xmlhttp = new XMLHttpRequest();
        xmlhttp.onreadystatechange = processStateChange;
        try {
            xmlhttp.open("GET", page, true);
        } catch (e) {
            alert(e);
        }
        xmlhttp.send(null);
    } else if (window.ActiveXObject) { // IE
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        if (xmlhttp) {
            xmlhttp.onreadystatechange = processStateChange;
            xmlhttp.open("GET", page, true);
            xmlhttp.send();
        }
    }
}
ajax xmlhttprequest onreadystatechange
Re: XMLHttpRequest.Open
От: Диспетчер Россия  
Дата: 07.07.09 06:21
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте господа !


А> Пробуя нарисовать чтонибудь Ajax-о видное выяснил не очень понятную подробность, может быть ктонибудь прокоментирует сее или расскажет откуда ноги ростут ?


А> А дело вот как было :

А> Нарисовал я для пробы примерчик в Jscript
А> xr = new XMLHttpRequest();
А> xr.open('POST', 'http://www.google.ru', false);
А> xr.setRequestHeader("Content-Type", "text/xml");
А> xr.send(null);
А> return xr.responseText;
А> метод OPEN проходит нормально без ошибок только в том случае если в URL нет HTTP либо HTTPS но в этом случае возвращается страница в HTML на которой говорится что этот урл не найден .
А> Но как только я подставляю HTTP в УРЛ метод OPEN на отладке выдает сообщение:
А> "Ошибка выполнения Microsoft JScript: Разрешение отклонено"

А> Как тогда сформировать и отослать запрос со своей страницы на другой урл чтобы воспользоваться другим контентом?


Для использования контента из другого приложения используйте:


public static string GetExternalHTML(string url)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            Stream receiveStream = response.GetResponseStream();
            StreamReader readStream = new StreamReader(receiveStream, Encoding.GetEncoding(1251));
            string result = readStream.ReadToEnd();
            response.Close();
            readStream.Close();
            return result;
        }
Re: XMLHttpRequest.Open
От: Воронков Василий Россия  
Дата: 07.07.09 09:06
Оценка:
Здравствуйте, Аноним, Вы писали:

Это ограничение по секьюрити. Нельзя делать cross-domain запросы или как они там называются. В MSIE 6 точно можно было с помощью настроек разрешить это дело, и тогда все работало. А вот в других браузерах — нет. Иногда можно схитрить, сделав свою страничку, которая умеет делать перенаправление или выдирать контент, типа:

xr.open('POST', '/mypage.aspx?url=www.google.ru', false);
Re[2]: XMLHttpRequest.Open
От: Аlexey  
Дата: 07.07.09 11:38
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>
ВВ>xr.open('POST', '/mypage.aspx?url=www.google.ru', false);
ВВ>


А вот с такими вещами надо быть поаккуратнее. Котому-то может захотеться использовать ваше веб-приложение как прокси, хоть это и не входит в ваши планы.
Re[3]: XMLHttpRequest.Open
От: Воронков Василий Россия  
Дата: 07.07.09 12:04
Оценка:
Здравствуйте, Аlexey, Вы писали:

А>А вот с такими вещами надо быть поаккуратнее. Котому-то может захотеться использовать ваше веб-приложение как прокси, хоть это и не входит в ваши планы.


Ну так будьте поаккуратнее, кто мешает.
Re[2]: XMLHttpRequest.Open
От: Аноним  
Дата: 07.07.09 14:01
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Здравствуйте, Аноним, Вы писали:


ВВ>Это ограничение по секьюрити. Нельзя делать cross-domain запросы или как они там называются. В MSIE 6 точно можно было с помощью настроек разрешить это дело, и тогда все работало. А вот в других браузерах — нет. Иногда можно схитрить, сделав свою страничку, которая умеет делать перенаправление или выдирать контент, типа:


ВВ>
ВВ>xr.open('POST', '/mypage.aspx?url=www.google.ru', false);
ВВ>



Так это, что получается XMLHTTPRequest можно использовать только для внутренних нужд — для передачи данных только между страницами одного проекта(домена)?
Какая то несуразитса выходит URL открыть можно но только свой ......!?
А почему обращение к внешним адресам через тотже класс прокатывает в PHP ?
И никаких ограничений там нет ?
Re[3]: XMLHttpRequest.Open
От: Воронков Василий Россия  
Дата: 07.07.09 15:00
Оценка:
Здравствуйте, Аноним, Вы писали:

А> Так это, что получается XMLHTTPRequest можно использовать только для внутренних нужд — для передачи данных только между страницами одного проекта(домена)?

А> Какая то несуразитса выходит URL открыть можно но только свой ......!?
А> А почему обращение к внешним адресам через тотже класс прокатывает в PHP ?
А> И никаких ограничений там нет ?

Сам по себе XMLHTTPRequest тут не причем. У него никаких ограничений нет. Это ограничение, введенное с целью повышения секьюрности, при запросе с *клиентской* стороны. Ограничение, в котором "виноват" ваш браузер. Он тупо не дает это делать. В PHP это прокатывает потому что вы, очевидно, делаете это на сервере.
Re[4]: XMLHttpRequest.Open
От: Аноним  
Дата: 07.07.09 17:07
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Здравствуйте, Аноним, Вы писали:


А>> Так это, что получается XMLHTTPRequest можно использовать только для внутренних нужд — для передачи данных только между страницами одного проекта(домена)?

А>> Какая то несуразитса выходит URL открыть можно но только свой ......!?
А>> А почему обращение к внешним адресам через тотже класс прокатывает в PHP ?
А>> И никаких ограничений там нет ?

ВВ>Сам по себе XMLHTTPRequest тут не причем. У него никаких ограничений нет. Это ограничение, введенное с целью повышения секьюрности, при запросе с *клиентской* стороны. Ограничение, в котором "виноват" ваш браузер. Он тупо не дает это делать. В PHP это прокатывает потому что вы, очевидно, делаете это на сервере.


Хорошо а если я как клиента буду использовать FireFox или Opera то это огроничение будет также препятствовать отправке запроса или нет ?
Re[5]: XMLHttpRequest.Open
От: Воронков Василий Россия  
Дата: 07.07.09 17:10
Оценка:
Здравствуйте, Аноним, Вы писали:

А> Хорошо а если я как клиента буду использовать FireFox или Opera то это огроничение будет также препятствовать отправке запроса или нет ?


Да. В этих браузерах я вообще не увидел возможности разрешить кросс-доменные запросы из скриптов.
Re: XMLHttpRequest.Open
От: Sinclair Россия https://github.com/evilguest/
Дата: 08.07.09 04:20
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А> Но как только я подставляю HTTP в УРЛ метод OPEN на отладке выдает сообщение:

А> "Ошибка выполнения Microsoft JScript: Разрешение отклонено"
Это защита, встроенная в браузер. Скрипт имеет право получать программным способом только данные с адресов в своём же домене — точные правила того, что такое "свой же домен", можно найти в MSDN. То, что ты делаешь, называется cross-site scripting.
А> Как тогда сформировать и отослать запрос со своей страницы на другой урл чтобы воспользоваться другим контентом?
Есть секретная технология — JsHttpRequest, которая обходит эту защиту.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: XMLHttpRequest.Open
От: Аноним  
Дата: 12.07.09 19:05
Оценка:
Здравствуйте, Диспетчер, Вы писали:

Д>Здравствуйте, Аноним, Вы писали:


А>>Здравствуйте господа !


А>> Пробуя нарисовать чтонибудь Ajax-о видное выяснил не очень понятную подробность, может быть ктонибудь прокоментирует сее или расскажет откуда ноги ростут ?


А>> А дело вот как было :

А>> Нарисовал я для пробы примерчик в Jscript
А>> xr = new XMLHttpRequest();
А>> xr.open('POST', 'http://www.google.ru', false);
А>> xr.setRequestHeader("Content-Type", "text/xml");
А>> xr.send(null);
А>> return xr.responseText;
А>> метод OPEN проходит нормально без ошибок только в том случае если в URL нет HTTP либо HTTPS но в этом случае возвращается страница в HTML на которой говорится что этот урл не найден .
А>> Но как только я подставляю HTTP в УРЛ метод OPEN на отладке выдает сообщение:
А>> "Ошибка выполнения Microsoft JScript: Разрешение отклонено"

А>> Как тогда сформировать и отослать запрос со своей страницы на другой урл чтобы воспользоваться другим контентом?


Д>Для использования контента из другого приложения используйте:



Д>
Д>public static string GetExternalHTML(string url)
Д>        {
Д>            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
Д>            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Д>            Stream receiveStream = response.GetResponseStream();
Д>            StreamReader readStream = new StreamReader(receiveStream, Encoding.GetEncoding(1251));
Д>            string result = readStream.ReadToEnd();
Д>            response.Close();
Д>            readStream.Close();
Д>            return result;
Д>        }
Д>


Это замечательно конечно но мне надо как то передать запрос как в Ajax делает метод send причмем запрос в XML форме как тут передать подобный запрос с помощью класса HttpWebRequest я честно говоря не вижу .
Re[3]: XMLHttpRequest.Open
От: Диспетчер Россия  
Дата: 13.07.09 05:04
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Диспетчер, Вы писали:


Д>>Здравствуйте, Аноним, Вы писали:


А>>>Здравствуйте господа !


А>>> Пробуя нарисовать чтонибудь Ajax-о видное выяснил не очень понятную подробность, может быть ктонибудь прокоментирует сее или расскажет откуда ноги ростут ?


А>>> А дело вот как было :

А>>> Нарисовал я для пробы примерчик в Jscript
А>>> xr = new XMLHttpRequest();
А>>> xr.open('POST', 'http://www.google.ru', false);
А>>> xr.setRequestHeader("Content-Type", "text/xml");
А>>> xr.send(null);
А>>> return xr.responseText;
А>>> метод OPEN проходит нормально без ошибок только в том случае если в URL нет HTTP либо HTTPS но в этом случае возвращается страница в HTML на которой говорится что этот урл не найден .
А>>> Но как только я подставляю HTTP в УРЛ метод OPEN на отладке выдает сообщение:
А>>> "Ошибка выполнения Microsoft JScript: Разрешение отклонено"

А>>> Как тогда сформировать и отослать запрос со своей страницы на другой урл чтобы воспользоваться другим контентом?


Д>>Для использования контента из другого приложения используйте:



Д>>
Д>>public static string GetExternalHTML(string url)
Д>>        {
Д>>            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
Д>>            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Д>>            Stream receiveStream = response.GetResponseStream();
Д>>            StreamReader readStream = new StreamReader(receiveStream, Encoding.GetEncoding(1251));
Д>>            string result = readStream.ReadToEnd();
Д>>            response.Close();
Д>>            readStream.Close();
Д>>            return result;
Д>>        }
Д>>


А> Это замечательно конечно но мне надо как то передать запрос как в Ajax делает метод send причем запрос в XML форме как тут передать подобный запрос с помощью класса HttpWebRequest я честно говоря не вижу .


Ну так и XMLHttpRequest не передает запросы в XML форме, а только может получить такие... И HttpWebRequest тоже может получить запрос в любой форме — это зависит от респондента.
Честно говоря, я уже не совсем понимаю, что Вам нужно. Если передать данные в XML форме, то Вам нужно обратиться к WEB-сервисам. А если только получить из другого домена, то HttpWebRequest, однозначно. Кстати, параметром к нему может служить и строка в XML.
Re[4]: XMLHttpRequest.Open
От: Аноним  
Дата: 13.07.09 07:30
Оценка:
Д>Ну так и XMLHttpRequest не передает запросы в XML форме, а только может получить такие... И HttpWebRequest тоже может получить запрос в любой форме — это зависит от респондента.
Д>Честно говоря, я уже не совсем понимаю, что Вам нужно. Если передать данные в XML форме, то Вам нужно обратиться к WEB-сервисам. А если только получить из другого домена, то HttpWebRequest, однозначно. Кстати, параметром к нему может служить и строка в XML.

C сервисами все как раз ясно но сервиса не надо.
Нужно отправить запрос в виде XML и получить ответ в этом же виде.
Идеально подходил для этого XMLHttpRequest с его send методом но выяснилось, что междоменные посылки не допустимы по этому приходится искать другой путь(инструмент) .
Но повторяю, web сервисы тут не уместны это должен быть web ASP.NET application.
HttpWebRequest замечательно для этого подходит — только бы еще узнать как отослать с его помощью асинхронный XML запрос ?
Re[5]: XMLHttpRequest.Open
От: Диспетчер Россия  
Дата: 13.07.09 07:40
Оценка:
Здравствуйте, Аноним, Вы писали:


Д>>Ну так и XMLHttpRequest не передает запросы в XML форме, а только может получить такие... И HttpWebRequest тоже может получить запрос в любой форме — это зависит от респондента.

Д>>Честно говоря, я уже не совсем понимаю, что Вам нужно. Если передать данные в XML форме, то Вам нужно обратиться к WEB-сервисам. А если только получить из другого домена, то HttpWebRequest, однозначно. Кстати, параметром к нему может служить и строка в XML.

А>C сервисами все как раз ясно но сервиса не надо.

А> Нужно отправить запрос в виде XML и получить ответ в этом же виде.
А> Идеально подходил для этого XMLHttpRequest с его send методом но выяснилось, что междоменные посылки не допустимы по этому приходится искать другой путь(инструмент) .
А> Но повторяю, web сервисы тут не уместны это должен быть web ASP.NET application.
А> HttpWebRequest замечательно для этого подходит — только бы еще узнать как отослать с его помощью асинхронный XML запрос ?

Асинхронный не получится, так как у HttpWebRequest нет системы событий, как у XMLHttpRequest. Если только попробовать обернуть его своей реализацией.
Re[6]: XMLHttpRequest.Open
От: Аноним  
Дата: 13.07.09 09:15
Оценка:
Здравствуйте, Диспетчер, Вы писали:

Д>Здравствуйте, Аноним, Вы писали:



Д>>>Ну так и XMLHttpRequest не передает запросы в XML форме, а только может получить такие... И HttpWebRequest тоже может получить запрос в любой форме — это зависит от респондента.

Д>>>Честно говоря, я уже не совсем понимаю, что Вам нужно. Если передать данные в XML форме, то Вам нужно обратиться к WEB-сервисам. А если только получить из другого домена, то HttpWebRequest, однозначно. Кстати, параметром к нему может служить и строка в XML.

А>>C сервисами все как раз ясно но сервиса не надо.

А>> Нужно отправить запрос в виде XML и получить ответ в этом же виде.
А>> Идеально подходил для этого XMLHttpRequest с его send методом но выяснилось, что междоменные посылки не допустимы по этому приходится искать другой путь(инструмент) .
А>> Но повторяю, web сервисы тут не уместны это должен быть web ASP.NET application.
А>> HttpWebRequest замечательно для этого подходит — только бы еще узнать как отослать с его помощью асинхронный XML запрос ?

Д>Асинхронный не получится, так как у HttpWebRequest нет системы событий, как у XMLHttpRequest. Если только попробовать обернуть его своей реализацией.


А если синхронным рискнуть, то как реально принять XML ответ ?
Re[7]: XMLHttpRequest.Open
От: Диспетчер Россия  
Дата: 13.07.09 10:01
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Диспетчер, Вы писали:


Д>>Здравствуйте, Аноним, Вы писали:



Д>>>>Ну так и XMLHttpRequest не передает запросы в XML форме, а только может получить такие... И HttpWebRequest тоже может получить запрос в любой форме — это зависит от респондента.

Д>>>>Честно говоря, я уже не совсем понимаю, что Вам нужно. Если передать данные в XML форме, то Вам нужно обратиться к WEB-сервисам. А если только получить из другого домена, то HttpWebRequest, однозначно. Кстати, параметром к нему может служить и строка в XML.

А>>>C сервисами все как раз ясно но сервиса не надо.

А>>> Нужно отправить запрос в виде XML и получить ответ в этом же виде.
А>>> Идеально подходил для этого XMLHttpRequest с его send методом но выяснилось, что междоменные посылки не допустимы по этому приходится искать другой путь(инструмент) .
А>>> Но повторяю, web сервисы тут не уместны это должен быть web ASP.NET application.
А>>> HttpWebRequest замечательно для этого подходит — только бы еще узнать как отослать с его помощью асинхронный XML запрос ?

Д>>Асинхронный не получится, так как у HttpWebRequest нет системы событий, как у XMLHttpRequest. Если только попробовать обернуть его своей реализацией.


А>А если синхронным рискнуть, то как реально принять XML ответ ?


У меня этот метод возвращает готовый контент, кторый я скармливаю Response.Write(), а Вы обрабатывайте возвращаемое значение как XML и все.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.