我在前端使用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
有人可以帮助我吗?
答案 0 :(得分:3)
从前端代码中的Access-Control-Allow-Methods
中删除Access-Control-Allow-Headers
和HttpHeaders
。这些标头应该作为 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
值。这些不是必需的。您是说客户端可以发送这些请求标头,而这是不应该的。
另请参见: