飞行前响应中Access-Control-Allow-Headers不允许请求标头字段Access-Control-Allow-Methods

时间:2018-09-17 15:22:02

标签: angular cors jersey http-headers

我在前端使用Angular,在后端使用Jersey。执行PUT请求时出现异常。这是Angular代码:

{
"Id" : 999
"type" : "outbound"
    "Connections": [
       {
          "www.stackoverflow.com",
          "www.bing.com"
       }
}

这是我在泽西岛的过滤器:

const header=new Headers({'Content-Type':'application/x-www-form-urlencoded'});
header.append("Access-Control-Allow-Methods", "POST");
header.append("Access-Control-Allow-Headers","Access-Control-Allow-Origin");

return this.http.post('http://localhost:8080',home,{headers: header})
    .pipe(map((response: Response)=>{return response.json();}));

这是例外:

  

在飞行前响应中,无法加载请求http://localhost:8080/请求标头字段Access-Control-Allow-Headers不允许访问Control-Allow-Methods

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:3)

从前端代码中的Access-Control-Allow-Methods中删除Access-Control-Allow-HeadersHttpHeaders。这些标头应该作为 response 标头从服务器发送(这是您在CORSResponseFilter中所做的事情)。

  

在飞行前响应中,无法加载请求http://localhost:8080/请求标头字段Access-Control-Allow-Headers不允许访问Control-Allow-Methods

此错误的意思是服务器响应标头Access-Control-Allow-Headers在标头值中不包含Access-Control-Allow-Methods(不应包含)。 Access-Control-Allow-Headers的目的是告诉浏览器允许客户端将哪些请求标头发送到服务器。您可以在CORSResponseFilter中看到允许的标题。 Access-Control-Allow-Methods不是其中之一。

在您这样做的同时,您也可以删除Access-Control-XX-XX响应标头中的所有Access-Control-Allow-Headers值。这些不是必需的。您是说客户端可以发送这些请求标头,而这是不应该的。

另请参见:

  • 请查看the update in this answer,以获取有关这些标头如何工作的良好解释(如果您有兴趣的话)。