0

クライアント側で Extjs-6.0.0 を使用してアプリケーションを開発しています。ポート 80でクライアント側アプリケーションを実行します。ポート 8084で実行されているサーバー側アプリケーション。でフォームを送信するとform.submit、次のエラーが発生します。

XMLHttpRequest は localhost:8084/GeoAd/ad/add を読み込めません。クロス オリジン リクエストは、次のプロトコル スキームでのみサポートされます: http、data、chrome、chrome-extension、https、chrome-extension-resource。

chrome-extension、https、chrome-extension-resource. Uncaught NetworkError:「XMLHttpRequest」で「send」を実行できませんでした:「localhost:8084/GeoAd/ad/add」を読み込めませんでした。

ここに画像の説明を入力

この問題を解決するにはどうすればよいですか?
:私のサーバー側言語はJava Webアプリケーションです。

4

3 に答える 3

0

spring プロジェクトにフィルターを追加して、応答にいくつかのヘッダーを追加してクロスオリジンを許可します。

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * see https://spring.io/guides/gs/rest-service-cors/
 *
 * @author dariushvb2010
*/
public class SimpleCorsFilter implements Filter {

  public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
    HttpServletRequest hreq = (HttpServletRequest) req;
    String origin = hreq.getHeader("Origin");
    if (origin != null) {
        HttpServletResponse response = (HttpServletResponse) res;
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
    }
    chain.doFilter(req, res);
  }

  public void init(FilterConfig filterConfig) {
  }

  public void destroy() {
  }

}

したがって、これらの行をweb.xmlに追加します。

<filter>
    <filter-name>corsFilter</filter-name>
    <filter-class>ir.javan.geoad.util.SimpleCorsFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>corsFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
于 2015-08-17T01:50:35.440 に答える
0

POSTメソッドを使用して別のポート(通常のXHRは同じプロトコル/ドメイン/ポートで動作します)でサーバーを呼び出すには、クロスドメイン(CORS)XHRリクエストが必要です。ExtJS4 を使用すると、次の属性を ajax リクエストに簡単に追加できます。

...
useDefaultXhrHeader: false,
cors: true,
...

6でも動くと思います。

とにかく、別のポートで Java WS を POST で呼び出すには、CORS を管理するように構成する必要があります。基本的に、応答にいくつかのヘッダーを追加する必要がありますが、使用しているスタックに応じて適切なドキュメントが見つかります。

于 2015-08-14T07:36:40.523 に答える
0

Chrome ショートカット プロパティのターゲットの最後に次の構成を使用して、Chrome ブラウザーからコードをヒットしようとしている場合、CORS エラーを回避できます。

--disable-web-security --user-data-dir

また 、Chromeで同一オリジンポリシーを無効にするを確認してください

于 2017-04-19T18:27:23.900 に答える