Доступ к клиенту на локальном хосте из JavaScript Online - PullRequest
7 голосов
/ 16 июля 2009

это то, что я пытаюсь сделать.

  1. Я создал несколько HTML-страниц с кодом JavaScript и разместил их на сервере Yahoo.

  2. Теперь, когда клиент с определенным браузером просматривает эти веб-страницы, код JavaScript использует XMLHTTPRequest для соединения по адресу h1ttp: // localhost: 8080 / myservlet / servlet1 для чтения некоторых данных.

  3. Я знаю, я хочу подключиться к веб-серверу, работающему на компьютере клиента, если у клиента есть такой, т.е. я использую localhost в своем xmlHTTPRequest.

Но это не работает, даже если у клиента есть веб-сервер, работающий через порт 8080. На компьютере клиента я могу получить доступ к http://localhost:8080/mysevlet/servlet1, и сервлет работает нормально, но через страницу .html, размещенную на сервере Yahoo, он не работает.

Что-то, что я здесь не так делаю?

Ответы [ 5 ]

6 голосов
/ 16 июля 2009

Межсайтовый скриптинг

Вы не можете получить доступ к тому, чего нет в вашем домене, если только это не веб-служба, возвращающая XML или JSONP

5 голосов
/ 16 июля 2009

Из-за ограничений политики браузеры не позволяют отправлять XMLHttpRequest на домены, отличные от домена, на котором размещена веб-страница, в вашем случае это Yahoo.

2 голосов
/ 16 июля 2009

Разве это не междоменная проблема?

1 голос
/ 16 июля 2009

Как прокомментировали другие, это не работает из-за модели безопасности браузера.

Вы могли бы обойти это с помощью записи в вашем файле hosts.

Во-первых, если ваше приложение находится в домене yahoo.com, откройте файл hosts и добавьте следующую запись

127.0.0.1 mylocalhost.yahoo.com

Затем на своих страницах измените конечную точку AJAX на http://mylocalhost.yahoo.com/myservlet/serverl1

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

Примечание: файл вашего хоста должен находиться в C:\WINDOWS\system32\drivers\etc\hosts в Windows и /etc/hosts в * nix

0 голосов
/ 16 июля 2009

Локальному компьютеру также необходим прокси-сервер, который отображает "http://localhost:8080/whatever" на страницы Yahoo с вашим кодом Ajax. Чтобы код работал, вы должны загрузить его в браузере, используя домен того же домена что он пытается получить доступ.

Я не уверен, как это сделать с Tomcat (?), Но один из вариантов - использовать Apache для прокси-сервера и сервера Tomcat, и страниц Yahoo в одном месте.

В Apache это выглядит так:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
...
<IfModule proxy_http_module>
  ProxyRequests off
  ProxyPass /static    http://yahoo.com/path
  ProxyPass /myservlet http://localhost:8080/myservlet
</IfModule>

Затем вы загрузите свой HTML из localhost / static, и эти страницы смогут отправлять AJAX-запросы в localhost / myservlet.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...