XmlHttpRequest - как устроено внутри?

Тема в разделе "WASM.NETWORKS", создана пользователем EvilsInterrupt, 30 окт 2007.

  1. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Всем хай.

    Сколько ни задавался этим вопросом, но так досконально и не пойму как внутри этого XmlHttpRequest все работает?
    Можно ли к примеру написать на ассемблере сервер, назовем его XmlHttpServer, который поймет XmlHttpRequest применяемый в Java-Script`e ?
     
  2. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Сдампь запрос и узнаешь. Или тебя интересует именно реализация?

    Можно.
     
  3. Gordon

    Gordon New Member

    Публикаций:
    0
    Регистрация:
    21 апр 2005
    Сообщения:
    21
    Адрес:
    Russia
    XmlHttpRequest это вроде просто набор методов для работы в скриптах браузера. По сути xml файл переданый через HTTP. Любой вебсервер работать должен. Речь идет об AJAX так понимаю.
     
  4. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Gordon
    Да именно! Я как полагаю, это обычный XML-документ, но переданный по протоколу HTTP. Вот и возникает вопрос, каким должен быть XML-документ? Таким каким я его задумал? К примеру:
    Код (Text):
    1. <?xml version = "1.0" encoding = "utf-8"?>
    2. <asutp>
    3.   <ThechnologicalParameters>
    4.     <Parameter Id="0" Value="232.322" Timestamp="2007-Oct-31 19:30:00" Quality="GOOD"/>
    5.     <Parameter Id="1" Value="144.122" Timestamp="2007-Oct-31 19:33:00" Quality="GOOD"/>
    6.   </ThechnologicalParameters>
    7. </asutp>
    Если я такой XML передам по HTTP протоколу, то как XmlHttpRequest меня поймет?
     
  5. Gordon

    Gordon New Member

    Публикаций:
    0
    Регистрация:
    21 апр 2005
    Сообщения:
    21
    Адрес:
    Russia
    Ну я сам только разбираюсь пока. Как скрипт напишешь, так и будет работать. Здесь даже с примерами что то http://ru.wikipedia.org/wiki/XMLHttpRequest.

    Насколько я понял из практики туда проще всего засунуть (передать) кусок HTML кода, и потом его в браузер подсунуть в нужное место. Иначе нужно будет самому Xml через DOM парсить (хотя тоже не сказать что сложно).

    Хотя Java-скриптов (библиотек) написано не мало уже для работы, может с ними и проще.
     
  6. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Gordon Насколько я понимаю, серверная программа должна включать:
    1. Серверную часть по работе с TCP\IP, со слов друга SnugForce я понял, что лучше это будет на портах завершения
    2. HTTP-сервер, который поймет метод XmlHttpRequest.Open с параметром GET и указанием ссылки на мою ЭВМ

    3. Тута сложности, как подружить XmlHttpRequest.setRequestHeader с моей прогой, которая будет реализовывать п1, п2 ?
     
  7. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    EvilsInterrupt
    Ты явно из категории людей, придерживающихся принципа "проще спросить, чем самому читать".

    Каким угодно. Вообще, это не обязательно должен быть XML — просто его проще парсить в JS, чем plain text, и он структурированней, чем HTML.

    Он просто отправит запрос на сервер. Вроде бы, он не интерпретирует данные запроса.

    :)

    setRequestHeader просто добавляет заголовок к запросу, а любой HTTP-сервер понимает заголовки. Соответственно, из CGI можно получить их и обработать по-своему задаваемые в JS.
     
  8. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    IceStudent
    Долго думал? Наверное.

    Я не знаю как у тебя, наверное ты сидишь только и только за одним проектом и только и только на одном средстве. Видемо тебе ни один пользователь не звонит и тебя никогда не беспокоил начальник "Мля, я тебе дал задание написать COM-сервер в понедельник, а сегодня уже вторник в чем сложности?", ты наверное никогда не знал, что в компаниях может быть интернет со скоростью скачки не выше 1 КБ\сек. Ты наверное никогда не знал, что в лучшем книжном магазине города есть лучшая книга по компьютерам и это "Excel для чайников".

    Я очень рад за тебя, что ты всего этого не знал! И очень желаю, чтобы ты этого никогда не узнал! Но я сейчас сижу наработе и пишу:
    1. Гребанный OPC-клиент, с большим количеством ф-ций и нюансов, из-за того что не все разработчики придерживаются OPC спецификации
    2. Просмотрщик технологических данных из базы данных, с нехилой аналитикой
    3. При этом продумываю кусок экспертной системы для предсказывания, когда же нафиг турбогенератор из строя выйдет
    4. Отвечаю на дохрена звонков от юзеров и поясняю, что программист нешарит как позвонить в гараж!
    5. Поясняю начальству, что COM-клиента написать это тебе не провода спаять, что не все так просто
    и т.д.

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

    Мля, задрали. Форум существует не для посыла в RTFM, основная задача форума позволить решить задачи его обидателей. Если не знаешь, нефиг писать чего либо в тему, пройди мимо, это же элементарно!

    Сорри, но не сдержался, бесид когда из себя грамотеев строят!
     
  9. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    EvilsInterrupt
    Нервы беречь надо :)
     
  10. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    IceStudent Ты бы видел какая у мну ситуация, пожалел бы и пива бы купил. Отхаживал меня бы ! ;)
     
  11. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    off
    EvilsInterrupt
    В соседнем топе ты сказал, что нацелен на столицу Всея, так что приглашать в гости отдохнуть не буду ) А отхаживать - это работа сестёр милосердия..
     
  12. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    IceStudent
    По теме:
    Я вот подумал, и пришел к выводу, что клиент должен вводить в браузер нечто вроде этого:

    http://<IP адрес, где моя программа>:<Порт который прослушивает моя программа>/<Название моей программы>?Username=<его логин>&DataType=<тип данных>

    Пример:
    соглассно этому урлу браузер на машину 10.128.1.1 по порту 3210 для программы Asutp_value пошлет запрос по данным за последний час от главного инженера станции.

    Вопрос, как сделать в программе "понимание" параметров, что следуют после символа '?', т.е. как сделать Response ?

    Нюансы:
    1. На машину нельзя ставить кроме моей програмы !!! Т.е Apache и др. программы запрещены. Т.е. не вспоминайте даже про это ;) Все это вызвано,что машина поставляется соглассно лицензии и в лицензии оговоренность, только и только на мою программу! Вслучае если я поставлю еще и веб-сервер и произойдет какая либо программная ошибка, то фирма за свою программу нести ответственность не будет!
    2. В моей программе должен свой аналог web-сервера, потому и такие вопросы ;)
     
  13. Gordon

    Gordon New Member

    Публикаций:
    0
    Регистрация:
    21 апр 2005
    Сообщения:
    21
    Адрес:
    Russia
    да не надо ничего дружить. это же просто HTTP запрос. У него есть header и есть body.

    setRequestHeader - просто выставляет заданый хидер с заданным значением. Можно и свои хидеры добавлять.
    В методе send посылается само тело.

    Просто посмотри тогда уж сниффером запрос, сам все увидишь. А раз сам пишешь, так придется самому весь HTTP парсить да декодировать. Так просто текст. Хотя лучше уж взять какую нибудь реализация вебсервера чем самому все с нуля писать. Есть же либы некие.
     
  14. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Не обязательно, т.к. твоя прога уже является веб-сервером. Это если предполагается несколько типов запросов, тогда актуально.

    Это Request. Как — парсить урл. Ничего сложного, первый параметр идёт после "?", остальные разделяются символом "&".

    Response — это ответ. Тебе его также придётся генерить в виде HTML + заголовки.

    А возьми лучше делфи или BCB. Там есть всё для упрощения работы с HTTP.
     
  15. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    EvilsInterrupt
    Gordon
    Вы CGI и DSO от SOAP можете отличить?
    google "SOAP"
    google "WebService"
    EvilsInterrupt
    Ну я вообще в ауте!!!
    Вы что думаете напишите аналог Apache для своей забавы лучше чем
    бородатые дядьки из opache.org?????
    Тогда я это обхожу стороной...
     
  16. Aquila

    Aquila Самурай дзена

    Публикаций:
    0
    Регистрация:
    30 авг 2002
    Сообщения:
    1.467
    Адрес:
    Russia, Moscow
    wsd
    Простой web-сервер написать не очень сложно, к тому же можно воспользоваться SHTTPD - встраиваемый сервер на C.
     
  17. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    Aquila
    Я про то что они ставят под сомнение Apache!!!
    Тут на сайте есть хороший пример miniweb
    А если на java WebService делать - то вообще не программирование , а глупые
    бизнес методы:)
    Мне здесь просто сомнение в качестве апача не понравилось:dntknw:
     
  18. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    Aquila
    скачал Вашу ссылку правда штука интересная:)
     
  19. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    wsd
    Читать умеем нет?
    Внимательно читаем:
    Специально для тебя еще раз выделию:
    поставляется соглассно лицензии и в лицензии оговоренность,
    Т.е. хочу я или нет, но мне придется придерживаться лицензии !!! И я никак немогу поставить туда еще одну программу, окромя своей!!! А c XmlHttpRequest нужно подружиться. Вывод какой? Вот и я о том же, писать самому!

    IceStudent
    ты писал:
    Я бы не мучился и применил бы Indy-компоненты, но на машину может быть громадное кол-во клиентов законнекчено, самый лучший случай это 60 клиентов и каждый опрашивает раз в 1 сек. и каждому отослать XML-документ весом в 2КБ, повторюсь это самый лучший для меня случай. Но может быть и час-пик!
    Вывод? Заюзать модель порта завершения, т.е. CreateIoCompletionPort и работа с этой ересью, которую можно почитать тут.

    сложность в понимании, того как надо правильно распарсивать параметры. Сложность выбора, чего лучше выбрать HTTP/1.1 или HTTP-ng ?
     
  20. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    EvilsInterrupt
    Вы лицензию читали по ссылке Aquila?
    и кто спаммер?