Angular 浏览器未发送请求(CORS配置)

Angular 浏览器未发送请求(CORS配置),angular,cors,Angular,Cors,我已经深入研究了CORS的配置。在发送“real”请求之前,浏览器尝试请求发送CORS请求的有效请求配置。我的服务器应用程序配置了一个CORSFilter,它已经在响应这些请求。尽管如此,响应是200-OK代码,但不会发送“real”请求 据我所知,当CORS请求是200-OK时,浏览器应该发送“real”请求,不是吗 当我到达this.http.request(路径,requestOptions)时,会发送一个CORS请求: 卷曲“http://localhost:8082/commty/c

我已经深入研究了CORS的配置。在发送
“real”
请求之前,浏览器尝试请求发送CORS请求的有效请求配置。我的服务器应用程序配置了一个
CORSFilter
,它已经在响应这些请求。尽管如此,响应是
200-OK
代码,但不会发送
“real”
请求

据我所知,当
CORS请求
200-OK
时,浏览器应该发送
“real”
请求,不是吗

当我到达
this.http.request(路径,requestOptions)
时,会发送一个CORS请求:


卷曲“http://localhost:8082/commty/cmng/users“-X选项-H”主机:本地主机:8082“-H”用户代理:Mozilla/5.0(Windows NT 10.0;WOW64;rv:50.0)Gecko/20100101 Firefox/50.0“-H”接受:文本/html,应用程序/xhtml+xml,应用程序/xml;q=0.9,*/*;q=0.8“-H”接受语言:es,es;q=0.8,en-US;q=0.5,en;q=0.3”--压缩-H“访问控制请求方法:放置“-H”访问控制请求标题:passwd,用户“-H”来源:http://localhost:3000“-H”连接:保持活动状态”

和响应标题:


HTTP/1.1200ok
X动力:下拖/1
访问控制允许标题:来源、内容类型、接受、授权
服务器:WildFly/10
日期:2016年12月9日星期五07:50:55 GMT
允许:HEAD、GET、OPTIONS、PUT
连接:保持活力
访问控制允许来源:*
访问控制允许凭据:true
内容类型:文本/纯文本
内容长度:23
访问控制允许方法:GET、POST、PUT、DELETE、OPTIONS、HEAD
访问控制最大年龄:1209600

有什么问题我不明白吗

为什么浏览器不发送
“real”
请求

编辑

当我试图发送
PUT
请求(typescript fragemnt code)时,此链开始:

错误消息

Object {
  _body: error,
  status: 0,
  ok: false,
  statusText: "",
  headers: Object,
  type: 3,
  url: null
}
由于您正在使用:

responseContext.getHeaders().add(“访问控制允许凭据”,“true”);

不允许对源代码使用通配符。请将其更改为:

responseContext.getHeaders().add(“Access Control Allow Origin”,“my.frontend.com”);
因为您正在使用:

responseContext.getHeaders().add(“访问控制允许凭据”,“true”);

不允许对源代码使用通配符。请将其更改为:


responseContext.getHeaders().add(“Access Control Allow Origin”,“my.frontend.com”);

我在帖子中添加了一条我错过的错误消息。你能看看这条消息吗。你从哪里得到这条错误消息?如果这是在浏览器控制台中,我肯定也添加了一些上下文。这是
this.http.request的输出(path,requestOptions).map((response:response)=>{return response.json();}).subscribe((error:any)=>{console.log(error);});
看起来不像是错误,看起来像是正常响应。这样,您就可以区分错误和正常结果
This.http.request(path,requestOptions).map((response:response)=>{return response.json();}).subscribe((结果)=>{console.log('result:',result);},(error:any)=>{console.log('error:',error);});
对我来说,您发布为错误的内容似乎是Angular正常收到的服务器响应。我在post上添加了一条我错过的错误消息。您能看看这条消息吗。您从哪里得到这条错误消息?如果这是在浏览器控制台中,我肯定也添加了一些上下文。这是
this.htt的输出p、 request(path,requestOptions).map((response:response)=>{return response.json();}).subscribe((error:any)=>{console.log(error);});
看起来不像是错误,看起来像是正常响应。通过这种方式,您可以区分错误和正常结果
This.http.request(path,requestOptions).map((response:response)=>{return response.json();}).subscribe((结果)=>{console.log('result:',result);},(error:any)=>{console.log('error:',error);})在我看来,您发布为错误的内容似乎是Angular正常接收到的服务器响应。浏览器首先发送一个
选项
请求。您的后端响应该请求,并在响应中添加标题
“访问控制允许来源”,“my.frontend.com”
(和其他)。然后,浏览器会检查
选项
响应的标题,这就是它如何知道允许发送的内容。因此,这会导致您仅从“my.frontend.com”获取请求,而您自己在响应后端的
选项
请求时明确允许该请求。浏览器会发送
选项
请求rst。您的后端会对此做出响应,并在响应中添加标题
“访问控制允许来源”,“my.frontend.com”
(以及其他)。然后,浏览器会检查
选项
响应的标题,这就是它如何知道允许发送的内容。因此,这将导致您仅从“my.frontend.com”获取请求,而您自己在后端响应
选项
请求时明确允许该请求。
@Provider
public class CORSFilter implements ContainerResponseFilter
{

    @Override
    public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException
    {   
        responseContext.getHeaders().add("Access-Control-Allow-Origin", "*");
        responseContext.getHeaders().add("Access-Control-Allow-Headers", "origin, content-type, accept, authorization");
        responseContext.getHeaders().add("Access-Control-Allow-Credentials", "true");
        responseContext.getHeaders().add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD");
        responseContext.getHeaders().add("Access-Control-Max-Age", "1209600");
    }

}
Object {
  _body: error,
  status: 0,
  ok: false,
  statusText: "",
  headers: Object,
  type: 3,
  url: null
}