Tomcat 7服务器未发送CORS头

时间:2017-08-15 13:46:19

标签: angular cors tomcat7

我正在编写一个Angular 4应用程序,它与Tomcat 7服务器建立了经过身份验证的连接。此Tomcat服务器上的webapp具有REST API。我在我的一台机器上有一个本地服务器副本,所以我使用的是这样的请求URL:

http://xyz.local:8080/PoolParty/api/projects

我正在使用Safari来处理请求,如果我选中了Disable Cross-Origin Restrictions菜单项,那么我会返回一个json包,我可以在浏览器中显示它。如果我检查该菜单项,则会收到错误消息:

Failed to load resource: Preflight response is not successful

我已经检查了服务器中的CORS过滤器配置,它看起来像这样:

<filter>
  <filter-name>CorsFilter</filter-name>
  <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
  <init-param>
      <param-name>cors.allowed.origins</param-name>
      <param-value>*</param-value>
  </init-param>
  <init-param>
      <param-name>cors.allowed.methods</param-name>
      <param-value>GET,POST,HEAD,OPTIONS,PUT</param-value>
  </init-param>
</filter>
<filter-mapping>
  <filter-name>CorsFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

认为与我在这里以及其他网站上看到过的其他案例相符。

我的角度请求如下:

   private sendRequest(verb: RequestMethod, url: string, body?: Product): Observable<Product> {
      let headers = new Headers();
      headers.set("withCredentials", "true");
      headers.set("Authorization", "Basic ***********");
      headers.set("Access-Control-Allow-Origin", "*");
      headers.set("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
      headers.set("Content-Type", "text/plain");

      return this.http.request(new Request({
        method: verb,
        url: url,
        body: body,
        headers: headers
      })).map(response => response.json());
    }

所以我有几个问题:

  1. 在配置Tomcat服务器以发送CORS标头时,我还需要做些什么?
  2. 我在发送的请求中做了正确的事吗?
  3. 8月24日星期四更新:

    当我使用OPTIONS方法选择行时,以下是Web检查器网络窗口(Safari)中的标题和响应:

    Request & Response:
    ====================
    Method:      OPTIONS
    Cached:      No
    Status:      ___
    Code:        ___
    Encoded:     ___
    Decoded:     ___
    Compressed:  No
    
    Request Headers:
    ================
    Name                            Value
    User-Agent                      Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/603.2.4 (KHTML, like Gecko) Version/10.1.1 Safari/603.2.4
    Cache-Control                   max-age=0
    Referer                         http://localhost:4200/ 
    Origin                          http://localhost:4200
    Access-Control-Request-Method   GET
    Access-Control-Request-Headers  authorization
    Accept                          */*
    
    Response Headers
        No Response Headers
    

    我附上了几张截图。第一个显示请求和响应。第二个显示我上面提到的来自控制台的“预检”错误消息。

    request and response details from browser devtools

    为预检记录的错误消息:

    error messages for preflight

0 个答案:

没有答案