首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Access-Control-Allow-Headers不允许请求头部字段Access-Control-Allow-Headers

Access-Control-Allow-Headers不允许请求头部字段Access-Control-Allow-Headers
EN

Stack Overflow用户
提问于 2014-09-08 23:03:16
回答 16查看 515.9K关注 0票数 256

我尝试使用post请求将文件发送到我的服务器,但当它发送时会导致错误:

Access-Control-Allow- header不允许

请求标头字段Content-Type。

所以我用谷歌搜索了这个错误,并添加了标题:

代码语言:javascript
复制
$http.post($rootScope.URL, {params: arguments}, {headers: {
    "Access-Control-Allow-Origin" : "*",
    "Access-Control-Allow-Methods" : "GET,POST,PUT,DELETE,OPTIONS",
    "Access-Control-Allow-Headers": "Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With"
}

然后我得到了错误:

请求头部字段Access-Control-Allow- header不允许访问-控制-允许-来源

所以我在谷歌上搜索了一下,我能找到的唯一类似的问题是提供了一半的答案,然后作为离题关闭。我应该添加/删除哪些标头?

EN

回答 16

Stack Overflow用户

回答已采纳

发布于 2014-09-08 23:08:39

服务器( POST请求被发送到的目标)需要在其响应中包含Access-Control-Allow-Headers标头(etc) 。将它们放入客户端的请求中不会产生任何效果。

这是因为它由服务器来指定它接受跨域请求(并且它允许Content-Type请求头,等等)-客户端不能自己决定给定的服务器应该允许CORS。

票数 216
EN

Stack Overflow用户

发布于 2015-05-31 14:01:43

我也有同样的问题。我发现的In the jQuery documentation

对于跨域请求,将内容类型设置为application/x-www-form-urlencodedmultipart/form-datatext/plain以外的任何值都会触发浏览器向服务器发送印前检查选项请求。

因此,虽然服务端允许跨域请求,但不允许Access-Control-Allow-Headers,但会抛出错误。默认情况下,angular内容类型是application/json,它试图发送OPTION请求。尝试覆盖angular默认标头或在服务器端允许Access-Control-Allow-Headers。下面是一个angular示例:

代码语言:javascript
复制
$http.post(url, data, {
    headers : {
        'Content-Type' : 'application/x-www-form-urlencoded; charset=UTF-8'
    }
});
票数 272
EN

Stack Overflow用户

发布于 2015-11-25 11:05:53

如果这对任何人都有帮助,(即使这有点糟糕,因为我们必须只允许它用于开发目的),这里有一个Java解决方案,因为我遇到了同样的问题。编辑不要使用通配符,因为这是一个糟糕的解决方案,如果你真的需要在本地运行一些东西,请使用localhost

代码语言:javascript
复制
public class SimpleCORSFilter implements Filter {

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
    HttpServletResponse response = (HttpServletResponse) res;
    response.setHeader("Access-Control-Allow-Origin", "my-authorized-proxy-or-domain");
    response.setHeader("Access-Control-Allow-Methods", "POST, GET");
    response.setHeader("Access-Control-Max-Age", "3600");
    response.setHeader("Access-Control-Allow-Headers", "Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");
    chain.doFilter(req, res);
}

public void init(FilterConfig filterConfig) {}

public void destroy() {}

}
票数 53
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25727306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档