Предположим, что у меня есть веб-сайт, статические активы которого размещены в CDN (скажем, AWS CloudFront), однако все вызовы GWT-RPC будут обрабатываться на хостах домена. Как я могу достичь этого в GWT?GWT такой же изначальный полис способ работы?
ответ
Вы можете попробовать использовать CORS (https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS)
Что-то вроде этого:
public class CrossSiteRpcRequestBuilder extends RpcRequestBuilder {
@Override
protected RequestBuilder doCreate(String serviceEntryPoint) {
RequestBuilder requestBuilder=super.doCreate(serviceEntryPoint);
requestBuilder.setIncludeCredentials(true);
return requestBuilder;
}
}
public class CrossSiteRpcRequestBuilderFactory {
public RpcRequestBuilder get() {
return new CrossSiteRpcRequestBuilder();
}
}
RpcRequestBuilder rpcRequestBuilder=((CrossSiteRpcRequestBuilderFactory) GWT.create(CrossSiteRpcRequestBuilderFactory.class)).get();
rpcRequestBuilder.create("{YOUR_HOST}/cors_handshake");
rpcRequestBuilder.setContentType("text/x-gwt-rpc; charset=utf-8");
rpcRequestBuilder.setRequestData("cors handshake");
rpcRequestBuilder.setCallback(new RequestCallback() {
...
});
RequestBuilder r=rpcRequestBuilder.finish();
r.send();
В качестве альтернативы можно использовать сервер как прокси на удаленный сервер (пропускной способности).
В заключение:
Я хотел бы использовать JsonpRequestBuilder вместо RPC, его менее удобным, но гарантированно работать (в отличие от CORS).
Для получения более подробной информации см. http://www.gwtproject.org/doc/latest/tutorial/Xsite.html.
Похоже, добавление имени
@injoy, за исключением того, что ваш код gwt должен будет поступать с вашего сервера, и он может стать большим; См. Http://www.gwtproject.org/doc/latest/FAQ_Server.html#What_is_the_Same_Origin_Policy,_and_how_does_it_affect_GWT? И с той же страницы ссылка на jsonp-решение в моем ответе: http://www.gwtproject.org/doc/latest/FAQ_Server.html#How_can_I_dynamically_fetch_JSON_feeds_from_other_web_domains? – robert
Как отметил @robert, CORS - это еще один вариант, но он не требует каких-либо изменений в вашем клиентском коде - если браузер достаточно новый, чтобы поддерживать CORS вообще, тогда все, что вы делаете, это позвонить удаленный сервер и убедитесь, что удаленный сервер поддерживает его.
В зависимости от того, какой сервер вы используете, поддержка будет немного отличаться. https://www.w3.org/wiki/CORS_Enabled имеет список разных серверов и как вы можете включить CORS, в зависимости от того, что вы используете, и включите его на весь сервер или только в одной части приложения.
Например, в Jetty:
<filter>
<filter-name>cross-origin</filter-name>
<filter-class>org.eclipse.jetty.servlets.CrossOriginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>cross-origin</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
В то время как в Tomcat:
CorsFilter org.apache.catalina.filters.CorsFilter CorsFilter /*
It также можно изменить класс RemoteServiceServlet, чтобы справиться с этим, но это имеет недостаток, заключающийся в необходимости более полного понимания спецификации и обеспечения правильной работы с ней.
Как и в случае с JSONP, существуют важные последствия для защиты разрешений на междоменные запросы. В отличие от JSONP, спецификация CORS включает в себя функции для смягчения этого и гарантирует, что браузер не пытается совершать вызовы на ваш удаленный сервер с неправильной главной страницы - вы можете ограничить вызовы, чтобы они поступали только из определенных доменов. Конкретный заголовок Access-Control-Allow-Origin
, и хотя он может быть назначен *
, что означает «все серверы», вы, вероятно, захотите ограничить его, чтобы избежать возможных атак XSRF против вашего приложения, - в приведенных выше примерах это управляется с помощью параметров init, проверьте ваши контейнерную документацию для конкретных деталей. Кроме того, изменение url-шаблона может ограничивать URL-адреса, к которым применяются эти фильтры, может ограничивать то, что можно запросить удаленно.
Похоже, что добавление «
- 1. Выполнение такой же работы параллельно в хранилище
- 2. GWT проблема Запроса Builder (такой же вопрос политики сайта?)
- 3. способ имя часть такой же одиночныйton класс?
- 4. такой же машина такой же program другой cpu время. Зачем?
- 5. Начало работы с GWT RequestFactory
- 6. git pull изначальный тормозные колодки не обновляет изначальный/тормозные колодки?
- 7. GWT Затраты времени работы
- 8. Rubymotion Dispatch выход изначальный
- 9. github push изначальный
- 10. Изначальный эквивалент в mssql
- 11. GWT uibinder - как указать такой простой макет?
- 12. Random.choice такой же результат
- 13. jQuery такой же класс
- 14. делает такой же байт код означает исходный код такой же?
- 15. Столбец высота такой же
- 16. random.choice всегда такой же
- 17. Laravel такой же валидатор
- 18. Почему такой же ответ?
- 19. Начало работы с smart gwt
- 20. указ такой же политики происхождения
- 21. Реагировать js: Открыть такой же способ из разных компонентов
- 22. C# read написать такой же файл более надежный способ?
- 23. способ использования такой же popup jquery for two div
- 24. git журнал украшение изначальный/HEAD
- 25. Matlab. Изначальный эквивалент в R
- 26. Почему выход не такой же?
- 27. jquery - Ищете такой же контент
- 28. Firebug крепление такой же css?
- 29. Первый ли такой же рост?
- 30. ImageButton не такой же размер
Колин Алворт уже ответил на этот вопрос: http://stackoverflow.com/questions/14356993/getting-around-gwt-same-origin-policy –
Похоже, добавить « «решит проблему - я могу обладать CloudFront для статических активов, пока мои настоящие веб-хосты заботятся о запросах Ajax. –
injoy
@injoy, за исключением того, что ваш код GWT должен будет поступать с вашего сервера, и он может стать большим; См. Http://www.gwtproject.org/doc/latest/FAQ_Server.html # What_is_the_Same_Origin_Policy, _and_how_does_it_affect_GWT И с той же страницы ссылка на jsonp-решение в моем ответе: http://www.gwtproject.org/doc/latest/FAQ_Server.html#How_can_I_dynamically_fetch_JSON_feeds_from_other_web_domains – robert