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

use*_*367 211 javascript post header cors angularjs

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

$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"
}
Run Code Online (Sandbox Code Playgroud)

所以我用Google搜索了错误并添加了标题:

$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"
}
Run Code Online (Sandbox Code Playgroud)

然后我得到错误:

$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"
}
Run Code Online (Sandbox Code Playgroud)

所以我用谷歌搜索了那个,我能找到的唯一类似的问题提供了一个半答案然后关闭作为主题.我应该添加/删除哪些标题?

Fis*_*man 221

我有同样的问题.在jQuery文档中我发现:

对于跨域请求,内容类型设置为比其他任何东西application/x-www-form-urlencoded,multipart/form-datatext/plain将触发浏览器发送预检OPTIONS请求到服务器.

因此,虽然服务器允许跨源请求但不允许Access-Control-Allow-Headers,但它会抛出错误.默认情况下,角度内容类型是application/json尝试发送OPTION请求.尝试覆盖角度默认标头或允许Access-Control-Allow-Headers在服务器端.这是一个有角度的样本:

$http.post(url, data, {
    headers : {
        'Content-Type' : 'application/x-www-form-urlencoded; charset=UTF-8'
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 这应该是一个公认的答案,比另一个更有用! (28认同)
  • `或允许服务器端的Access-Control-Allow-Headers`如何? (2认同)

Sha*_*hai 176

服务器(即POST请求被发送到)需要包括Access-Control-Allow-Headers报头(等)在它的响应.将它们放入客户的请求中无效.

这是因为由服务器指定它接受跨源请求(并且它允许Content-Type请求头等等) - 客户端无法自行决定给定服务器应该允许CORS.

  • 我想我必须和我的服务员谈谈. (11认同)
  • @ user3194367:取决于你的后端. (9认同)
  • 如何在后端设置标头? (4认同)
  • response.addHeader("Access-Control-Allow-Headers","yourKey"); (2认同)
  • @Mayuresh yourKey 是什么?`内容类型`? (2认同)
  • 从请求标头中删除“Access-Control-Allow-Origin”字段。 (2认同)

lek*_*ant 47

如果这对任何人都有帮助,即使是这种穷人,因为我们必须只允许这个用于开发目的,这是一个Java解决方案,因为我遇到了同样的问题.[编辑]不要使用外卡*,因为它是一个糟糕的解决方案,如果你真的需要一些在本地工作的东西,请使用localhost.

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

}
Run Code Online (Sandbox Code Playgroud)


l3x*_*l3x 14

服务器(发送POST请求)需要在其响应中包含Content-Type标头.

以下是要包含的典型标头列表,包括一个自定义"X_ACCESS_TOKEN"标头:

"X-ACCESS_TOKEN", "Access-Control-Allow-Origin", "Authorization", "Origin", "x-requested-with", "Content-Type", "Content-Range", "Content-Disposition", "Content-Description"
Run Code Online (Sandbox Code Playgroud)

这就是您的http服务器人员需要为您发送请求的Web服务器配置的内容.

您可能还想让服务器人员公开"Content-Length"标题.

他将此视为跨源资源共享(CORS)请求,并应了解进行这些服务器配置的含义.

详情见:


小智 10

您可以使用以下方法在PHP中激活适当的标头:

header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE");
header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, X-Requested-With");
Run Code Online (Sandbox Code Playgroud)

  • 请描述您的答案与其他答案有何不同。仅发布一些代码不是很有帮助。 (3认同)
  • 你是一个摇滚明星,其余的答案深入技术方面。您通过指定也应该允许的方法来解决我的问题! (2认同)

Fer*_*eli 8

以下适用于nodejs:

xServer.use(function(req, res, next) {
  res.setHeader("Access-Control-Allow-Origin", 'http://localhost:8080');
  res.setHeader('Access-Control-Allow-Methods', 'POST,GET,OPTIONS,PUT,DELETE');
  res.setHeader('Access-Control-Allow-Headers', 'Content-Type,Accept');

  next();
});
Run Code Online (Sandbox Code Playgroud)


jer*_*naa 8

如果您正在使用localhostPHP,并将其设置为解决该问题:

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Headers: Content-Type'); 
Run Code Online (Sandbox Code Playgroud)

从您的前端使用来看:

{headers: {"Content-Type": "application/json"}}
Run Code Online (Sandbox Code Playgroud)

繁荣不再有问题localhost


Gab*_* P. 5

Asp Net Core中,快速使其能够用于开发;中Startup.csConfigure method添加

app.UseCors(options => options.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());
Run Code Online (Sandbox Code Playgroud)