2017-08-16 98 views
1

:我们有一个节点快递web服务器(UI),要求从Java Dropwizard(新泽西州)服务器的HTTP API,在同一台主机上运行。CORS与我在使用基本的HTTP认证与CORS一些问题基本HTTP认证

的API保护与HTTP基本身份验证,并且我特地来实现我的球衣服务器上的以下过滤器(从这个职位采取:How to handle CORS using JAX-RS with Jersey):

@Provider 
public class CORSFilter implements ContainerResponseFilter { 

    @Override 
    public void filter(ContainerRequestContext request, 
             ContainerResponseContext response) throws IOException { 
     response.getHeaders().add("Access-Control-Allow-Origin", "http://localhost:9000"); 
     response.getHeaders().add("Access-Control-Allow-Headers", 
       "Cache-Control, Pragma, Origin, Authorization, Content-Type, X-Requested-With"); 
     response.getHeaders().add("Access-Control-Allow-Credentials", "true"); 
     response.getHeaders().add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD"); 
    } 
} 

然而,当我尝试加载我的控制台给我以下输出:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost:9000/intraday/parameters. (Reason: CORS header ‘Access-Control-Allow-Origin’ does not match ‘http://localhost:9000’) 

我无法理解这个错误。显然,起源是相同的(http://localhost:9000),所以我不知道为什么它不匹配。

我也确信,任何预检OPTIONS请求回答HTTP代码200

+0

也许这可能会帮助你:https://stackoverflow.com/questions/28065963/how-to-handle-cors-using-jax-rs-with-jersey – sascha10000

+0

@ sascha10000你提供的链接是相同的职位我已经链接到我的问题。 –

+0

噢,对不起,我真的没有看到,这是一个链接... – sascha10000

回答

1

从问题的描述,这听起来像在Java Dropwizard(新泽西州)服务器上http://localhost:9000和节点运行快递web服务器(UI),在另一原点运行。

无论如何,您必须将Jersey服务器上CORSFilter代码中的Access-Control-Allow-Origin响应头的值设置为发出请求的前端JavaScript代码(显然是节点服务器)的原点。所以,如果是这样的,例如,http://localhost:12345,则:

response.getHeaders().add("Access-Control-Allow-Origin", "http://localhost:12345"); 

这无论如何必须比http://localhost:9000其他东西,因为没有办法浏览器会发射出错误消息,如果“不允许在http://localhost:9000/…读取远程资源”前端JavaScript代码的要求越来越从正在从http://localhost:9000 - 由于在这种情况下,它不会是一个跨域请求,您的浏览器将不会阻止访问响应服务发送。