带有基本 HTTP 身份验证的 CORS
Posted
技术标签:
【中文标题】带有基本 HTTP 身份验证的 CORS【英文标题】:CORS with basic HTTP Authentication 【发布时间】:2018-01-24 11:16:08 【问题描述】:我在使用 CORS 的基本 HTTP 身份验证时遇到了一些问题:我们有一个 node express Web 服务器 (UI),从 Java Dropwizard (Jersey) 服务器调用 HTTP API,在同一主机上运行。
API 受到 HTTP 基本身份验证的保护,我在我的 Jersey 服务器上实现了以下过滤器(摘自这篇文章: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");
但是,当我尝试加载 Web UI 时,我的控制台会给出以下输出:
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),所以我不明白为什么它不匹配。
我还确保使用 HTTP 代码 200 响应任何预检 OPTIONS 请求。
【问题讨论】:
也许这对你有帮助:***.com/questions/28065963/… @sascha10000 您提供的链接与我在问题中已经链接到的帖子相同。 哦,抱歉,我真的没有看到这是一个链接... 【参考方案1】:根据问题中的描述,听起来 Java Dropwizard (Jersey) 服务器在 http://localhost:9000
上运行,而 node express 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
,因为如果前端JavaScript 编码请求,您的浏览器不会发出“不允许读取http://localhost:9000/…
的远程资源”的错误消息发送自 http://localhost:9000
提供服务——因为在这种情况下,它不是跨域请求,您的浏览器也不会阻止对响应的访问。
【讨论】:
以上是关于带有基本 HTTP 身份验证的 CORS的主要内容,如果未能解决你的问题,请参考以下文章
AngularJS $http、CORS 和 Jersey 的基本身份验证
在 Angular 2 中使用基本身份验证预检 CORS 请求
带有 Windows 身份验证的 Web api 中的 Cors 问题