вторник, сентября 25, 2007

Отладка GWT + CGI скрипт

Так как я недавно окончательно перешёл на linux, то столкнулся с некоторыми проблемами которых не было под Windows... Например под Windows в эклипсе я запросто отлаживал кроссдоменные ajax вызовы. В случае с cgi скриптами они в типичных случаях(если ничего не предпринимать) всегда кроссдоменные в режиме отладки, потому что gwt shell грузится на localhost:8888 а cgi скрипты соответственно лежат где-то ещё. Но т.к. IE (возможно только при определённых настройках - не помню менял ли я там что-то) наплевать на кроссдоменные ajax-вызовы, то под Windows всё это работало замечательно (только предупреждение вроде выскакивало и всё). Да там были другие проблемы (например с кэшом ) но всё работало так или иначе.

Под linux же я получал такой Exception: "The URL http://myhost.ru/script.cgi?param1=1is invalid or violates the same-origin security restriction". Сначала я попытался "хакнуть" firefox чтобы отключить это ограничение, но из этого у меня ничего не вышло - всё равно получал то же самое. Немного переформулировав запрос гуглу я нашёл-таки решение и даже целых два.

Решение первое было такое: поднимаем локально апач по 8889 порту, и проксируем все запросы к cgi скриптам на нужный нам хост(в примере ниже на локалхост на 80 порту) а остальные запросы на gwt shell висящий на 8888 порту локалхоста. Т.е. у меня получился примерно следующий конфиг для виртуального хоста:
<VirtualHost localhost:8889>
ProxyRequests Off
<proxy>
Order deny,allow
Allow from all
</proxy>
#redirect to my cgi application on external server
ProxyPass /cgi http://localhost:80/cgi-bin
ProxyPassReverse /cgi http://localhost:80/cgi-bin
ProxyPass / http://localhost:8888/
ProxyPassReverse / http://localhost:8888/

</VirtualHost>
Далее при запуске в hosted mode надо просто поменять в адрессной строке localhost:8888 на localhost:8889 и всё будет работать.

Да всё это работает если у вас нету хитрых mod_rewrit'ов и редиректов - иначе возможно придётся поколдовать ещё... Но в целом для отладки метод годится и работает.

Второй метод я проверять не стал, но вкратце он заключается в использовании org.apache.catalina.servlets.CGIServlet для запуска cgi-скриптов. Подробнее см. по ссылке на источник.

Источник: http://groups.google.ru/group/...

2 комментария:

Petya комментирует...
Этот комментарий был удален администратором блога.
Petya комментирует...
Этот комментарий был удален администратором блога.