2010-08-17 2 views
3

Я потратил последние 5 месяцев на разработку приложения gwt, и теперь стало привычным для него сторонних людей. В рамках подготовки к этому один из них настроил мое приложение за обратным прокси, и это сразу привело к проблемам с той же политикой происхождения браузера. Я думаю, что в заголовках ответов есть проблема, но я не могу переписать их каким-либо образом, чтобы проблема исчезла. Я пробовал этоПроблема с SOP за обратным прокси

response.setHeader("Server", request.getRemoteAddress()); 

в какой-то наивной попытке подражать поведению, которое я хочу. Не работает (к удивлению никого).

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

Как я могу заставить заголовок переработать и уйти от проблем SOP, с которыми я имею дело?

Edit: Точная проблема я получаю всплывающее поговорка:

"SmartClient не может напрямую связаться с URL 'https://localhost/app/resource?action= 'doStuffs'" из-за браузера кампанией с таким же происхождения. Удалить хост и номер порта (даже если локальный), чтобы избежать этой проблемы, или использовать протокол XJSONDataSource (который позволяет кросс-сайт звонки), или использовать стороне сервера HttpProxy комплекте с SmartClient Server.»

Но мне не нужен smartclient HttpProxy, так как у меня есть прокси на сервере, не так ли? У меня нет никаких указаний на то, что это может быть проблема сериализации, но, возможно, это сообщение скрывает реальную выпуск ...

Решение chris_l и saret помогли найти решение, но поскольку я могу отметить только один, я отметил ответ от chris_l. Читателям предлагается поднять их обоих, они действительно пришли для меня здесь. Решение было довольно простым, просто удалили любые абсолютные пути на ваш сервер и использовали только относительные, которые сделали трюк для меня. Спасибо, парни!

ответ

2

В SOP (для AJAX запросов) применяется, когда URL страницы HTML и URL на AJAX запросы различаются по своему «происхождению». Происхождение включает хост, порт и протокол.

Так что, если страница http://www.example.com/index.html, ваш запрос AJAX должен также указать на что-то под http://www.example.com. Для SOP это не имеет значения, если есть обратный прокси - просто убедитесь, что URL-адрес - как он отображается в браузере (включая порт и протокол) - не отличается. URL-адрес, который вы используете внутренне, не имеет значения - но не используйте этот внутренний URL-адрес в своем приложении GWT!

Примечание: Решение в специальном случае SmartClient оказалось использование относительных URL (вместо абсолютных URL-адресов одного и того же происхождения). Поскольку относительные URL-адреса не являются требованием SOP в браузерах, я бы сказал, что это ошибка в SmartClient.

+0

Благодарим вас за ответ. Я использовал GWT.getModuleBaseURL(), может ли это быть проблемой? –

+0

Я действительно немного не уверен в getModuleBaseURL(). Но я знаю, что обычно рекомендуется настроить сервер приложений (какой из них вы используете?), Чтобы узнать про прокси - поэтому всякий раз, когда вы запрашиваете у сервера URL-адрес, он возвращает общедоступный URL-адрес прокси , Вот как это сделать в [Tomcat 6] (http://www.icom2010.org.cn/docs/proxy-howto.html) (см. Элемент ). –

+0

А, спасибо. Я запускаю Tomcat 6, я сразу же попробую. –

2

Какой у вас вопрос?

Прежде чем писать обратное окно для приложения GWT, я не могу вспомнить, что нажимаю на любые проблемы с SOP. Одна вещь, которую вам нужно сделать, это убедиться, что заголовки ответов и uri переписаны на URL-адрес reverseeproxies - это включает обратный вызов ajax URLs.


Один вопрос, который я попал (который вы, возможно, также опыт) при работе за обратный прокси был с сериализации политикой сервера GWT.

Для этого необходимо написать реализацию RemoteServiceServlet. Хотя это было в начале/середине 2009 года, похоже, проблема все еще существует.

Похоже, другие попали в этом, а также - see this for further details (ответ Микеле Renda в частности)

+0

Благодарим за ваш ответ saret. Я добавил разъяснение о конкретной проблеме, с которой я имею дело, но я не думаю, что это проблема с сериализацией. –

+0

Одна вещь, которая кажется странной, заключается в том, что при переходе через reverseppxy ваш url должен быть «https: // localhost/app/...», это должно означать, что браузер не должен давать проблемы SOP при попытке нажать «https:// локальный/приложение/ресурс? действие = 'doStuffs». В какой момент приложение GWT вызывает проблемы - приложение загрузилось до этой проблемы? – saret

+0

Приложение загружается до этой проблемы. Это возникает, когда я начинаю звонить на сервер ... –

Смежные вопросы