Javascript Tomcat 8未响应来自CriOS的选项请求

Javascript Tomcat 8未响应来自CriOS的选项请求,javascript,java,ajax,tomcat,cors,Javascript,Java,Ajax,Tomcat,Cors,我有一个应用程序,它使用CORS的POST请求来提供后端服务(从www.mydomain.com到api.mydomain.com)。后端由Tomact8服务器提供,一个CORSResponseFilter已实现如下: public class CORSResponseFilter implements ContainerResponseFilter { public void filter( ContainerRequestContext requestContext, Contain

我有一个应用程序,它使用CORS的POST请求来提供后端服务(从
www.mydomain.com
api.mydomain.com
)。后端由Tomact8服务器提供,一个
CORSResponseFilter
已实现如下:

public class CORSResponseFilter implements ContainerResponseFilter {

   public void filter( ContainerRequestContext requestContext, ContainerResponseContext responseContext ) throws IOException {

       MultivaluedMap< String, Object > headers = responseContext.getHeaders();

       headers.add( "Access-Control-Allow-Origin", "*" );
       headers.add( "Access-Control-Allow-Methods", "POST" );
       headers.add( "Access-Control-Allow-Headers", "X-Requested-With, Content-Type" );
    }
}
第二行按原样显示了一个请求,可以看到在第一种情况下响应没有大小,因此我认为根本不发送任何内容,其中第二个调用接收561字节的响应

我不知道比weinre更好的在iOS上调试Chrome的方法,它只显示
POST
请求启动,但从未收到响应(尽管Tomcat只收到
OPTIONS
请求,没有后续
POST

在客户端,
superagent
库用于
HTTP
调用。 我不知道这个问题是由Tomcat服务器本身还是客户端/浏览器引起的,因为它只发生在特定的设备/浏览器组合(iOS上的Chrome)上

有没有人经历过类似的行为,能告诉我缺失的部分

PS:是的,iPhone运行的是预发布的iOS,但常规iOS版本也会如此

更新:使用WireShark,我可以从桌面和手机中提取
选项
请求的标题

来自CriOS:

Connection: keep-alive
Access-Control-Request-Headers: accept, origin, content-type
Access-Control-Request-Method: POST
Accept: */*,image/webp
User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) CriOS/45.0.2454.89 Mobile/13B5110e Safari/600.1.4
Accept-Encoding: gzip, deflate, sdch
Accept-Language: de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4
从桌面:

Connection: keep-alive
Access-Control-Request-Method: POST
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36
Access-Control-Request-Headers: accept, content-type
Accept: */*
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8,de-DE;q=0.6,de;q=0.4,ru;q=0.2
我注意到的是
ACCEPT
头中的image/webp媒体类型,但它也有*/*,因此我不确定这是否相关…

关于我可以通过在服务器上操作请求头来解决这个问题:

public class CroISRequestFilter implements ContainerRequestFilter {

    @Override
    public void filter( final ContainerRequestContext requestContext ) throws IOException {

        if (requestContext.getHeaders().getFirst( "accept" ).equals( "*/*,image/webp" )) requestContext.getHeaders().putSingle( "accept", "*/*" );
    }
}

此筛选器只需将任何*/*、image/webp内容类型覆盖为直接*/*,允许服务器响应文本/普通,从而启用客户端(CriOS)上的CORS

希望我们能看到请求标题。我很乐意向您展示。如果我知道如何在手机chrome@bayou.io?@bayou.io上收集它们,我会更新我的问题。如果有新的见解,我可以确定:尽可能相关。
public class CroISRequestFilter implements ContainerRequestFilter {

    @Override
    public void filter( final ContainerRequestContext requestContext ) throws IOException {

        if (requestContext.getHeaders().getFirst( "accept" ).equals( "*/*,image/webp" )) requestContext.getHeaders().putSingle( "accept", "*/*" );
    }
}