Проблема СОП за обратным прокси - PullRequest
3 голосов
/ 17 августа 2010

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

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

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

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

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

Редактировать : Точная проблема, которую я получаю, - это всплывающее сообщение:

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

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

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

Ответы [ 2 ]

2 голосов
/ 17 августа 2010

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.

2 голосов
/ 17 августа 2010

Какая проблема у вас точно?

Раньше мне приходилось писать обратный прокси-сервер для приложения GWT. Я не могу вспомнить, чтобы возникали какие-либо проблемы с SOP, но вам нужно сделать одну вещь - убедиться, что заголовки ответа иURI переписываются в URL обратного прокси-сервера - это включает URL обратного вызова ajax.


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

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

Похоже, что другие тоже это ударили - см. Это для более подробной информации (ответ, в частности, Мишель Ренда))

...