問題が関連するテクノロジーにあるのか、それともテクノロジーに対する私の理解にあるのかはわかりません。
javascript で記述された html5 アプリケーションと、Apache 2.2 サーバーでホストされている html があります。
シンプルなRESTサービスをホストするjetty、guice、jackson、jerseyを使用してJavaで書かれたJavaアプリケーションがあります。
両方のアプリケーションは同じボックスで実行され、1 つはポート 80 (Apache でホストされている純粋な html5 アプリケーション)、もう 1 つは 8080 (jetty/guice でホストされている純粋な Java アプリケーション) で実行されます。
答えは、送り返すヘッダーにあると思います。CORS ヘッダーは、外部アプリケーションが API にヒットすることを許可することをブラウザーに伝えます。Jetty、Guice サーバーが正しい CORS ヘッダーを返すように構成する方法がわかりません。
組み込みの Jetty サーバーを使用しているため、ヘッダーを追加するための web.xml ファイルがありません。
また、HTML5 アプリケーション サーバー (この場合は apache 2.2) がアプリケーションを提供する方法にも関係している可能性があります。
Apache httpd.conf ファイルには次のエントリがあります。
LoadModule headers_module modules/mod_headers.so
<IFModule mod_headers>
Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, DELETE, HEAD
Header add Access-Control-Allow-Headers: X-PINGOTHER
Header add Access-Control-Max-Age: 1728000
</IfModule>
私のguiceサーブレット構成には、次のものがあります。
public class RestModule extends ServletModule{
@Override
protected void configureServlets() {
bind(QuestbookService.class);
// hook Jersey into Guice Servlet
bind(GuiceContainer.class);
// hook Jackson into Jersey as the POJO <-> JSON mapper
bind(JacksonJsonProvider.class).in(Scopes.SINGLETON);
Map<String, String> guiceContainerConfig = new HashMap<String, String>();
guiceContainerConfig.put(ResourceConfig.PROPERTY_RESOURCE_FILTER_FACTORIES,
HttpStatusCodeMetricResourceFilterFactory.class.getCanonicalName());
serve("/*").with(GuiceContainer.class, guiceContainerConfig);
}
}
応答ヘッダーを設定する場所がないため、問題は私のguice構成にあると思います。
組み込みの jetty サーバーを使用しているため、開発モードではチェック全体がバイパスされると考えましたが、間違っている可能性があります。
アドバイスありがとうございます。