首页 文章

请求标头字段Access-Control-Allow-Methods在预检响应中不允许使用Access-Control-Allow-Headers

提问于
浏览
1

我在前端使用Angular,在后端使用Jersey . 我执行PUT请求时遇到异常 . 这是Angular代码:

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();}));

这是我在 Jersey 的过滤器:

@Provider
public class CORSResponseFilter implements ContainerResponseFilter {

    @Override
    public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext)
            throws IOException {

        responseContext.getHeaders().add("Access-Control-Allow-Origin", "*");
        //headers.add("Access-Control-Allow-Origin", "http://podcastpedia.org"); podcastpedia.org       
        responseContext.getHeaders().add("Access-Control-Allow-Methods", "GET,PUT,POST,DELETE,PATCH,OPTIONS");          
        responseContext.getHeaders().add("Access-Control-Allow-Headers", "Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers"); 
    }

}

这是例外:

无法加载http:// localhost:8080 /请求标头字段Access-Control-Allow-Methods在预检响应中不允许使用Access-Control-Allow-Methods

有人可以帮帮我吗?

1 回答

  • 3

    从前端代码中的 HttpHeaders 中删除 Access-Control-Allow-MethodsAccess-Control-Allow-Headers . 这些头文件应该作为服务器的响应头发送(这是你在 CORSResponseFilter 中所做的) .

    无法加载http:// localhost:8080 /请求标头字段Access-Control-Allow-Methods在预检响应中不允许使用Access-Control-Allow-Methods

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

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

    See also:

相关问题